• Menggunakan Pagination di Codeigniter

    Level: BASIC
    Karena banyak komentar dari temen2 tentang tutorial ini ada error, maka saya update postingan ini dengan menambahkan sedikit catatan ini. Perlu diperhatikan bahwa ini adalah tutorial CI untuk versi 1.7.x, bukan CI versi 2.x.. karena banyak perbedaan yang ada pada CI sekarang, maka mungkin nanti saya akan buat tutorial CI untuk versi 2.x.. Salah satu perbedaannya yaitu folder ‘applications’ yang ada di luar folder ‘system’ (CI 2.0), sedangkan CI versi 1.7.x masih di dalam folder system.. Jadi ketika mengalami error, silakan download versi 1.7.x (misal: 1.7.2/1.7.3).

    Kali ini, saya akan membuat tutorial tentang Pagination di dalam framework Codeigniter. Pagination adalah library yang sepele namun sangat2 penting tentunya buat Anda yang suka membuat aplikasi web/website dengan data yang sangat banyak, karena pagination memungkinkan Anda untuk menyeleksi dan menampilkan data hanya sebagian data tertentu per halamannya.

    Library Pagination secara default sudah ada di dalam framework Codeigniter, dan 100% Customize, bisa diubah tampilannya sesuai yang kita inginkan.

    OK, silakan ikuti tutorialnya… :)

    Kita buat contoh kasus terlebih dahulu, kasus yang tentunya memerlukan pagination. Yup, BUKU TAMU! Buku tamu adalah fitur untuk pengunjung yang akan meninggalkan pesan di website. Kalo pengunjungnya ada 1000 orang dan kita menampilkannya 1000 baris juga kan ga mungkin, maka dari itu kita harus memakai pagination… :)

    Untuk mengikuti tutorial ini, Anda harus sudah meload library database terlebih dahulu di /system/application/config/autoload.php

    Silakan copy SQL berikut untuk membuat table bukutamu dan memasukkan datanya:

    CREATE TABLE IF NOT EXISTS `bukutamu` (
      `id` INT(11) NOT NULL AUTO_INCREMENT,
      `nama` VARCHAR(100) NOT NULL,
      `email` VARCHAR(100) NOT NULL,
      `pesan` text NOT NULL,
      `created` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
      PRIMARY KEY (`id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=10 ;
     
    --
    -- Dumping data for table `bukutamu`
    --
     
    INSERT INTO `bukutamu` (`id`, `nama`, `email`, `pesan`, `created`) VALUES
    (1, 'Albert Einstein', 'albert2007@yahoo.com', 'Konten yang sangat menarik dan membantu saya dalam pemrograman web.. ;)', '2010-10-23 09:06:12'),
    (2, 'Sabrina', 'sabrina@yahoo.com', 'Like this, web yang sangat membantu saya.. :)', '2010-10-23 20:58:01'),
    (3, 'zakky', 'zakky@yahoo.com', 'keren bos.. webnya sangat membantu.. ', '2010-10-23 21:22:37'),
    (4, 'Bernand Simamora', 'bernand_cute@yahoo.com', 'Web Tutorial yang sangat bagus, nilai 100 dari saya.. Silakan kembangkan lebih jauh bakat Anda dalam pemrograman Web ;)', '2010-10-24 08:16:47'),
    (5, 'Robert Dawn', 'robert@gmail.com', 'That''s good man!', '2010-10-24 08:16:47'),
    (6, 'Rizal Juned', 'juned@yahoo.com', 'bisaan euy, ajarkeun lah.... keren2 wae blogna mah... :D', '2010-10-24 08:18:05'),
    (7, 'Andi Maulana', 'andimaulana@gmail.com', 'Good luck!', '2010-10-24 08:18:05'),
    (8, 'Pak Lurah', 'naonwae@yahoo.com', 'Tutorialnya tambahin lagi dunk gan... :)', '2010-10-24 08:20:59'),
    (9, 'Luna Apridola', 'luna_cute@gmail.com', 'bagus bgt tutorialnya!!! thankzz', '2010-10-24 08:20:59');

    Setelah table dan data terbentuk, maka sekarang tinggal dibuat modelnya di CI…

    /system/application/models/bukutamu_model.php

    <?php
     
    /**
     * Description of bukutamu_model
     *
     * @author cheyuz
     */
    class Bukutamu_Model extends Model
    {
     
        function __construct()
        {
            parent::Model();
        }
     
        function get($limit = array())
        {
            if ($limit == NULL)
                return $this->db->get('bukutamu')->result();
            else
                return $this->db->limit($limit['perpage'], $limit['offset'])->get('bukutamu')->result();
        }
     
    }
     
    ?>

    Function get() yang ada dalam model tersebut adalah untuk mengambil semua data yang ada di table bukutamu, dengan parameter $limit yang nantinya akan kita pergunakan untuk pagination. Jika $limit tidak diisi, maka data akan ditampilkan semuanya.

    OK, setelah model sudah dibuat, maka langkah selanjutnya adalah membuat Controller.

    /system/application/controllers/bukutamu.php

    <?php
     
    /**
     * Description of bukutamu
     *
     * @author cheyuz
     */
    class BukuTamu extends Controller
    {
     
        function __construct()
        {
            parent::Controller();
            $this->load->helper('url'); //load helper URL untuk memanggil function base_url()
            $this->load->model('bukutamu_model');
        }
     
        function index($offset = 1)
        {
            //tentukan jumlah data per halaman
            $perpage = 3;
     
            //load library pagination
            $this->load->library('pagination');
     
            //untuk konfigurasi pagination
            $config = array(
                'base_url' => base_url() . 'bukutamu/index/',
                'total_rows' => count($this->bukutamu_model->get()),
                'per_page' => $perpage,
            );
     
            //inisialisasi pagination dn config di atas
            $this->pagination->initialize($config);
            $data['bukutamu'] = $this->bukutamu_model->get(array('perpage' => $perpage, 'offset' => $offset));
     
            //tampilkan data
            $this->load->view('bukutamu_view', $data);
        }
     
    }
     
    ?>

    Untuk memanggil function base_url(), Anda harus meload terlebih dahulu URL Helper (di atas sudah diload di constructor). Base_url() adalah function untuk mengambil string web root kita, misalnya http://localhost/webku.

    OK, untuk konfigurasi Pagination akan saya jelaskan satu2:

    1. base_url: adalah url di mana action untuk memanggil bukutamu ini, karena di sini code terdapat di function index, maka base_url untuk pagination adalah: base_url().'bukutamu/index/'
    2. total_rows: adalah total data, yaitu semua data buku tamu yang diambil dari function get() di bukutamu_model
    3. per_page: adalah jumlah data perhalaman, kita set menjadi 3
    • Banyak sekali konfigurasi yang dapat kita atur di library pagination, dan konfigurasi itu sendiri bisa disimpan di folder /system/config/pagination.php, jadi Anda tidak usah mengeset konfigurasi lagi di setiap Controller.
    • Parameter $offset sangat diperlukan karena untuk menentukan limit dan offset untuk menampilkan isi data di setiap halaman

    Sekarang kita buat view dengan nama bukutamu_view.php.

    /system/application/views/bukutamu_views.php

    <?php foreach ($bukutamu as $bt): ?>
        <div>
            <div><b><?php echo $bt->nama ?></b></div>
            <span><?php echo $bt->email ?></span>
            <p><?php echo $bt->pesan ?></p>
        </div>
        <hr />
    <?php endforeach; ?>

    Silakan jalankan aplikasi Anda di browser…
    udah?
    “lho, lho, data kok cuman tampil 3?”

    Iya, emang seperti itu, hanya saja kita belum menampilkan link paginationnya. Untuk menampilkannya, tambahkan kode php berikut ini:

    <?php echo $this->pagination->create_links(); ?>

    jadi kode di view lengkapnya seperti ini:

    <?php foreach ($bukutamu as $bt): ?>
        <div>
            <div><b><?php echo $bt->nama ?></b></div>
            <span><?php echo $bt->email ?></span>
            <p><?php echo $bt->pesan ?></p>
        </div>
        <hr />
    <?php endforeach; ?>
     
    <?php echo $this->pagination->create_links(); ?>

    Silakan jalankan browser Anda… :)
    Jika Anda mengikuti tutorial dengan benar, Anda akan melihat link Pagination di bawah daftar bukutamu..

    Untuk memanipulasi tampilan pagination, silakan ikuti cara saya berikut:
    Buatlah file pagination.php di dalam direktori /system/application/config, kemudian tambahkan baris konfigurasi berikut:

    <?php
    $config['full_tag_open'] = '<div class="pagination">';
    $config['full_tag_close'] = '</div>';
    $config['next_link'] = 'Lanjut &raquo;';
    $config['prev_link'] = '&laquo; Kembali';
    $config['num_tag_open'] = '<div class="digit">';
    $config['num_tag_close'] = '</div>';
    $config['cur_tag_open'] = '<div class="digit current">';
    $config['cur_tag_close'] = '</div>';
    $config['num_links'] = 1;
    $config['last_link'] = '<b>Terakhir &rsaquo;</b>';
    $config['first_link'] = '<b>&lsaquo; Pertama</b>';
    ?>

    Kemudian tambahkan CSS berikut:

    /**
    @author Cheyuz
    **/
    .pagination{background: #eee; margin: 5px; padding: 10px;}
    .pagination .digit{padding: 0 10px 0 10px; display: inline;}
    .pagination .digit:hover, .pagination .current{padding: 2px 10px 2px 10px; background: #fff; font-weight: 900; -moz-border-radius:5px}

    maka tampilannya akan berubah menjadi seperti berikut:

    Selamat mencoba!
    Go Web Developer Indonesia!!!

    This entry was posted on Wednesday, October 27th, 2010 at 21:08 and is filed under Code Igniter, PHP, Tutorial. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.
  • 46 Comments

    Take a look at some of the responses we have had to this article.

    1. Nov 8th

      itu file css ditaroh dimana ya mas??
      apa perlu di bikin file baru??

      :Yb

    2. Joshua
      Nov 16th

      Nice info bro.. keep on going..

    3. Nov 16th

      @andi: terserah mas.. mau ditaro di root pun tak apa2… bisa kok..

    4. Nov 16th

      @joshua: ok gan, thanks :)

    5. Joshua
      Nov 16th

      bro, aku uda coba running skrip diatas, pas klik next, knp muncul error not found ya ?

      mohon pencerahannya..

      thx

    6. Nov 21st

      @joshua :

      coba kamu periksa di bagian base_url nya … mungkin punyamu salah… gw udah coba skrip diatas jalan kok ;)

    7. Nov 23rd

      @steflo: thanks steflo :)

    8. Joshua
      Nov 25th

      Oh ya bro, di URL nya saya kurang /index

      Thanks utk koreksinya..
      Thanks gan, nice tutorial.. lanjutkan yahh.. :)

    9. Nov 26th

      I believe in Angels, the ones that Heaven sends. Now you look on my blog .

    10. Nov 27th

      @Joshua: sippp…

    11. Nov 30th

      thanks pisan gan tutornya..
      udah ngebantu ane nyelesein tugas akhir..
      dari yg gk tw apa2 sampe jadi kyk sekarang (sedikit ngerti…hahaha :) ) )

      btw…
      req tutor validation dong…
      udah muter2 gk ada yg jelas…
      klo bisa ama hit counternya ya…

      ditunggu boss…

      keep posting…
      :D

    12. Dec 3rd

      @vandcurrent: oh ok gan,, nanti saya buat tutorial validation bawaan CI ya… sip..

    13. Dec 15th

      cssnya ditaro di root maksudnya gimana mas yah?itu udah langsung copas trus di save as file .css kah?

    14. Dec 19th

      @diaz: iya di root itu mksudnya di luar folder system… yup, tinggal disave .css…

    15. Dec 20th

      aduh2. kq pusing kepalaku ngliat kode2 ini. :D
      di bookmark dulu, mau minum paramex. ntar baru lanjut baca lagi :D

    16. Dec 20th

      ngasih nama cssnya apa ya?
      trus kita kan mau import css tsb, nah ngimportnya gimana mas?

    17. Dec 20th

      @paijan: hehehe ok gan, minum paramex dulu gan … :D

    18. Dec 20th

      kasih namanya terserah gan… misalnya style.css
      Ngeload CSS:
      simpen di dalam tag :
      <link rel="stylesheet" type="text/css" href="css/style.css” media=”all” />

      pake base_url, jadi nantinya bikin file style.css di dalam folder nama_situs/css….

    19. Dec 24th

      Hello I remember i had seen this website before… This guy made a exact copy of your site. Or possible this is also your site? http://www.autotraffic-avalanche.org

    20. heri
      Dec 30th

      mantaps bro….

      aku berhasil…

      tapi klo aku terapkan pada Pola HMVC

      berhasil tpi kurang memuaskan
      data berubah tapi tampilanya pagination tetap

      adakah pencerahan buatku, thanx sebelumnya

    21. ellidien
      Jan 4th

      gan ngomong2 cssnya knp yg bisa load cuman

      localhost/root aja ya…

      kalo udh manggil functionnya ilang cssnya kayak

      localhost/root/home/about dia nggak ada css nya

      kalo pake base_url() malah error.. knp ya?

    22. Jan 10th

      @heri: berhasil? sip.. :) maksudnya pagination tetap gimana gan?

    23. Jan 10th

      @ellidien: CSS buat pagination gan? coba pake templating: http://harian.cheyuz.com/_other/tutorial-codeigniter-dasar-part-iii-page-template

    24. ica
      Jan 13th

      saya coba di wind 7 kok masih ada errornya ya
      Deprecated: Assigning the return value of new by reference is deprecated in C:\xampp\htdocs\CodeIgniter2\system\codeigniter\Common.php on line 123.
      thx newbie niyyy

    25. azmi
      Jan 17th

      gan mau nanya
      return $this->db->limit($limit['perpage'], $limit['offset'])->get(‘bukutamu’)->result();
      }

      jalan. tapi ane pake join gan. kalau di punya ane
      return $this->db->limit($limit['perpage'], $limit['offset'])->get(‘peminjaman’)->result();

      nah kalau join table jadinya
      return $this->db->limit($limit['perpage'], $limit['offset'])->query(‘SELECT * FROM peminjaman join ormawa on peminjaman.IDOrmawa = ormawa.IDOrmawa’)->result();

      link pagenation nya muncul, tapi nampilin semua data. pada hal $perpage nya dah ane set kecil (misal 2), datanya 8, ya nampilin 8 data langsung.

      harusnya 2, trus next page…

      ane kudu join table buat tampilin info nya gan. ada solusi, kalau bisa fast reply gan :D
      (lagi urgent)

    26. Jan 23rd

      @azmi: maaf br bls… sy baru buka blog lg stelah menghadapi koneksi yg menjengkelkan hehe.. oh itu pasti ga bisa, soalnya function limit() digabung sama query()… jadi klo mau tambahin aja limit di dalam querynya,,, jangan memakai function limit() bawaan active record pada jquery.. smoga membantu.. :)

    27. Feb 23rd

      thanks kang Cheyuz :)
      sangat membatu sekali,
      namun sebelumnya saya sempet bingung, karena pake CI 2.0, ada beberapa yg error dari script di atas..
      tapi Alhamdulillah sudah teratasi.

      trus semangat utk blogingnya ya kang :)

    28. Feb 24th

      @arif: sip, thanks ya.. :)

    29. Mar 9th

      @ica: coba pakai Codeigniter versi 1.7.2

    30. Mar 11th

      Thanks bro ilmunya…

    31. Apr 2nd

      @ojan: eh c ojan euy… sama2 Jan.. gw udah lama ga update nih blog hehehe..

    32. andiliee
      Apr 17th

      Salam Sob.

      Makasih tutorialnya, sangat membantu saya belajar.

      Sob. boleh request ya … hehe

      Bisa ga “pagination with ajax”. Dulu saya pernah lihat, lupa punya siapa, ga sempet ngopy.

      Update terus ya sob, Sukses selalu.

    33. Apr 21st

      @andiliee: ok nanti saya buat tutorialnya :)

    34. May 26th

      Thx mas…. lg praktek nih.. kalo error balik lg kesini nanti :D

    35. Jun 23rd

      ak.. tanya dong..
      pada bagian model kan diambil dari buku tamunya
      return $this->db->get(‘bukutamu’)->result();
      selanjutnya ditampilin
      ‘total_rows’ => count($this->bukutamu_model->get())

      bagaimana sih caranya agar result dari buku tamu tersebut tampil dengan sort ascending/descending? soalnya
      hasil yang dari $this->db->get(‘bukutamu’)->result() tampilnya dari yang lama dulu baru yang baru, sedangkan yang ingin ditampilkan yang baru dulu baru yang lama.
      terimakasih.

    36. Jun 23rd

      @ricky: pake order by yg ada di CI, caranya tambahin order_by(“date”, “desc”) sebelum get(), jadi caranya: $this->db->order_by(‘date’, ‘desc’)->get(‘bukutamu’)->result();

    37. Jun 23rd

      kok ga mau ya ak, pas di coba di urutin di mysqlnya bisa pake query sql, tapi kok tampilannya masih tetep aja ga bisa terurut baik desc atau asc melalui codeigniternya :(

    38. Jun 23rd

      @ricky: kok ga mau ya… harusnya bisa kok Rick… klo mau gini aja alternatifnya pake query manual… $this->db->query(“select * from bla bla bla”)->result();

    39. ADHI
      Jul 21st

      kalo…diklik next posisinya selalu di no.1 kenapa ya?

    40. Aug 11th

      ko ga muncul ya style css nya, udah di ulik beberapa puluhkali, tetep tampilannya standdard, malah jadi jelek ada Enternya, ga ada style yang keluar. heu heu HELP

    41. Aug 12th

      Gan Ko Ga mundul ya css, paginationnya, defaul aja.
      apanya gan yang kurang?
      apakah ada yuang lain waktu pemanggilannya ?

      ga ngaruuuh yang ini
      makasih ..

    42. Aug 26th

      kalo…diklik next posisinya selalu di no.1 kenapa ya?

      Coba ganti tambahin ketika udah diload script ini:
      $config['uri_segment'] = 3;
      atau
      $config['uri_segment'] = 4;

    43. Sep 20th

      ko ga muncul ya style css nya, udah di ulik beberapa puluhkali, tetep tampilannya standdard, malah jadi jelek ada Enternya, ga ada style yang keluar. heu heu HELP

      @Yusuf: mungkin di .htaccess-nya blm diallow extensi .css

    44. Sep 20th

      Gan Ko Ga mundul ya css, paginationnya, defaul aja.
      apanya gan yang kurang?
      apakah ada yuang lain waktu pemanggilannya ?

      ga ngaruuuh yang ini
      makasih ..

      @Yusuf: Pake .htaccess ga?

    45. Sep 21st

      gan kok ane g tampil y?

    46. parin
      Nov 26th

      mas, klw di ci 2.x.x gimana caranya mas..? saya coba cara di atas tapi gak jalan… thanks be 4

  • Leave a Reply

    Let us know what you thought.

  • Name(required):

    Email(required):

    Website:

    Message:

    Spam Protection by WP-SpamFree