Sistem Paging ini saya jelaskan lebih dikhususkan untuk penggunaan pada Website.
Sekarang saya akan menjelaskan dulu logika dasar dari sistem Paging. Perhatikan table di bawah ini :
Sebagai contoh, kita memiliki 22 record daftar mahasiswa, kemudian ingin kita tampilkan dengan dibagi menjadi beberapa halaman dengan maksimum 5 record per halaman.
Nah, pertama kita cari dulu jumlah halaman yang akan terbentuk :
Jumlah Halaman = Total Record / Maksimum Record tiap halaman Jumlah Halaman = 22 / 5 = 4.4 Halaman |
Ibarat kan saja halaman itu halaman pada buku novel ukuran kertas A4,dimana ada sisa sedikit cerita yang tidak muat lagi untuk ditampilkan di halaman terakhir, mau tak mau kertas musti ditambah satu lagi guna menempatkan sisa cerita yang ada (walaupun hanya menggunakan separo dari ukuran kertas saja. Maka dari itu setiap perhitungan Jumlah Halaman kita akan bulatkan ke atas.
Jumlah Halaman = 22 / 5 = 4.4 = 5 Halaman |
Untuk pengambilan data dari database (mysql), kita ambil dari record pertama dengan kelipatan 5 untuk halaman selanjutnya,
Coba perhatikan tabel di atas, : untuk halaman 1, kita hanya mengambil data dari record ke-0 hingga ke record ke-4, untuk halaman 2, kita hanya mengambil data dari record ke-5 hingga ke record ke-9, dst (record pertama dalam mysql dimulai dari angka 0) .
Jadi rumus untuk mendapatkan start record adalah :
(no halaman saat ini - 1) * maximum record per halaman |
Sebagai contoh untuk kasus diatas (dengan maximum record per halaman = 5) :
Start record untuk halaman 1 : (1 - 1) * 5 = 0
Start record untuk halaman 2 : (2 - 1) * 5 = 5
Start record untuk halaman 3 : (3 - 1) * 5 = 10
Start record untuk halaman 4 : (4 - 1) * 5 = 15
Start record untuk halaman 5 : (5 - 1) * 5 = 20
Nah,berdasarkan dari logika yang saya jelaskan di atas , berikut contoh dalam bentuk coding PHP :
<? function generate_paging_text($curPage,$totalRec,$maxRec){ $totalPage=ceil($totalRec/$maxRec); $str=""; /*prev button*/ if($curPage>1){ $prevPage = $curPage-1; $str.=" ".makeLink("prev","?p=".$prevPage)." "; } /*generate page number*/ for($i=1;$i<=$totalPage;$i++){ if($i==$curPage){ $bold=true; }else{ $bold=false; } $str.=" ".makeLink($i,"?p=".$i,$bold)." "; } /*next button*/ if($curPage<$totalPage){ $nextPage=$curPage+1; $str.=" ".makeLink("next","?p=".$nextPage)." "; } return $str; } function makeLink($str,$url,$bold="false"){ if($bold){ $str="<b>".$str."</b>"; } return '<a href="'.$url.'">'.$str.'</a>'; } //Connect to database $con = mysql_connect("localhost","root",""); mysql_select_db("contoh",$con); $curPage=($_GET['p']==null)?1:$_GET['p']; $maxRec=5;// maximum record per page /* GET DATA FROM MYSQL */ $curRec = ($curPage-1)*$maxRec; //TO GET START RECORD $sql = "select * from customer order by name asc limit ".$curRec.",".$maxRec; echo "Query untuk Halaman ".$curPage.": <b>".$sql."</b><Br><BR>"; $rs=mysql_query($sql,$con); while ($row = mysql_fetch_assoc($rs)) { echo "Nama : ".$row['name']." , Umur : ".$row['age']."<br>"; } // get total Record from your table in database $total_record=mysql_query("select count(customer_id) as tot from customer",$con); $total_record=mysql_fetch_row($total_record); $total_record=$total_record[0]; /* PRINT PAGING LINK */ echo "<br>"; echo generate_paging_text($curPage,$total_record,$maxRec); ?> |
Saya akan jelaskan perbagian.
function generate_paging_text($curPage,$totalRec,$maxRec)
|
Disini, untuk mengehasikan text Paging saya buat
dalam bentuk function , jadi bisa dipakai dengan mudah setiap saat.
Paramater yang diterima oleh function paging ini ada 3 yaitu :
- $curPage = digunakan untuk memberitaukan function halaman no berapa yang sedang aktif.
- $totalRec =berisi total record yang berada di dalam database.
- $maxRec= berisi informasi maksimum record yang boleh ditampilkan tiap halaman.
function makeLink($str,$url,$bold="false")
|
Kemudian bagian pengambilan datanya, logika perhitungannya dibuat sesuai logika yang sudah dijelaskan di atas. Untuk membatasi record yang mau diambil dari database, dapat menambahkan "limit startRecord,maxRecord" di paling belakang sql pengambilan data.
$startRec= ($curPage-1)*$maxRec; //TO GET START RECORD
$sql = "select * from customer order by name asc limit ".$startRec.",".$maxRec; $rs=mysql_query($sql,$con); |
Ini saya sertakan file php-nya supaya lebih jelas
contoh paging