CodeIgniter (Framework 1) =>Pagination
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?> |
thanks bro.. dicoba dulu..
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..
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-
bisa, tinggal diedit aja, saya edit juga kok buat keperluan aplikasi saya,
ko pake scrpt paging dari saya sendiri bisa ga?? soalny saya suka am script pagging say itu….
bisa, buat aja sendiri, jadikan library.
database-nya diamana yah
$this->uri->segment(3));
mas itu maksudnya apa yah, blom ngerti nih baru belajar …???
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
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
tambahkan ;
$config['uri_segment'] = 4;pada baris setelah tulisan :
$this->load->library(’pagination’);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 !!!
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;
}
Thank you bossss….. gue butuh banget pagination….
suwun banget boss…!!
[...] ref : samsonasik [...]
Mas…maaf mau tanya..klo datanya dah banyak kok link numbernya jadi berantakan ya…aku orang baru niih mas
maksudnya berantakan ? saya udah coba untuk data yg banyak ga masalah kok, coba cek $num_links nya.
Haloo mas samson..sudah beres mas,,,,ternyata scrip dari aku ada yg salah…btw makasih banyak ya mas…
yup, sama2
Mas samson…boleh minta tolong mas..
saya sedang latihan buat aplikasi tuk pencarian data..
kira2 mas samson bisa bantu ..?
Trima kasih sebelumnya
tinggal pelajari active record na aja mas di user_guide -> database class -> active record
Thank’s berguna sekali
kok di view nya eror seperti ini:
Message: Undefined variable: paging
berarti belum didefine di controller , coba cek di controllernya, apa sudah seperti ini :
$data['paging'] = $this->pagination->create_links();
$this->load->view(’blogview’, $data);