Welcome to Abdul Malik Ikhsan's Blog

CodeIgniter (Framework 1) =>Pagination

Posted in Tutorial PHP by samsonasik on August 16, 2008

Melanjutkan pembahasan-pembahasan sebelumnya, framework berguna untuk mempermudah pembuatan aplikasi, misalkan untuk limit, paging, mapping sudah disediakan oleh framework. Saya melihat codeIgniter adalah framework php yang mudah untuk digunakan, tetapi termasuk powerfull, kita tidak perlu lagi susah-susah lagi memikirkan kompleksitas dari logic aplikasi, just mengerti tentang Array, kalau itu sudah paham, insya Allah ga akan susah untuk belajar framework, apalagi sudah terbiasa dengan smarty. Kali ini, saya akan lebih khusushon membahas tentang paging di codeIgniter 🙂
Ok, let’s begin 🙂
Pertama, kita harus tahu struktur directory dulu :
secara default, terdapat dalam folder system yang ada di folder codeIgniter kita, di dalamnya terdapat folder application, libraries, dan lain sebagainya. Aplikasi yang kita bangun kita letakkan di folder application, yang di dalamnya ada configurasi database, controllers, views, models, dan sebagainya. Nah, sekarang, kita mulai dengan konfigurasi dulu (untuk konsep pemetaan page bisa baca user_guide-nya).

Pertama, kita tentukan url base kita,
..codeigniter\system\application\config\config.php

//ubah localhost menjadi $_SERVER["SERVER_NAME"];
//untuk menanggulangi aplikasi ditaruh di sisi server
$config['base_url']    = "http://".$_SERVER["SERVER_NAME"]."/CodeIgniter/";

Nah, baru kita set database-nya
..codeigniter\system\application\config\database.php

$db['default']['hostname'] = "localhost";
$db['default']['username'] = "root";
$db['default']['password'] = "";
$db['default']['database'] = "codeigniter";
$db['default']['dbdriver'] = "mysql";
//... dst

setelah beres, kita setting kelas Pagination-nya : (bisa diubah di controller )

var $base_url                = ''; // The page we are linking to
var $total_rows          = ''; // Total number of items (database results)
var $per_page                 = 10; // Max number of items you want shown per page
var $num_links            =  3; // Number of "digit" links to show before/after the currently viewed page
var $cur_page                 =  0; // The current page being viewed
var $first_link       = 'Awal';
var $next_link            = '';
var $prev_link            = '';
var $last_link            = 'Akhir';

Ok, preparing selesai, sekarang, kita siap untuk membuat aplikasi dengan paging 🙂 :
Kali ini, saya membuat contoh untuk view-ing table untuk blog, saya buat table entries dan table comment, table entries mempunyai field-field id, title, content, dan date, sedangkan table comment yang merupakan table detail, field-fieldnya id, nama,email, id_entries, dan komentar. Isi masing2 table.
Hal pertama yang harus dilakukan adalah, menyiapkan model :
The Model :..codeigniter\system\application\models\Blogmodel.php –>

<?php
class Blogmodel extends Model {

var $title   = '';
var $content = '';
var $date    = '';

function Blogmodel()
{
//Memanggil Constructor Model
parent::Model();
}

//fungsi limitasi
function get_last_entries($num,$offset)
{
$query = $this->db->get('entries', $num,$offset);
return $query->result_array();
}

//fungsi menampilkan detail komentar dari entries
function get_comment($id){
$sql = "select * from comment where id=?";
$query = $this->db->query($sql, array($id));
return $query->result_array();
}

function insert_entry()
{
$this->title   = $_POST['title'];
$this->content = $_POST['content'];
$this->date    = date('Y-m-d');

$this->db->insert('entries', $this);
}

function update_entry()
{
$this->title   = $_POST['title'];
$this->content = $_POST['content'];
$this->date    = date('Y-m-d');

$this->db->update('entries', $this, array('id', $_POST['id']));
}

}
?>

The Controller : ..codeigniter\system\application\controllers\blog.php

<?

class Blog extends Controller {

function __construct() {

parent::Controller();

$this->load->helper(’url’);

$this->load->helper(’html’);

$this->load->database();

}

//menampilkan halaman index

function index()

{

//load class Blogmodel
$this->load->model(’Blogmodel’, ”, TRUE);

//load class Pagination</pre>
$this->load->library(’pagination’);
 $config['base_url'] = base_url().’index.php/blog/index/’;
 $config['total_rows'] = $this->db->count_all(’entries’);
 $config['per_page'] = ‘2′;

//manipulasi image next, prev, last, first (anggap kita tambah folder images
 dan gambar-gambar di dalam  folder  codeigniter kita)
 $image_propertiesnext = array(
 ’src’ => ‘images/active.gif’,
 ‘class’ => ‘post_images’,
 ‘width’ => ‘15′,
 ‘height’ => ‘15′,
 ‘title’ => ‘Halaman Selanjutnya’,
 ‘rel’ => ‘lightbox’,
 );

$image_propertiesprev = array(
 ’src’ => ‘images/active2.gif’,
 ‘class’ => ‘post_images’,
 ‘width’ => ‘15′,
 ‘height’ => ‘15′,
 ‘title’ => ‘Halaman Sebelumnya’,
 ‘rel’ => ‘lightbox’,
 );

$image_propertiesfirst = array(
 ’src’ => ‘images/first.gif’,
 ‘alt’ => ‘Halaman Awal’,
 ‘class’ => ‘post_images’,
 ‘width’ => ‘15′,
 ‘height’ => ‘15′,
 ‘title’ => ‘Halaman Awal’,
 ‘rel’ => ‘lightbox’,
 );

$image_propertieslast = array(
 ’src’ => ‘images/last.gif’,
 ‘alt’ => ‘Halaman Terakhir’,
 ‘class’ => ‘post_images’,
 ‘width’ => ‘15′,
 ‘height’ => ‘15′,
 ‘title’ => ‘Halaman Terakhir’,
 ‘rel’ => ‘lightbox’,
 );

$config['next_link'] = img($image_propertiesnext);
 $config['prev_link'] = img($image_propertiesprev);
 $config['first_link'] = img($image_propertiesfirst);
 $config['last_link'] = img($image_propertieslast);

$this->pagination->initialize($config);

$data['query'] = $this->Blogmodel->get_last_entries($config['per_page'],
 $this->uri->segment(3));

//detail comment
 $comment = array();
 $noperpage = array();
 $no = 0; $nolanjut = 0;
 forEach($data['query'] as $val):
 $comment[] = $this->Blogmodel->get_comment($val['id']);
 if (!$this->uri->segment(3)): //jika page belum berjalan…
 $no++;
 else:				//jika page sudah berjalan…
 $nolanjut++;
 if ($nolanjut>1):
 //jika looping sudah berjalan lebih dari satu kali
   $no =  $nolanjut + $config['per_page'] * ($this->uri->segment(3)/$config['per_page']);

 else:
 //jika looping baru berjalan sekali
 $no = $this->uri->segment(3)+1;
 endif;
 endif;
 $noperpage[] = $no;
 endforeach;

$data['comment'] = $comment;
 $data['noperpage'] = $noperpage;

$data['paging'] = $this->pagination->create_links();
 $this->load->view(’blogview’, $data);

}
 }
 ?>

Saatnya menampilkan :
The view :

Code: <!– ..codeigniter\system\application\views\blogview.php –>
<?=$paging?>
<table border=1>
<tr>
<td>No.</td>
<td>Tittle</td>
<td>Content</td>
<td>Date</td>
<td>comment</td>
</tr>
<?php
foreach($query as $val=>$value):
?>
<tr>
<td><?=$noperpage[$val]?></td>
<td><?=$value[‘title’]?></td>
<td><?=$value[‘content’]?></td>
<td><?=$value[‘date’]?></td>
<td>
<?php
foreach($comment[$val] as $com):
echo nl2br($com[‘komentar’]); echo “<br>”;
endforeach;
?>
</td>
</tr>
<?php endforeach; ?>
</table>
<?=$paging?>
Advertisements

31 Responses

Subscribe to comments with RSS.

  1. fajar said, on October 21, 2008 at 12:44 am

    thanks bro.. dicoba dulu..

  2. deeKa said, on October 22, 2008 at 11:05 am

    wew… tq bgt…
    dari kemaren nyoba2 pagination di CI tapi gagal mulu…
    muncul sih angka pagingnya berupa link, tapi ga ngelink ke mana2..
    ntar coba ah..

  3. arman said, on December 4, 2008 at 8:46 pm

    bro,,mau tanya,,
    bisa gak sih ngerubah sistem paginationnya ci. soalnya kan dia pake from, bukan halaman. jadi gw pengennya kalo page 2, ya nampilin halaman ke-2, bukan mulai data ke-2.

    -trims-

  4. samsonasik said, on December 11, 2008 at 2:28 am

    bisa, tinggal diedit aja, saya edit juga kok buat keperluan aplikasi saya,

  5. egar said, on December 30, 2008 at 7:59 am

    ko pake scrpt paging dari saya sendiri bisa ga?? soalny saya suka am script pagging say itu….

  6. samsonasik said, on December 30, 2008 at 8:11 am

    bisa, buat aja sendiri, jadikan library.

  7. gemini said, on April 15, 2009 at 4:53 am

    database-nya diamana yah

  8. gemini said, on April 15, 2009 at 6:17 am

    $this->uri->segment(3));
    mas itu maksudnya apa yah, blom ngerti nih baru belajar …???

  9. samsonasik said, on April 16, 2009 at 3:43 am

    itu segment url , penjelasannya bisa dibaca di :
    http://codeigniter.com/user_guide/general/urls.html
    dan detailnya di
    http://codeigniter.com/user_guide/libraries/uri.html

  10. Gie said, on May 31, 2009 at 4:39 pm

    Mas ketika aku pake untuk controller yang persis di dalam folder controller ../controller/ bisa berjalan normal, cuma ketika di pake di controller yang letaknya di sub folder (misalkan saya di folder ../controller/admin) linknya tidak bisa tercipta dengan sempurna. Yakni cuma 1,2,3 aja. Di bagian segment uri jg udah saya ganti 4. Mohon bantuannya

  11. samsonasik said, on May 31, 2009 at 10:21 pm

    tambahkan ;
    $config['uri_segment'] = 4;
    pada baris setelah tulisan :
    $this->load->library(’pagination’);

  12. Pak Blank said, on June 23, 2009 at 5:50 am

    tanya : kalo saya pagingnya berdasarkan kondisi gimana caranya misalkan ya ada 2 tabel kayak wp. 1 posting 2 comennt
    agar comment untuk postingan A saja yang kita pagging gmn caranya..?
    contoh :
    Tabel Posting ;
    id=1
    judul=CI

    id=2
    judul=CodeIgnitier

    Tabel Comment;
    id=1
    kment=”bla bla bla..”
    id_posting=1

    id=2
    kment=”bla bla bla..”
    id_posting=1

    id=3
    kment=”bla bla bla..”
    id_posting=2

    Tolong dibantu donk sampe Muter2 Kepala Saya !!!

    • samsonasik said, on June 23, 2009 at 5:58 pm

      berarti di looping 2 kali, loop pertama buat posting, loop kedua buat comment, pada kasus2 blog sih biasanya comment dijadikan link dulu, (tidak langsung dijadikan campur dengan kumpulan posting, kecuali detail komen per posting), ya kalau maunya seperti itu kan tinggal dikasih if aja kan
      misal :
      foreach($posting as $key = >$post)
      {
      echo $post[‘posting’] ;
      $comment = ($post[‘posting’]==”A”) ? $commentWithPaging : $commentNoPaging;
      foreach($comment[$key] as $keycomment=>$cmn)
      {
      echo $cmn[‘comment’] ;
      }
      echo $paging;
      }

  13. Ben said, on June 23, 2009 at 10:02 am

    Thank you bossss….. gue butuh banget pagination….

  14. Pak Blank said, on June 24, 2009 at 1:52 am

    suwun banget boss…!!

  15. […] ref : samsonasik […]

  16. gendut54 said, on October 27, 2009 at 5:50 am

    Mas…maaf mau tanya..klo datanya dah banyak kok link numbernya jadi berantakan ya…aku orang baru niih mas

  17. samsonasik said, on October 27, 2009 at 6:16 am

    maksudnya berantakan ? saya udah coba untuk data yg banyak ga masalah kok, coba cek $num_links nya.

  18. gendut54 said, on October 27, 2009 at 7:36 am

    Haloo mas samson..sudah beres mas,,,,ternyata scrip dari aku ada yg salah…btw makasih banyak ya mas…

  19. samsonasik said, on October 27, 2009 at 8:22 am

    yup, sama2

  20. gendut54 said, on October 27, 2009 at 8:51 am

    Mas samson…boleh minta tolong mas..
    saya sedang latihan buat aplikasi tuk pencarian data..
    kira2 mas samson bisa bantu ..?
    Trima kasih sebelumnya

  21. samsonasik said, on October 27, 2009 at 2:28 pm

    tinggal pelajari active record na aja mas di user_guide -> database class -> active record 🙂

  22. Muhamad Erros said, on December 13, 2009 at 2:02 am

    Thank’s berguna sekali

  23. ita said, on January 29, 2010 at 3:47 am

    kok di view nya eror seperti ini:
    Message: Undefined variable: paging

    • samsonasik said, on January 29, 2010 at 2:15 pm

      berarti belum didefine di controller , coba cek di controllernya, apa sudah seperti ini :
      $data[‘paging’] = $this->pagination->create_links();
      $this->load->view(’blogview’, $data);

  24. wahmal said, on August 31, 2012 at 8:23 pm

    tanya: kalau mau data nomor di tabel bertambah sesuai bertambahnya paging yang di klik gmn y carax????

  25. samsonasik said, on August 31, 2012 at 8:27 pm

    itu kan udah ada codingnya, heuheu. yg variable $noperpage 🙂

  26. kartatopia c said, on August 9, 2014 at 2:33 am

    mas, tutorial sangat bagus. membantu memecahkan masalah saya. terima masih.

  27. Iffah said, on January 22, 2015 at 7:36 am

    mas, mau tanya kalo error terus pesannya “Unable to load the requested class: Database, pagination”
    itu masalahnya dimana ya?

    • samsonasik said, on January 23, 2015 at 1:28 am

      coba load class2nya seperti pakai :

      $this->load->database();
      

      atau register di application/config/autoload.php di bagian libraries.


Leave a Reply

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 / Change )

Twitter picture

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

Facebook photo

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

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: