Membuat Website dengan CodeIgniter #2

Sep 27, 2009   //   by anggie   //   CodeIgniter, PHP  //  49 Comments

Sekarang kita akan meluncur ke section utama, yakni permainan database. Pada dasarnya, semua yang ingin ditampilkan di halaman web kita adalah sebuah permainan database biasa. Entah itu recent post, recent comment, dsb. Nah, disini, karena kita menggunakan framework untuk membuatnya, maka kita sebaiknya menaati ‘nasehat’ dari CI.

Apa itu nasehatnya? Dalam hal ini adalah ‘gunakan model untuk mengakses database’. Saya akan berikan contoh model untuk membuat tampilan ‘recent posts’. Sebelumnya, pada database yang sudah kita tentukan, buat tabel untuk posting.

--
-- Table structure for table `posting`
--
CREATE TABLE `posting` (
  `posting_id` int(5) NOT NULL auto_increment,
  `posting_judul` varchar(100) collate latin1_general_ci NOT NULL,
  `posting_isi` longtext collate latin1_general_ci NOT NULL,
  `posting_tanggal` varchar(50) collate latin1_general_ci NOT NULL,
  `posting_aktif` int(1) NOT NULL default '1',
  `posting_hits` int(100) NOT NULL,
  PRIMARY KEY  (`posting_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=1 ;

Tabel di atas masih sangat sederhana, Anda dapat menambahkan kolom jika Anda menginginkannya. Nah, ini dia modelnya…

Class Postmodel extends Model
{
 function Postmodel()
 {
  parent::Model();
 }
 function getRecentPost()
 {
  $this->db->select('*');
  $this->db->from('posting p');
  $this->db->where('posting_aktif',1);   // hanya posting yang aktif yang ditampilkan
  $this->db->order_by('p.posting_id','desc');
  $this->db->limit(5);  // diambil lima entri terbaru
  return $this->db->get();
 }
}

Ok. Selanjutnya, kita buat modifikasi controller yang dulu kita buat, pada seri tutorial website #1.

<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
class Web extends Controller {
    function Web()
    {
        parent::Controller();
        $this->load->model('postmodel');
        $this->load->helper('text');
    }
    function index()
    {
        $data['title']="Welcome to My Website"; // data  untuk variabel $title
        $data['content']=$this->postmodel->getRecentPost(); // data  untuk variabel $content
        $this->load->view('main',$data);
    }
}

Selanjutnya, modifikasi juga view ‘content.php’, karena view yang kita load (main.php) memanggil file content.php untuk jadi tampilan content.

<!-- content starts here -->
 <div id='content'>
  <?php foreach($content->result() as $row):?>
 <h3><?=$row->posting_judul?></h3>
 <p class="post-info">
  Oleh  Admin | <?=$row->posting_hits?> hits
 </p>
 <p>
 <?=word_limiter($row->posting_isi,30)?> </p> <!-- batasi tampilan hanya 30 kata -->
 <p class="postmeta">
  <span class="date"><?=date('d F Y',$row->posting_tanggal)?></span>
 </p>
<?php endforeach< span class="phpScriptTag">?>
 </div>
<!-- content ends here -->

Yups, kita selesai. Silakan dicoba. Kita akan buat yang lebih kompleks di tulisan mendatang (kategori, komentar, arsip, dsb). {to be continued }
Nb. Model memerlukan koneksi ke database. Di CI, ada beberapa cara untuk dapat terkoneksi ke database, dari yang otomatis sampai manual. Saran saya, lakukan dengan cara otomatis, karena kita akan sering menggunakan database dalam script kita. Untuk itu, pada autoload.php, tambahkan ‘database’ dalam array $autoload['libraries'].

Related posts:

  1. Membuat Website dengan CodeIgniter #4
  2. Membuat Website dengan CodeIgniter #3
  3. Membuat Website dengan CodeIgniter #1
  4. Simple Tutorial CodeIgniter Episode 3
  5. Membuat Combobox Dinamis dengan CI dan Ajax

49 Comments

  • Makacih mas atas tutorial yang bermanfaat ini,tapi qo ada yang ga jalan ya mas…tepatnya di file view ga bisa memanggil $content dan $title dari Controller…mkacih mas…

  • Bisa disampaikan muncul tulisan error apa?

  • Tidak ada error sih mas,hanya saja variabel tersebut tadi tidak muncul saat saya panggil…mkacih mas..

  • nice posting, saya yang masih newbie ini aja langsung ngerti^^

    btw, di artikel sebelumnya dibahas klo di view untuk menampilkan data katanya bisa langsung tanpa melakukan looping… n looping dilakukan di model

    klo itu caranya gmn yah? apa mungkin kita looping tag HTMLnya di model?

  • oiya, 1 lagi mas, maaf nh banyak nanya,, hhe

    pada saat saya menitipkan data dari controller ke view,, kq datanya ga ke kirim yah,,

    pass saya echo di view si variable datanya ga terdefinisi mas,,

    thank yah^^

  • Benar, kita lakukan looping di model. Itu sih terserah sang programmer, enaknya gimana.

    Untuk penitipan variabel, saya biasanya lakukan seperti ini…

    // di controller
    function show()
    {
          $data['terserah'] = "isi variabel";
          $this->load->view('view_file',$data);
    }
    
    // di view_file.php
    echo $terserah;  // BUKAN echo $data['terserah']
    
    
  • Mas, anggi kalo boleh komentar, sampai saat ini saya mempelajari, penjelasan mas anggi sangat detail dengan codingan yg simple, salut…
    Anda telah membantu orang banyak terima kasih :)

  • Wah…sama-sama deh. Latar belakang saya kn memang bukan dari komputer, saya orang eksak, matematika murni. Jadi, saya menyukai ke-simpel-an dan kejelasan…

  • maaf pemula.
    untuk ‘model’ itu di simpan dimna yah?

  • Model biasanya disimpan dalam folder application/model/

  • model di simpan dengan nama apa mas..?

  • sesuai dengan nama class dalam model tersebut

  • Kok muncul pesan eror berikut :
    Fatal error: Call to a member function select() on a non-object in F:\webdirectory\htdocs\a\system\application\models\postmodel.php on line 10

    apanya yang salah yaa mas..
    thanks

  • boleh kirim source nya? tampilkan pada baris yang salah tadi

  • Mas anggie, bisa minta contoh penggunaan Captha yang simple tidak mas? yang lengkap dengan validasi dan simpan ke database.
    Saya mau make captcha bingung. cara validasi nya.

  • sudah melihat artikel di blog ini tentang captcha

  • mas saya udah coba step2 yg diatas tp kok yg muncul cuma header ma footer aja ya.. contentx kok ga muncul?? mohon bimbinganx mas..:)

  • assalamualaikum..mas..saya mo nanya…knpa klo itu klo di view ga muncul variabel nya..tapi klo ditulis itu baru mau muncul..jdi intinya beda dengan apa ya mas..apa saya harus konfigurasi base php nya..mohon bantuan nya..wasalam

  • < ?=$namavariabel ?> < ?php $namavariabel ?>
  • assalamualaikum..mas..saya mo nanya…knpa klo

    < ?= $namavariabel ?>

    itu di view ga muncul nilai variabel nya..tapi klo ditulis

    < ?php echo $namavariabel ?>

    itu baru mau muncul..jdi intinya beda

    < ?= $namavariabel ?> dengan < ?php echo  $namavariabel ?>

    apa ya mas..apa saya harus konfigurasi base php nya..mohon bantuan nya..wasalam

  • Itu setting di phpnya mas..di php.ini, bagian shorttag dicari aja, klo off di on kan…

  • mas..mksd na yg ini ya…

    ; Development Value: Off
    ; Production Value: Off
    ; http://php.net/short-open-tag
    short_open_tag = off
    
    short_open_tag = off sana ganti On ttp gak mau mas.
  • Emm…sudah direstart apache-nya belum?

  • Wah keren banget mas tutorialnya. Saya baru belajar CI dari web ini, oh iya mau tanya mas untuk tutorial kedua ini saya dah sukses cuman sepertinya format tanggal masih belum berhasil

  • mas anggie… kok muncul error pada line ini “<?php endforeach?>
    ” di localhos saya,,,,????? bantuannya donk…

  • @adnan : ternyata muncul string yang salah di artikel itu. Hilangkan string

    < span class="phpScriptTag">
    
  • wah…mantep tutsnya gan..

    rasanya kalo class modelnya di load secara otomatis akan sangat membantu mengurangi repetitive-task, secara akan banyak terjadi interkoneksi ke database melalui class model.

    cara konfigurasi men-load class model secara otomatis bisa di lakukan dengan mendeklarasikannya di file autoload.php. kira” seperti ini :

    $autoload['model'] = array(‘nama_model1′, ‘nama_model2′, ‘nama_model_n’);

  • @syafii : tergantung kebutuhan mas…klo di atas saya tampilkan di controller karena memang desain saya, model tersebut hanya untuk controller ‘web’. Jika kita punya banyak model, alangkah lebih bijak jika model tersebut diload di masing masing controller yang membutuhkannya saja, untuk menghindari proses load script yang percuma

  • mas kok kayak gini

    A PHP Error was encountered

    Severity: Notice

    Message: Undefined property: Postmodel::$db

    Filename: models/postmodel.php

    Line Number: 10

    Fatal error: Call to a member function select() on a non-object in C:\wamp\www\ci_simpleweb\system\application\models\postmodel.php on line 10

    apanya ya?

  • oia, satu lagi.
    template punya saya hasil donlotan, tapi kenapa cssnya jadi gak fungsi alias tampilannya masih standar? pdhl hsil donlotan tsb css sudah sy pindah ke folder view.
    gmn y?

  • @agus : di config/autoload.php, tambahkan ‘database’ di array $autoload['libraries']

    untuk CSS, pakai URL lengkap mas…jangan pake path…jadi sekalian sama base_url nya

  • Tetep aja mas.. Fatal error: Call to a member function select() on a non-object in C:\AppServ\www\latian\ci20\application\models\postmodel.php on line 10

    padahal udah : di config/autoload.php, tambahkan ‘database’ di array $autoload['libraries']

    makasih mas

  • @ronfeel : saya tidak bisa menjawab pertanyaan yang seperti ini. Seharusnya aturan bisa, menurut user guide bisa, di tempat saya bisa, tapi Anda bilang tidak bisa.

  • makasih mas,

    maaf sya baru belajar ci..

    mohon bantuannya mas

  • oke mas, sudah jadi.

    tapi mohon diedit lagi ni artikelnya, coz yang script
    saya tulis juga. Ternyata itu salah kan mas, harusnya gak ada. Dari tadi parse error terus ternyata itu ya?

    makasih bantuannya

  • @agus : seperti jawaban diatasnya, seharusnya bisa mas, di tempat saya bisa. Klo di tempat mas ga jalan, itu ya aneh, berarti ada sesuatu yang karena keterbatasan saya, saya tidak tahu.

  • mas saya pusing d

    – Table structure for table `posting`

    CREATE TABLE `posting` (
    `posting_id` int(5) NOT NULL auto_increment,
    `posting_judul` varchar(100) collate latin1_general_ci NOT NULL,
    `posting_isi` longtext collate latin1_general_ci NOT NULL,
    `posting_tanggal` varchar(50) collate latin1_general_ci NOT NULL,
    `posting_aktif` int(1) NOT NULL default ’1′,
    `posting_hits` int(100) NOT NULL,
    PRIMARY KEY (`posting_id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=1 ;

    maksud nya gmana …?

  • Pusing dimana? itu hanya query mysql untuk buat tabel ‘posting’ di database

  • mas punya saya masih eror seperti ini ya’?

    “Parse error: syntax error, unexpected ‘<', expecting ';' in C:\AppServ\www\webku\application\views\content.php on line 13"

    di atas ada pertanyaan yang sama kayanya tapi itu juga saya masih bingung yang di hapus string yang mana,, maklum saya baru belajar mas.. tolong di bantu ya…
    ini script saya mas.. kira2 mana yang salah yah??

    result() as $row):?>
    posting_judul?>

    Oleh Admin | posting_hits?> hits

    posting_isi,30)?>

    posting_tanggal)?>

    <?php endforeach ?>

    trimakasih

  • ganti aja php tag

    < ?=

    dengan

    < ?php
  • Parse error: syntax error, unexpected ‘<', expecting ';' in E:\ci\system\application\views\content.php on line 13 poenyakoe , kalau string <span "phpscripttag" koe hapus nge blank term header/title ….. boleh nanya mas versi ci nya berapa yah…mgkn bs buat referensi saya. trims

  • Maaf mas kenapa muncul eror seperti ini yah

    Fatal error: Call to a member function result() on a non-object in C:\wamp\www\cirahma\system\application\views\content.php on line 3

    result() ini apa ya mas ya?

    maaf newbi neh

    Terimakasih

  • @cahsolo : lihat comment diatas comment mas..
    saya pake CI 1.7.3
    @zahra : itu berarti query db nya ada yang salah..”on a non-object”, coba periksa query db nya.

  • mas, saya masih nubitol..
    versi CI yang saya gunakan 2.0.2
    ada beberapa perbedaan ya dengan versi lama, seperti pada versi 2.0.2
    class Web extends CI_Controller {

    }
    kalau versi 1.7 class Web extends Controller { … }

    kenapa ya waktu saya nyobain ini muncul error seperti ini

    A PHP Error was encountered

    Severity: Notice

    Message: Undefined property: Web::$load

    Filename: controllers/web.php

    Line Number: 6

    Fatal error: Call to a member function model() on a non-object in C:\xampp\htdocs\ci\application\controllers\web.php on line 6

    kalau disuruh mengirim kan file saya dikirim kemana y?

  • keren mas tutorialnya.. thanks :-)

  • Bos, mau tanya untuk pembuatan controller utama dengan code :

    load->view(‘main’,$data); // load main.php (kita buat nanti) dengan beban data
    }
    }

    yang ada pada membuat website dengan codeignitier#1

    Code itu diletakkan dimana dan disave dengan nama apa? saya cukup mengalami kesulitan di hal itu.. mohon dibantu, untuk pengerjaan proyek kuliah..
    Need Reply a.s.a.p. THX before

  • Kalo mau buat situs seperti yahoo answers menggunakan CodeIgniter tuh seperti apa mas?

  • muncul eror:
    Severity: Notice

    Message: Undefined property: Web::$postmodel

    Filename: controllers/web.php

    Line Number: 12

    Fatal error: Call to a member function getRecentPost() on a non-object in C:\xampp\htdocs\Coba_Siaga\application\controllers\web.php on line 12

    saya pakai CI 2.1.0….

  • Hello…tutorial ini untuk CI kurang dari 2.0.

    Silakan kunjungi blog saya yang baru di http://anggytrisnawan.com.

    Insya Allah tutorialnya lebih update (dan memakai CI > 2.0)


Leave a comment