Codeigniter : Searching Pagination


Assalamualaykum.. ^^
Tulisan ini ditujukan bagi para pemula seperti saya agar tidak melupakan ilmu yang telah saya dapatkan :D

Postingan di-update disini beserta demo dan download contohnya :D

Apa itu Codeigniter?
CodeIgniter adalah sebuah PHP Framework dimana dengan framework ini akan memudahkan kita dalam membangun aplikasi web berbasis PHP.
Penjelasan selanjutnya ada disini.

Apa itu Framework?
Framework, sesuai dengan terjemahannya, adalah kerangka kerja.
Jadi, di dalam framework ada beberapa kode program yang kalau kita gunakan, akan memberikan kerangka atau struktur ke aplikasi yang dihasilkan.
Intro Framework

Pagination di CI (Codeigniter) tidak terlalu rumit untuk diterapkan, karena sudah disediakan librarynya. Nah, pada postingan ini saya akan menjabarkan contoh sederhana dari pencarian Listing Data dengan Pagination pada CI (Codeigniter). Pada kasus ini saya menggunakan contoh pencarian pada ringkasan berita. Dengan list berita per-halaman sebanyak 5 item.

      1. Pastikan bahwa Anda telah mendownload Codeigniter, extract pada folder htdocs atau www, dalam contoh ini saya me-rename foldernya menjadi berita.
      2. Buat database mysql dengan nama : berita dan satu buah tabel dengan nama tbl_berita.
        CREATE TABLE `tbl_berita` (
          `id_berita` int(11) NOT NULL AUTO_INCREMENT,
          `tgl_berita` date DEFAULT NULL,
          `judul_berita` varchar(255) DEFAULT NULL,
          `ringkasan` text,
          PRIMARY KEY (`id_berita`)
        ) ENGINE=MyISAM AUTO_INCREMENT=16 DEFAULT CHARSET=latin1;
        
      3. Isikan dengan beberapa item, misalkan 15 berita. Beberapa ringkasan berita saya isikan dengan Dummy Text `Lorem ipsum dolor sit amet..` sebanyak 8 record, sekaligus untuk mengetahui hasilnya berupa pencarian berita, tetapi tetap bisa dibuat per-halaman.
      4. Lakukan konfigurasi pada file-file berikut ini [system/application/config]:
          • config.php (base url) :
        $config['base_url']	= "http://localhost/berita/";
        
          • database.php (mengatur koneksi ke database berita secara default) :
        $db['default']['hostname'] = "localhost";
        $db['default']['username'] = "root";
        $db['default']['password'] = "";
        $db['default']['database'] = "berita";
        $db['default']['dbdriver'] = "mysql";
        $db['default']['dbprefix'] = "";
        $db['default']['pconnect'] = TRUE;
        $db['default']['db_debug'] = TRUE;
        $db['default']['cache_on'] = FALSE;
        $db['default']['cachedir'] = "";
        $db['default']['char_set'] = "utf8";
        $db['default']['dbcollat'] = "utf8_general_ci";
        
          • routes.php (menentukan berita sebagai default controllernya) – edit pada baris-baris berikut ini:
        $route['default_controller'] = "berita";
        
          • autoload.php (untuk pemanggilan langsung (autoload) beberapa komponen yang diperlukan seperti library, helper dan model) :
        $autoload['libraries'] = array('database','session','pagination');
        
        $autoload['helper'] = array('url');
        
        $autoload['model'] = array('pencarianmodel');
        
      5. CSS-nya dulu gan, untuk style paginationnya banyak juga pilihannya disini:
        /* Pencarian Berita */
        body {
        	font-family:Arial, Helvetica, sans-serif;
        	font-size:11px;
        }
        
        .letter {
        	font-size:12px;
        	margin: 0px;
        	padding-top: 4px;
        	padding-bottom: 4px;
        	border-bottom: 1px solid #d1dde8;
        }
        
        .inputbox{
        	border: 1px solid #CCC;
        }
        .button{
        	color:#FFF;
        	background:#33C;
        	border: 2px solid #30C;
        	padding:2px 3px;
        	font-size: smaller;
        	font-weight: bold;
        }
        
        div.pagination {
        	font-family:Verdana,Tahoma,Arial,Helvetica,Sans-Serif;
        	font-size: 13px;
        	text-align:center;
        	padding:4px 6px 4px 0;
        	background-color:#fff;
        	color:#313031;
        }
        
        div.pagination a {
        	color:#0030ce;
        	text-decoration:none;
        	padding:5px 6px 4px 5px;
        	margin:0 3px 0 3px;
        	border:1px solid #b7d8ee;
        }
        
        div.pagination a:hover, div.pagination a:active {
        	color:#0066a7;
        	border:1px solid #b7d8ee;
        	background-color:#d2eaf6;
        }
        div.pagination span.current {
        	padding:5px 6px 4px 5px;
        	margin:0 3px 0 3px;
        	border:1px solid #b7d8ee;
        	font-weight:bold;
        	color:#444444;
        	background-color:#d2eaf6;
        }
        div.pagination span.disabled {
        	display:none;
        }
        
      6. Sekarang buat dulu modelnya, simpan dengan nama pencarianmodel.php [system/application/models]
        <?php
         class PencarianModel extends Model
         {
          function PencarianModel()
          {
           parent::Model();
          }
        
          /* Menampilkan Hasil Pencarian */
          function SearchResult($perPage,$uri,$ringkasan)
          {
           $this->db->select('*');
           $this->db->from('tbl_berita');
           if(!empty($ringkasan)) {
            $this->db->like('ringkasan',$ringkasan);
           }
           $this->db->order_by('id_berita','asc');
           $getData = $this->db->get('', $perPage, $uri);
        
           if($getData->num_rows() > 0)
            return $getData->result_array();
           else
            return null;
          }
         }
        ?>
        
      7. Kemudian buat file controller-nya (controller berita), simpan dengan nama berita.php [system/application/controllers]
        <?php
        	class Berita extends Controller
        	{
        		function Berita()
        		{
        			parent::Controller();
        		}
        
        		function index()
        		{
        			if(isset($_POST['submit']))
        			{
        				$data['ringkasan'] = $this->input->post('ringkasan');
        
        				//set session user data untuk pencarian, untuk paging pencarian
        				$this->session->set_userdata('sess_ringkasan', $data['ringkasan']);
        			} else {
        				$data['ringkasan'] = $this->session->userdata('sess_ringkasan');
        			}
        
        			$this->db->like('ringkasan', $data['ringkasan']);
        			$this->db->from('tbl_berita');
        
        			//Pagination init
        			$pagination['base_url'] 	= base_url().'index.php/berita/index/page/';
        			$pagination['total_rows'] 	= $this->db->count_all_results();
        			$pagination['full_tag_open'] = "<p><div class=\"pagination\">";
        			$pagination['full_tag_close'] = "</div></p>";
        			$pagination['cur_tag_open'] = "<span class=\"current\">";
        			$pagination['cur_tag_close'] = "</span>";
        			$pagination['num_tag_open'] = "<span class=\"disabled\">";
        			$pagination['num_tag_close'] = "</span>";
        			$pagination['per_page'] 	= "5";
        			$pagination['uri_segment'] = 4;
        			$pagination['num_links'] 	= 4;
        
        			$this->pagination->initialize($pagination);
        
        			$data['ListBerita'] = $this->pencarianmodel->SearchResult($pagination['per_page'],$this->uri->segment(4,0),$data['ringkasan']);
        
        			$this->load->vars($data);
        			$this->load->view('pencarian');
        		}
        	}
        
        	/* End of file berita.php */
        	/* Location: ./system/application/controllers/berita.php */
        ?>
        
      8. Sekarang tinggal buat file view-nya, simpan dengan nama pencarian.php [system/application/views]
        <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
        <html xmlns="http://www.w3.org/1999/xhtml">
        <head>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
        <title>Contoh : Pencarian Berita</title>
        <link href="<?=base_url();?>style.css" rel="stylesheet" type="text/css" />
        </head>
        <body>
        <form id="form_pencarian" name="form_pencarian" method="post" action="<?=base_url();?>index.php/berita/">
          <input name="ringkasan" type="text" id="ringkasan" size="30" maxlength="255" class="inputbox" value="<?=$ringkasan;?>"/>&nbsp;&nbsp;
          <input name="submit" type="submit" id="submit" value="Cari" class="button"/>
        </form>
        <hr />
        <?php
        	//List Berita Hasil Pencarian
        	if(count($ListBerita) > 0) {
        		foreach($ListBerita as $row)
        		{
        			echo "<div class=\"letter\">";
        			echo "<table cellspacing=\"0\" cellpadding=\"0\" border=\"0\">
        				<tbody>";
        			echo "<tr>
        						<td width=32 align=\"center\" valign=\"middle\">&nbsp;</td>
        						<td width=500>
        						<span>". $row['tgl_berita'] ."</span><br/>
        						<a href=\"#\">".$row['judul_berita']."</a>
        						<div> ".$row['ringkasan']."</div>
        						</td>
        				</tr>";
        			echo "</tbody></table>";
        			echo "</div>";
        		}
        		echo $this->pagination->create_links();
        	} else {
        		echo "<div><strong>Hasil pencarian tidak ditemukan.</strong></div>";
        	}
        ?>
        </body>
        </html>
        
      9. Nah, sekarang coba di test dulu di browsernya.. panggil dengan http://localhost/berita/. Coba ketikkan `lorem ipsum` pada input teks pencariannya, dan akan didapatkan 8 record hasil pencarian sebagai berikut (klik pada gambar untuk memperbesar) :

        Hasil pencarian halaman 1

        Hasil pencarian halaman 2

        Hasil pencarian halaman 2

Penjelasan :

        1. Pencarian model :
          /* Menampilkan Hasil Pencarian */
            function SearchResult($perPage,$uri,$ringkasan)
            {
             $this->db->select('*');
             $this->db->from('tbl_berita');
             if(!empty($ringkasan)) {
              $this->db->like('ringkasan',$ringkasan);
             }
             $this->db->order_by('id_berita','asc');
             $getData = $this->db->get('', $perPage, $uri);
          
             if($getData->num_rows() > 0)
              return $getData->result_array();
             else
              return null;
            }
          

          Function diatas dengan parameter berupa :
          - $perPage (jumlah item per-halaman)

          - $uri (mengambil nilai dari uri segment pada address bar, dan sebagai limit tampilan record)

          - $ringkasan (variabel pencarian)

        2. Controller :
          function index()
          		{
          			if(isset($_POST['submit']))
          			{
          				$data['ringkasan'] = $this->input->post('ringkasan');
          
          				//set session user data untuk pencarian, untuk paging pencarian
          				$this->session->set_userdata('sess_ringkasan', $data['ringkasan']);
          			} else {
          				$data['ringkasan'] = $this->session->userdata('sess_ringkasan');
          			}
          
          			$this->db->like('ringkasan', $data['ringkasan']);
          			$this->db->from('tbl_berita');
          
          			//Pagination init
          			$pagination['base_url'] 	= base_url().'index.php/berita/index/page/';
          			$pagination['total_rows'] 	= $this->db->count_all_results();
          			$pagination['full_tag_open'] = "<p><div class=\"pagination\">";
          			$pagination['full_tag_close'] = "</div></p>";
          			$pagination['cur_tag_open'] = "<span class=\"current\">";
          			$pagination['cur_tag_close'] = "</span>";
          			$pagination['num_tag_open'] = "<span class=\"disabled\">";
          			$pagination['num_tag_close'] = "</span>";
          			$pagination['per_page'] 	= "5";
          			$pagination['uri_segment'] = 4;
          			$pagination['num_links'] 	= 4;
          
          			$this->pagination->initialize($pagination);
          
          			$data['ListBerita'] = $this->pencarianmodel->SearchResult($pagination['per_page'],$this->uri->segment(4,0),$data['ringkasan']);
          
          			$this->load->vars($data);
          			$this->load->view('pencarian');
          		}
          

          Session user data untuk menyimpan nilai input yang dikirimkan, yang sebelumnya dikenal sebagai variabel post. Jadi, ketika page selanjutnya dibuka, nilai inilah yang akan dikenali, bukan lagi variabel post dari inputan pencarian :) .
          Kemudian ada pemanggilan fungsi dari model pencarian (pencarianmodel), beserta parameternya.

        3. View :
          //List Berita Hasil Pencarian
          	if(count($ListBerita) > 0) {
          		foreach($ListBerita as $row)
          		{
          			echo "<div class=\"letter\">";
          			echo "<table cellspacing=\"0\" cellpadding=\"0\" border=\"0\">
          				<tbody>";
          			echo "<tr>
          						<td width=32 align=\"center\" valign=\"middle\">&nbsp;</td>
          						<td width=500>
          						<span>". $row['tgl_berita'] ."</span><br/>
          						<a href=\"#\">".$row['judul_berita']."</a>
          						<div> ".$row['ringkasan']."</div>
          						</td>
          				</tr>";
          			echo "</tbody></table>";
          			echo "</div>";
          		}
          		echo $this->pagination->create_links();
          	} else {
          		echo "<div><strong>Hasil pencarian tidak ditemukan.</strong></div>";
          	}
          

          Pemanggilan kepada $ListBerita yang tadi dioper ke controller, dan membuat link paginationnya.. :)

Semoga bermanfaat.. ^^
Oh iya jangan lupa saran dan kritiknya..
Terima kasih..

About these ads

87 Tanggapan

  1. aku musti komen apa nih crit (eneuuuug)

    1. ga usah komen apa-apa
      kamu udah mampir juga aku udah seneng koq :lol:

  2. wah mantab nih.. bagi bagi ilmunya langsung ke banyak orang. ane juga mau bikin aaah…

  3. ora ngerti beginian. hoaaaaahhmmm…….. *ini bukan kritik dan saran, tp sesat* :D

  4. subhanallah…makasih buwat inponya gan :) .

  5. weitz mantab dah, cukup dimengerti org awam :P
    praktekin ah…

  6. very usefull…. makasih ucrit….

  7. nda ngerti aku din..huehuehue

  8. njieh…njieh….akhirnya ada juga postingan beginian. hihihhi
    gud job neng, ijin nyimak n praktek ya gan… :D

  9. hahaha, ta’aruf aja din kita.. ajarin, :D

  10. Wih.. mantap! Jelas, terstruktur, mudah diikuti, tanpa basa-basi. Recommended!

    1. waww.. jd pengen malu nih didatengin masternya :oops:

  11. Salam knal buat anda!
    Sukses slalu buat tulisannya.
    Jabat erat dari blogger baru!

  12. wah keren2….saya masih belajar php, thx link nya utk download

  13. *nengok bntr*
    waaaakh puyeng twewewew!!
    cmn mo ngedukung ajakan aan bwt ta’aruf ama elu aja din hhiihiii…sukses yah :D

  14. hohohooh, ah gampang.. semua ilmu desain yang aan ada.. tar diajarin, hehehe..

  15. Nah kalo untuk ini, saya mesti dibangkitin dulu nih minat programmingnya. Dan dari dulu emang gak dapet aja chemistrynya :lol:

  16. ya.. ya.. ya.. *manggut manggut sok ngerti* wahh si eneng geek sekali :D

  17. boleh nanya?

    saya pengen memuat menu ‘search’ di aplikasi yg saya buat, sekaligus pagination juga

    nah, gimana caranya, ketika saya search sebuah kata, dia ngikut terus di page berikutnya?

    contoh kayak di google

    klo kita cari kata code igniter, kan bisa banyak bgt tu. nah, dia dibagi jd beberapa page kan. gimana caranya ya? ketika kita klik page berikutnya, yg muncul tetep yg kita cari

    mohon bantuannya. thx.

  18. nggg kayaknya pertanyaannya g jd aja

    td artikelnya blom saya baca sampe selese, maaf…^^

  19. weheuw…. ga ngerti :D

  20. woa, kalau gak salah, dengan model spt itu berarti hanya bisa mencari satu kata aja? Gimana kalau keyword pencariannya “mudah belajar ci”? Hasilnya adalah yang mengandung “mudah belajar ci” saja atau gimana?

    1. iya, hanya `mudah belajar ci` saja.. karena pencarian dengan like hanya mengambil satu frasa saja..
      jika kata pencariannya `mudah belajar ci` maka yang diambil bukan mudah, bukan juga belajar dan bukan ci
      klo mau diambil per kalimat, bisa dimodif fungsinya pakai explode di php, baru dilakukan pencarian.. atau yg lebih advance lagi pakai fulltext sebagai index.. CMIIW

  21. wah.. bener2 membantu ini tutorialnya..
    makasiii mba ucrietz ;)

  22. ngintip blog tetangga :) :)

  23. mules dah..susah..

  24. top markotop hatur thank, (makasih infonya)

  25. kalo saya mendingan copy paste aja dech :D

  26. ini kayaknya harus coba dulu baru bisa komen hehe

  27. Ane juga dah buat sistem pencarian yang ane namain Custom Google Search, silahkan di review sob!!. :)

    Thx tutorialnya, halaman langsung ane simpan ne :D

  28. neng ucriiit, kalo search multiple keyword (multiple category) gimana ya…
    bisa bantu gag???

    1. wah, PM aja gan. ga mungkin ditulis di komen ini. pasti panjang :D

  29. Thanks a lot Neng, artikelnya membantu sekali. Saya tadi sempat kesulitan dengan pagination yang querynya melibatkan search term. Sekali baca sourcenya saya langsung “get the point”. Salam dari Pacitan.

  30. saya udah coba2 tapi koq css-nya ga bisa jalan??

    1. ga bisanya gimana? mungkin base urlnya ada yg salah..

  31. neng link nya ga bisa di download lg…:)

  32. hadooh … koslet nih kak otak saya … banyak amat yak coding nya … ;)
    makasih kak sharingnya …

  33. download link nya dah ga bs lagi nih om..

  34. Mantab om, it works.. Thank you

  35. wah nih dia yg ane cari gan…thx tuk sharing tp td ane mo download cth programnye yg di 4shared kok link nye dah ga bisa yaaa gan…klo agan berbaik hati tolong krmin cth program tutorial yg diatas ke email ane yaaa…sumpah nih yg ane cari n tutorialnye bagus…^_^

  36. thank’s brader…….searching ane udh bs paging skrg..
    :D

  37. fungsi count_all_result()-nya kok gak ada di modelnya, trus untuk menghitung jumlah record searchnya gmana?

  38. Sayang download file nya ngak jalan……

  39. klo boleh minta file nya donk

  40. link downloadnya kok gk ad y, file nya udh gk ad ?

  41. Wah nice tutorial, makasi ya mba.
    Tapi sayang link downloadnya gak bisa.

  42. download ny fileny dh d apus me -_-”

    1. hehe, bukan dihapus, tapi karena saya pakai 4shared.com yang gratis jadi masa berlakunya hanya beberapa bulan.
      silahkan praktekan dulu yang ada di postingan ini :D trust me it works

  43. Mba, itu biar format codingnya bisa kayak gitu pakai plugin apa ya ?

    1. ga pake plugin koq, coba liat disini

    2. ooo gitu yahh… makasih ya crit … eh maksudnya neng ucrit …

      he he he, btw namanya siapa sih ?

  44. my name is Prihandini Astuti

    1. Ooo, yo wis, salam kenal aja,
      aku ahsan,… kayaknya masih satu aliran kerja, aku di b*a cu**i … :D

  45. salam kenal juga *child comment ga bs direply lagi T.T

  46. bagian yang paling males saya kerjain setelah CRUD adalah Pagination… even when I’m using CodeIgniter :|

    1. hahaha, klo saya paling males pas bagian upload gambar,, hihihi :P

    2. yang itu juga, sama aja malesinnya… nasib masih programmer junior *ngiri ama senior yg tinggal suruh-suruh*

    3. sama, saya juga masih junior, hihi :D

  47. Maksih banget infonya, sangat membantu tapi masih bingung, bisa kah digunakan untuk mencari multiple kata

  48. thx buat infonya crit… ^^

  49. mksh bnyk infonya neng ucrit

  50. mpooookk… keren tutorialnyaaa… ^_^
    aku pengen belajar codeIgniter kaga jadi-jadi.. padahal udah beli bukunya -__-
    laen kali privat yak! hhaha…

  51. thx atas ilmunya..
    tp ada contoh yg sekalian dg CRUD gak.?

    1. ada.. tapi saya blum buatkan.. banyak koq contohnya dr google.. hehe :D

  52. kalo mw buat paging berdasarkan select * where id gimana yaa?
    kan klo ini search yg lbh komplex
    mohon bantuannyaaa

    1. tinggal di tambahkan aja di function modelnya.. ^^

    2. Error Number: 1054

      Unknown column ‘ringkasan’ in ‘where clause’

      SELECT COUNT(*) AS `numrows` FROM (`data`) WHERE `ringkasan` LIKE ‘%%’

      “saya coba nh search paging, kok keluar eror ini yaa? pdhl nama model, database udah sesuai :( mohon bantuannya mbak senior”

  53. aa ke hai yaar ……comment ta dhang naal maro ??????????????
    rana from haryana

  54. kak, kalo untuk searching multiple keyword, setelah keyword nya di explode trus kondisi di SQL nya jadi gini bukan? select * from table_name where field1 like ‘%$keyword[1]%’ or like ‘%$keyword[2]%’ or like ‘%$keyword[3]%’ ??? atau ada cara lain yang lbih efektif gitu ? :D

    1. iyah betul. makin pinter kamu :D
      tp itu sintaksnya kayaknya error klo di run, harusnya or field2 like.. or field3 like.. :P

    2. hehehe … kan belajar dari kaka juga :p … iyah udah dibenerin kak. btw aku tuh lagi bikin searching multiple keyword dari beberapa tabel, tapi bingung nyatuin result nya trus dibikin paging nya kayak gimana ? punya ide kak ?

    3. aku juga rencana mau bikin postingan itu sih.. masih cari2 juga.. pk union gt kali ya?

    4. oii… aku pernah ngalamin… solusinya gampang koq…

      jangan pake union soale berat kalo banyak tabel, tetep query dari masing-masing tabel… trus hasilnya masing-masing masukin list, baru hasilnya ditampilkan ke browser…

    5. iya. bikin masing2 aja di function model. baru dipanggil satu2 per-result tabel. gt kan ya? hehe :D

  55. waa…tq so much ya postingan nya…
    it works!!u’ve save my life!!

  56. wah jelas bgt artikel nya .. thx bgt ya mba ucrietz . ini aja problem plg sulit waktu saya koding pake codeigniter . jgn lupa kunjungan balik ya & di tunggu artikel ” nya lagi ^^ ( sekedar share web yg saya buat ini memakai framework codeigniter )

  57. mbak sdh mengikuti satu persatu…tp knp jadinya keluar eror ginian yah? *maklum newbie*
    ( ! ) Fatal error: Class ‘Controller’ not found in G:\wamp\www\berita\application\controllers\berita.php on line 3
    Call Stack
    # Time Memory Function Location
    1 0.0006 696120 {main}( ) ..\index.php:0
    2 0.0023 788944 require_once( ‘G:\wamp\www\berita\system\core\CodeIgniter.php’ ) ..\index.php:202
    3 0.0241 2013632 include( ‘G:\wamp\www\berita\application\controllers\berita.php’ ) ..\CodeIgniter.php:250

    1. wow pake codeigniter versi berapa? klo versi 2 keatas harus pake CI_Controller. CMIIW. Semoga bisa saya update lagi :)

  58. punya q errornya kok gini ya …. maap bingung saya
    masih new bie
    Fatal error: Call to a member function userdata() on a non-object in C:\xampp\htdocs\berita\application\controllers\berita.php on line 16

    1. waduh. ga ngerti. nanti coba saya ulik lagi. ini masih versi CI 1.7.1 ;)

    2. tolong yah :D

      terus di
      if($getData->num_rows() > 0)
      return $getData->result_array();
      else
      return null;

      itu emang gak ada kurawalnya ???jadi kayak gini

      if($getData->num_rows() > 0){
      return $getData->result_array();
      }else{
      return null;
      }

    3. iya gpp klo if untuk statementnya satu baris ga pk kurung kurawal juga boleh :p
      nanti saya kirim source codenya deuh :p

  59. thanks sangat membantu

Tinggalkan Balasan

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Ubah )

Twitter picture

You are commenting using your Twitter account. Log Out / Ubah )

Facebook photo

You are commenting using your Facebook account. Log Out / Ubah )

Connecting to %s

Ikuti

Get every new post delivered to your Inbox.

Bergabunglah dengan 1.382 pengikut lainnya.

%d bloggers like this: