Bagi programmer pasti sering membuat aplikasi yang menampilkan data. Nah, apabila data yang mau ditampilkan sedikit, itu tidak masalah, tapi bagaimana jika data yang mau ditampilkan jumlahnya puluhan bahkan ratusan maka pengguna akan menghadapi scrool window yang sangat panjang (sampe cape scrool-nya :P) dan loading-nya akan lama. Nah, untuk mengatasi hal ini digunakan satu sistem yang sudah banyak dikenal yaitu Sistem Paging. Sistem Paging adalah sistem dimana menampilkan data-data yang ada secara bertahap, jadi data tidak ditampilkan semua, data dibagi menjadi beberapa halaman dengan masing-masing halaman hanya memiliki beberapa data saja. Kemudian jika halaman tujuan diklik baru data pada halaman tersebut ditampilkan, jadi proses loading yang terjadi tidak lama.
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);?> |
function generate_paging_text($curPage,$totalRec,$maxRec)
|
- $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); |