Tidak biasanya hari minggu seperti ini saya bisa bangun pagi, biasanya juga ‘molor‘ sampai siang. Ketika baru bangun, saya pun baru ingat kalau laptop saya masih hidup dari tadi malam. Yaw beginilah kalau lagi banyak ada kerjaan dan tugas kuliah, semuanya serba lupa (kecuali bernafas). Syukurnya saya lagi tidak punya pacar alias JOMBLO, kan kasian kalau pacar sampai saya lupakan juga :D. Ujung-ujungnya pasti berantem, cuek-cuek’an, putus, GALAU (jiaahh,,, kok malah curhat). Daripada meng-GALAU gak jelas, kali ini saya akan membagikan sedikit tutorial tentang CodeIgniter. Sebenarnya ini merupakan tutorial sederhana, yaitu Membuat dan Menerapkan Paging Pada Fitur Searching. Dalam fitur searching, biasanya user menginputkan kata dari form. Dan variabel $_POST[] ditangkap oleh file PHP, yang kemudian dijadikan bahan acuan untuk mencari hasil yang sesuai/mirip dengan yang terdapat di database. Masalahnya, jika hasil pencarian banyak akan susah untuk dibuatkan paging/pembagian per halamannya. Karena ketika berpindah halaman, maka variabel $_POST[] akan hilang. Dulu saya pernah juga mengalaminya, dan saya menggunakan variabel $_GET[] yang disisipkan melalui URL browser. Jadinya si variabel input akan tetap nangkring ketika berpindah halaman.
Kemarin ketika mengerjakan proyek dari seorang teman, saya menemukan studi kasus yang serupa juga. Bedanya kali ini saya harus menerapkannya pada framework CodeIgniter. Dengan perhitungan masalah keamanan dan sebagainya, maka saya putuskan untuk menaruh variabel input ke dalam bentuk variabel $_SESSION[]. Di CodeIgniter kita bisa menggunakan library session dengan fungsi set_userdata(). Berikut penerapan dan cara pembuatannya, cekidot gan.
1. Seperti biasa, siapkan dulu file-file framework CodeIgniter di direktori htdocs milik rekan-rekan. Disini, kita akan menggunakan 1 Controller, 1 Model dan 2 View.
2. Buat sebuah Controller dengan nama class search_paging, dan ketikkan atau copy kode di bawah ini :
function index() { $this->load->view('search/depan'); } function cari() { $page=$this->uri->segment(3); $batas=5; if(!$page): $offset = 0; else: $offset = $page; endif; $data['nama']=""; $postkata = $this->input->post('nama'); if(!empty($postkata)) { $data['nama'] = $this->input->post('nama'); $this->session->set_userdata('pencarian_dosen', $data['nama']); } else { $data['nama'] = $this->session->userdata('pencarian_dosen'); } $data['nama_dosen'] = $this->search_model->cari_dosen($batas,$offset,$data['nama']); $tot_hal = $this->search_model->tot_hal('ja_mst_dosen','nama_dosen',$data['nama']); $config['base_url'] = base_url() . 'index.php/search_paging/cari/'; $config['total_rows'] = $tot_hal->num_rows(); $config['per_page'] = $batas; $config['uri_segment'] = 3; $config['first_link'] = 'Awal'; $config['last_link'] = 'Akhir'; $config['next_link'] = 'Selanjutnya'; $config['prev_link'] = 'Sebelumnya'; $this->pagination->initialize($config); $data["paginator"] =$this->pagination->create_links(); $this->load->view('search/hasil',$data); }
3. Lanjutkan dengan membuat sebuah Model dengan nama class search_model, dan ketikkan atau copy kode di bawah ini :
function cari_dosen($limit,$offset,$nama) { $q = $this->db->query("select * from ja_mst_dosen where nama_dosen like '%$nama%' LIMIT $offset,$limit"); return $q; } function tot_hal($tabel,$field,$kata) { $q = $this->db->query("select * from $tabel where $field like '%$kata%'"); return $q; }
4. Yang terakhir, buat dua View. Masing-masing dengan nama depan.php dan hasil.php.
depan.php
<form method="post" action="<?php echo base_url(); ?>index.php/search_paging/cari"> <table width="500" cellpadding="5" align="center"> <tr><td width="190">Masukkan Nama Dosen :</td><td><input type="text" name="nama" size="50" autocomplete="off" /></td></tr> <tr><td width="190"></td><td><input type="submit" value="Cari Dosen" /></td></tr> </table> </form>
hasil.php
<table width="500" cellpadding="5" align="center"> <?php $banyak = count($nama_dosen->result_array()); echo '<tr><td>Ditemukan <b>'.$banyak.'</b> hasil pencarian dengan kata <b>"'.$nama.'"</b></td></tr>'; if(count($nama_dosen->result_array())>0) { foreach($nama_dosen->result_array() as $nd) { echo '<tr><td>» '.$nd['nama_dosen'].'</td></tr>'; } } else { echo '<tr><td>Tidak ditemukan dosen dengan nama <b>"'.$nama.'"</b></td></tr>'; } ?> <tr><td><?php echo $paginator; ?></td></tr> </table>
Gampang kan cara pembuatannya…??? Kalau masih bingung, di bawah ini sudah saya sediakan demo dan file jadinya. OK deh, semoga sedikit tutorial ini bisa bermanfaat untuk rekan-rekan yang lagi ngoprek frameowk CodeIgniter.
Happy Blogging and Keep Coding
Cheerrrss….!!!!
Sangat Membantu artikelnya..
woowww keren gan
bagus.. bagus… bagusss
Mas Gede, Nanya nih.. Kalau untuk menerapkan validasi formnya, kayak XSS clean dan sebagainya.. Kira-kira kita letakkan di bagian mana yah??
Mas Gede, saya kan ngebuat data sengaja 5 baris untuk yang dicari… harus nya kan yg muncul 5 data saja, tp kok ini muncul paginator yaa ‘selanjutnya’ tp pas di klik halaman.a kosong.. makasihhh
pas di total_rows, query nya harus sama dgn query utk menampilkan datanya
bedanya, hanya tanpa limit
Bagaimana cara membuat paging tapi tidak menggunakan offset di bagian urlnya.
Misal, halaman 2 maka di url seperti ini, http://localhost/berita/2
kalo offset nya biar gak keliatan, bisa pake ajax aja bang, biar lebih enak
kalo pagination berdasarkan id gimana ya bang gede?
misal nya
function cari_dosen($limit,$offset,$id)
{
$q = $this->db->query(“select * from ja_mst_dosen where id_dosen=$id LIMIT $offset,$limit”);
return $q;
}
kalo tanpa datanya muncul, tpi klo pke limit gak muncul,
terimaksih sebelumnya
eh ralat maksutnya kalo tanpa limit datanya muncul, tpi klo pke limit gak muncul, hee
total halamannya juga harus sama querynya seperti yg di atas, cuma tanpa limit
mas gede. di artikel ini kan mas bilang “Dulu saya pernah juga mengalaminya, dan saya menggunakan variabel $_GET[] yang disisipkan melalui URL browser. Jadinya si variabel input akan tetap nangkring ketika berpindah halaman.”. itu gimana ya mas? saya udh coba pake $_GET tp tetep gabisa. bisa kasih tau ga mas script nya? saya ga pake CI. masih php prosedural
kalo studi kasusnya yang ini, pakai session aja
kata pencarian di simpan di session, nanti value nya dimasukkan ke kueri
mas saya udah melakukan pendaftaran tapi di email saya tidak ada link aktivasinya,
mas, mau nanya
klo seumpama searchnya itu cuma ditujukan untuk data user saja gimana ya mas
jadi dalam 1 tabel itu kan ada data user sama admin tapi yang dicari itu untuk user saja
dan pencarian berdasarkan semua field mas , please tolong bantuanya
wah sayang link download nya dah mati ..!!! T.T
dah bisa lagi
ada yang tau
An Error Was Encountered
In order to use the Session class you are required to set an encryption key in your config file.
ini mesti gimana ?
mesti di ubah $config[‘encryption_key’] ,… sory tanya n jawab sendiri 😛
Mas Gede nanya, pada bagian ini :
if(!empty($postkata))
{
$data[‘nama’] = $this->input->post(‘nama’);
$this->session->set_userdata(‘pencarian_dosen’, $data[‘nama’]);
}
else
{
$data[‘nama’] = $this->session->userdata(‘pencarian_dosen’);
}
‘pencarian dosen’ itu apa ya? function kah? atau apa kah?
saya cari2 kok gak ada function atau deklarasi ‘pencarian_dosen’
A PHP Error was encountered
Severity: 4096
Message: Object of class CI_DB_mysql_result could not be converted to string
Filename: models/search_model.php
Line Number: 10
A PHP Error was encountered
Severity: 4096
Message: Object of class CI_DB_mysql_result could not be converted to string
Filename: search/hasil.php
Line Number: 4
itu kenapa yah bang??
gan, kalo hasil pencariannya mau nampilin deskripsi kseluruhan tabelnya (nidn dosen, alamat, nope) gmn gan?
ini error yah kalau search dengan kata kunci ‘ -_-