Membuat Website dengan CodeIgniter #3
Ditulis pada 14 Dec 2008 dalam kategori Seri Tutorial Website, dibaca 2605 kali dan ditanggapi 22 kali
Pada tutorial yang sebelumnya, kita sudah membahas tampilan secara dasar. 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?>
</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'].
What the others say?
Sampai saat ini ditanggapi 22 kali
terima kasih untuk tutorial na yg bagus ^^
saya sudah mencoba tutorial diatas. namun terdapat error pada fungsi word_limiter(). karena fungsi tersebut terdapat pada file text_helper.php
mungkin mksd kk statement yg ini
$this->load->helper('string');
seharus na
$this->load->helper('text');
cmiiw
oh iya sebelum na saya mendapatkan error seperti ini "Fatal error: Call to a member function select() on a non-object".
code diatas jalan setelah saya tambahkan statement $this->load->database() tepat setelah statement parent::Model().
ataukah ada cara lain?
terima kasih sebelum na
@ cupukuru

hehehe, maaf ada kesalahan...
Thanks udah beri tau ya...
Benar, yang betul adalah load helper TEXT, bukan string.
Artikel sudah saya edit. Kemudian, untuk masalah load database, sebaiknya Anda load otomatis di config/autoload.php, karena akan lebih praktis, toh database sering digunakan. Cape kan kalo nulis load database di setiap model?
file : config
/autoload
.php
$autoload['libraries'] = array('database');
Thanks atas komentar dan koreksinya!
terima kasih untuk saran na

ditunggu tutorial selanjut na.
sukses untuk kk anggy
saya kutip dari code diatas
$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')
('posting p')->apakah itu seharusnya ('posting')aja???
trus
('p.posting_id')->('posting_id')????
<?php foreach($content->result() as $row):?>
":" itu apa ya???
Hmmm...
Mungkin Anda perlu belajar MySQL dulu...
makasih banyak....
saya sudah coba tapi ada erornya "Fatal error: Call to a member function result() on a non-object in C:\xampp\htdocs\web\system\application\views\content.php on line 19" itu kira2x kenapa ya?? maaf nih masih belajar :d
@rio : mmm...mungkin Anda belum meload library database. Lakukan di autoload.php untuk lebih praktisnya...
mas aku baru belajar ci
by the way di design table nya ada :
`posting_judul` varchar(100) collate latin1_general_ci NOTNUL
nah maksud dari collate latin1_general_ci APA YAH??
mas aku coba kok error bgini
Fatal error
: Class 'Postmodel' not found in D
:\xampp\htdocs\c\
system\libraries\Loader
.php on line
184
gmana mas?
@nano : pastikan km dah buat model dengan nama postmodel.php dan ditempatkan di folder app/model/
@kiki : kamu ubah main.php seperti berikut ini
<?php
$this->load->view("header");
$this->load->view($nama_content);
$this->load->view("footer");
?>
Jadinya, klo mau buat fungsi baru (halaman) di controller, tinggal kita bebani dengan variabel $nama_content :
function index()
{
$data['title']="Welcome to My Website";
$data['nama_content']= "about_us";
$this->load->view('main',$data);
}
mungkin itu yang kamu maksud...good luck
about_us.php dibuat dan diletakkan di folder views...

dulu belajar lewat forum CI, googling, n user_guide na..
T_T
Mas, mati deh langkahku sampai disini..
Bab 1 : Controlers & View(web.php, main.php,header.php,content.php,footer.php)
Bab 2 : CSS Directory
Bab 3 : entek.
Sample databasenya ga ada ya?
Wogh
salah posting..
Maaf Mas..
Trus di link untuk pertanyaan kiki (cowok) ditulis apa mas? supaya value pada $data['nama_content'] bisa berubah.
contoh struktur tabel di atas itu berlaku di SQL Server gak...
NB: saya pake SQL Server 2000
Mungkin perlu modifikasi...
Do you wanna say a few words?