Tutorial CodeIgniter : Membuat dan Menerapkan Paging Pada Searching di CI

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>&raquo; '.$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….!!!!

[to_like]Download Aplikasi[/to_like]

23 comments

  1. endrie Reply

    Mas Gede, Nanya nih.. Kalau untuk menerapkan validasi formnya, kayak XSS clean dan sebagainya.. Kira-kira kita letakkan di bagian mana yah??

  2. Be-er Reply

    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

  3. m johar Reply

    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

    • m johar Reply

      eh ralat maksutnya kalo tanpa limit datanya muncul, tpi klo pke limit gak muncul, hee

  4. Miftah Aris Setiawan Reply

    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

    • Gede Lumbung Post authorReply

      kalo studi kasusnya yang ini, pakai session aja
      kata pencarian di simpan di session, nanti value nya dimasukkan ke kueri

  5. dian Reply

    mas saya udah melakukan pendaftaran tapi di email saya tidak ada link aktivasinya,

  6. laily Reply

    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

  7. fahrizal Reply

    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 ?

    • fahrizal Reply

      mesti di ubah $config[‘encryption_key’] ,… sory tanya n jawab sendiri 😛

  8. Jaka_kh Reply

    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’

  9. koprilia Reply

    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??

  10. Anggi Reply

    gan, kalo hasil pencariannya mau nampilin deskripsi kseluruhan tabelnya (nidn dosen, alamat, nope) gmn gan?

  11. Rudy Ricky Pratama Reply

    ini error yah kalau search dengan kata kunci ‘ -_-

Leave a Reply

Your email address will not be published. Required fields are marked *