Membuat Website dengan CodeIgniter #3

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

Pada tutorial sebelumnya, saya pernah menjanjikan untuk membahas tentang kategori, komentar, arsip, dsb. Setelah saya pikir-pikir, kayaknya kok ga begitu rumit-rumit amat ya? Kita hanya perlu modifikasi database (tambah tabel dsb) dan query kita. Selanjutnya, kita buat view nya. Tentunya Anda sudah mengenal query mysql dengan baik bukan? Bahkan mungkin lebih baik dari saya. Oleh karenanya saya putuskan untuk meneruskan perjalanan CI kita ke ‘pagination’ (setelah ini saya singkat PG).
PG di CI tidak terlalu rumit untuk diterapkan, karena sudah disediakan library-nya. Saya akan coba berikan tips disini, tentang bagaimana membuat pagination yang baik dan sedikit menarik, dengan ‘digg style pagination’, tapi yang sederhana. Mungkin Anda menganggap ini lucu, karena hanya tampilannya saja yang mirip dengan gaya digg.com. Tapi ini cukup kalau hanya untuk sekedar ‘gaya’.

Pertama, kita akan membuat library untuk memudahkan kita setiap kali akan membuat pagination. Saya contohkan di bawah ini.

<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
Class Mypagination
{
 function Mypagination()
 {
  $this->SP =&amp; get_instance();
  $this->SP->load->library('pagination');
 }
 function getPagination($total, $per_page, $url, $uri_segment)
 {
  $config['base_url'] = base_url().'index.php/'.$url;
  $config['full_tag_open'] = '<div class=paging>';
  $config['full_tag_close'] = '</div>';
  $config['cur_tag_open'] = '<span class=pag_link_cur>';
  $config['cur_tag_close'] = '</span>';
  $config['num_tag_open'] = '<span class=pag_link>';
  $config['num_tag_close'] = '</span>';
  $config['uri_segment'] = $uri_segment;
  $config['next_link'] = 'next ›';
  $config['prev_link'] = '‹ prev';
  $config['num_links'] = 3;
  $config['total_rows'] = $total;
  $config['per_page'] = $per_page;
  $this->SP->pagination->initialize($config);
  $data['link']=$this->SP->pagination->create_links();
  return $data;
 }
}

Pada Class di atas kita definisikan variabel-variabel yang perlu, dan …class css. Untuk CSS nya sebagai berikut :

/* paging */
.pag_link{
 background:#f8f8f8;
 border:#EBEBEB 1px solid;
 padding:3px 8px;
 margin-left:3px;
 margin-right:3px;
 color:#000000;
 }
.pag_link_cur{
 background:#AAAAAA;
 border:#f8f8f8 1px solid;
 padding:3px 8px;
 margin-right:3px;
 margin-left:3px;
 color:#000000;
 }
.paging{
 margin-left:7px;
 padding-bottom:10px;
 padding-top:10px;
 margin-bottom:10px;
 text-align:left;
 }
.paging a{
 border:none;
 color:#000;
 }
.paging a:hover{
 text-decoration:underline;
 }

OK. selesai. kita siap untuk mempergunakannya di controller. Contoh penggunaanya, misalkan ketika kita ingin membuat pagination untuk hasil pencarian (search page) artikel, sekaligus disini saya berikan ‘bayangan’ bagaimana membuat ‘sistem pencarian’.

<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
Class Search extends Controller
{
 function Search()
 {
  parent::Controller();
  $this->load->model(array('supermodel')); //model saya :D
  $this->load->library('mypagination');
 }
 function index()
 {
  $this->do_search();
 }
 function do_search()
 {
  $keyword = $this->input->post('keyword',TRUE); // ambil variabel keyword dari search form
  if($keyword==''){ $keyword = $this->session->flashdata('keyword'); } //jika keyword kosong, coba ambil dari flashdata
  if($keyword==''){ redirect('home','refresh');} //jika keyword tetap kosong juga...banting komputer..hehehe...redirect ke home
                $this->session->set_flashdata('keyword',$keyword); //set flashdata untuk keyword kita
  $offset = $this->uri->segment(3,0); //ambil nilai offset, jika tidak ada, akan diberi nilai 0
  $total=$this->supermodel->getTotalSearch($keyword); //hitung di model, berapa banyak data berdasar keyword
  $perpage=5; // tetapkan berapa banyak  data yang ditampilkan per halaman
  $data2=$this->mypagination->getPagination($total_page,$perpage,'search/do_search/',3); //jelas
  $data['link'] = $data2['link']; //ambil data dari getPagination
  $data['artikel']=$this->supermodel->search($keyword,$perpage,$offset); //ambil data dari database (query sama dengan getNumSearch, hanya diberi parameter tambahan)
  $title['title']='Hasil Pencarian dengan keyword '.$keyword.' (ditemukan '.$total.' artikel)';
  $this->load->view('search_result',$data);
 }
}
//pada view, untuk menampilkan link paging, echo-lah $link
echo $link;

Tadaa…kita selesai. Silakan dicoba, jika ada kesulitan, kesalahan, silakan dikomentari. Semoga membantu. {tobe continued}

Related posts:

  1. Membuat Website dengan CodeIgniter #4
  2. Membuat Website dengan CodeIgniter #1
  3. Membuat Website dengan CodeIgniter #2
  4. Membuat Breadcrumbs di CodeIgniter
  5. Redirect dengan Delay Time di CodeIgniter

29 Comments

  • Wah mas tolong jelasin nih samapi sini aku ga mudeng untuk membuat class nya taro dimana Please help

  • Class diletakkan di folder library pada system/application/library…
    Mungkin Anda perlu membuka user_guide CI untuk memahami dulu konsep CI.

  • Tentunya Anda sudah mengenal query mysql dengan baik bukan? Bahkan mungkin lebih baik dari saya…

    weits, enak aja,..
    trus ditinggal begitu saja setelah sblmnya begitu detail, hiks…
    scara konsep okelah, tp kita2 kan masih newbe ni,, hanya kpdmu kami mndaptnya,,(ngarep mode:ON)

  • Sorry, maksudnya gara asumsi sudah bisa, disayangkan turorial2 bagus dari mas anggi banyak yang terlewatkan,,
    hehe,, peace :||:

  • wew…okelah, klo ada waktu saya nulis lagi deh… :)

  • mas.. saya mencoba peraktekan tutorial mas.. tapi masih banyak terdapat kesulitan untuk membuta fasilitas searching, bisa kah rekues mas.. tutorial bikin fasilitas searching yg lengkap sama paging nya:D salam kenal..

  • ow…searching ya…mmm…insya Allah besok saya berikan. Thx dah bkunjung…

  • mas, saya mau tanya….
    klo saya memanggil fungsi paging tapi pada view-nya seperti ini:
    <a href="index.php/namaController/nama_fungsi/$variabelnya” > Link

    Pada halaman pertama muncul tetapi halaman selanjutnya tidak tampil kenapa ya?
    saya mengikuti contoh di atas….
    Terima Kasih sebelumnya…..

  • Hmm…perlu analisa lebih lanjut. Bisa kontak via email di anggy_trisnawan@yahoo.com

  • Yang pertanyaan sebelumnya sudah bisa….. mau tanya lagi nih mas…. hehehe
    Klo fungsi searching trus dipaging dan keywordnya nga cuman satu gimana ya mas??
    Klo contoh diatas khan keywordnya cuman satu…. Itu gimana mas??

  • Emm…biasanya saya lewat POST, setelah itu untuk keperluan paging, variabel2 tsb disimpan di session

  • Misal saya punya 2 tabel yang berelasi (category, sub_category). Bagaimana menampilkan data dari kedua tabel yang tampilannya seperti berikut:

    Category_1
    – sub_category_1
    – sub_category_2

    Category_2
    – sub_category_1
    – sub_category_2

  • cara yg paling mudah dipahami, yaitu :
    1. query tabel category, tampilkan.
    2. pada saat looping (menampilkan) category, lakukan query ke tabel sub category, query sub_category dari category yang sedang ditampilkan.

  • Sudah saya coba pake cara ini:

    //———————————————-
    foreach($cat->result() as $cats)
    {
    echo $cats->nama_kategori;
    echo “”;

    foreach($sub_cat->result() as $sub_cats)
    {
    echo $sub_cats->nama_sub_kategori;
    echo “”;
    }
    }
    //——————————————————-

    Tapi hasilnya jadi gak karuan ….:-(
    Kalau saya ingin menggunakan array 2 dimensi untuk kasus ini gimana boss? (kalau bisa kasi contohnya).

    Matur Tenkyu, bro.

  • Sepertinya ada yang salah….coba begini

    
    foreach($cat->result() as $cats)
    {
    	echo $cats->nama_kategori;
    	echo “”;
    
    	$sub_cat = $this->catmodel->get_subcat($cats->id_kategori);
    	foreach($sub_cat->result() as $sub_cats)
    	{
    		echo $sub_cats->nama_sub_kategori;
    		echo “”;
    	}
    }
    
  • Kalo boleh tau “-&gt” gunanya buat apa?
    maklum anak baru …!

  • Maaf, itu salah parsing mas…sbnarnya itu tanda panah..hehe

  • gan mau tannya nih,untuk fungsi search kalo saya bikin controlernya search aja tanpa membuat pagination yang di atas,masih bisa jalan apa g?

  • tetep jalan mas…Anda modifikasi untuk menampilkan seluruh hasil query…jangan dibuat paging

  • owh….
    terus apakah kalo membuat search tidak membutuhkan database?(cukup dengan membuat controler saja).

    thx b4..

  • Ya pasti harus ada database mas…kan klo search kemana lagi klo ga search database mas…?

  • maksudnya perlu di buatkan database khusus untuk searchnya g?
    misalkan saya bikin progam absensi online saya sudah bikin databasenya yang terdiri
    siswa -> kelas -> semester ->bulan
    nah kalo saya mau menambahkan kolom search di CI perlu dibuat table baru di databasenya g?(di phpmyadmin) atau cukup dengan coding yang di taruh di controlernya saja?

    (apa perlu di buat model dan viewnya juga?)

  • @ivan : gini mas…searching kan cari data, nah, data itu misa data siswa…tu kan udah ada tabel ‘siswa’…searchnya di tabel itu aja…ga usah buat tabel baru, jadi tinggal nambahin kode controller, model, dan viewnya. Sbenrnya bisa controller saja, tapi agar lbh praktis, dan memanfaatkan MVC nya, pake model sm view.

  • bang angie masih binggung nih,aku coba tulis script diatas tapi koq g muncul apa2 y?
    seharusnya kalo cuma controler ajakan bisa keliatan bentuk html standarnya?
    :(

  • @ivan : saya jg tidak terlalu paham dengan masalah mas…hehe…kurang jelas mas…itu perpaduan, ga bisa cm controller aja

  • mas anggie, saya bingung yg $this->load->model(array(‘supermodel’));
    sedangkan ditutorialnya belum ada yg membuat model itu???

    mohon pencerahannya mas
    hehe

  • @yoga : tutorial ini tidak all in one langsung jadi mas…perlu mengerti basic CI (MVC) dan PHP untuk mengerti tutorial ini. Itulah mengapa ada commenting di line” kode di atas. Silakan cari tutorial basic CI terlebih dahulu

  • biar jelasnya bikinin contoh model ama viewnya sekalian plzzz….
    :P

  • master mohon bantuannya.. klo bisa source codenya diupload donk master..
    kan lbh gmpang blajarnya klo gtu..


Leave a comment