Sourche Code Terbaru

Cara Membuat Advance Paging dengan PHP



Pada kesempatan kali ini daesoft akan membahas bagaimana cara membuat advance panging pada PHP. Fungsi utama dari advance pagging adalah untuk mengurangi scroling windows apabila data yang dimuat terlalu banyak. selain itu juga penggunaan advance pagging dapat mempercepat load time page, sehingga halaman yang dimuat relative lebih cepat. 

Advance pagging yang akan dibuat pada tutoral kali ini adalah seperti dibawah ini :
1 2 3 4 … 20 Next >>

Tahap pertama silahkan buat tabel untuk meyimpan data :

  1. CREATE TABLE guestbook (
  2.   id int(11) auto_increment,
  3.   nama varchar(20),
  4.   email varchar(20),
  5.   tanggal date,
  6.   komentar text,
  7.   PRIMARY KEY  (id)
  8. )

Selanjutnya buat halaman koneksi dengan nama show.php

  1. <?php
  2. // koneksi ke mysql
  3. mysql_connect('namahost', 'dbuser', 'dbpassword');
  4. mysql_select_db(data);
  5. // jumlah data yang akan ditampilkan per halaman
  6. $dataPerPage = 5;
  7. ?>

Kita lanjutkan skenarionya. Untuk script paging ini, bila dibuka pertama kali dengan URL http://namaserver/show.php maka otomatis menuju ke halaman 1. Untuk menuju ke halaman 2, maka URL nya http://namaserver/show.php?page=2. Sedangkan untuk menuju ke halaman 3, URL nya http://namaserver/show.php?page=3, dan seterusnya.

Dari skenario di atas tampak bahwa bila parameter ?page=... belum diberikan pada URL maka secara otomatis menuju ke nomor halaman 1. Sedangkan bila terdapat parameter ?page=… maka nomor halamannya menyesuaikan nilai pada parameter ?page tersebut. Untuk mewujudkan hal ini, maka kita tambahkan perintah

  1. <?php
  2. mysql_connect('namahost', 'dbuser', 'dbpassword');
  3. mysql_select_db('dbname');
  4. // jumlah data yang akan ditampilkan per halaman
  5. $dataPerPage = 5;
  6. // apabila $_GET['page'] sudah didefinisikan, gunakan nomor halaman tersebut,
  7. // sedangkan apabila belum, nomor halamannya 1.
  8. if(isset($_GET['page']))
  9. {
  10.     $noPage = $_GET['page'];
  11. }
  12. else $noPage = 1;
  13. ?>

Selanjutnya, dalam teknik paging perlu adanya pengaturan posisi awal data atau lebih dikenal dengan istilah offset. Offset digunakan untuk mengatur posisi awal data yang akan ditampilkan perhalaman. Perlu Anda tahu, bahwa data dalam database memiliki urutan seperti halnya array. Data pada baris pertama hasil query SQL disebut data pada posisi ke-0, data pada baris kedua disebut data pada posisi ke-1, dst.

Trus.. apa kaitannya offset dengan paging? Sabar… perhatikan dulu contoh berikut ini

Sebagai contoh, misalkan terdapat 15 data dalam tabel guestbook dimana kita ingin menyajikan pada setiap halaman adalah 5 data. Dengan demikian total terdapat 3 halaman dalam pagingnya. Untuk halaman pertama, pastilah data yang ditampilkan adalah data ke – 0, 1, 2, 3 dan 4. Sedangkan halaman kedua, data yang ditampilkan adalah 5, 6, 7, 8, dan 9. Serta halaman ketiga, data ke 10, 11, 12, 13, 14.

Nah… perhatikan bahwa untuk halaman 1, data awal yang ditampilkan adalah data pada urutan ke-0, halaman 2 data awalnya adalah data pada urutan ke-5 dan halaman 3 data pada urutan ke 10.

Lantas apa gunanya offset tersebut? Offset nantinya akan digunakan pada query SQL untuk memunculkan data pada setiap halaman. Query SQL yang digunakan adalah

  1. SELECT * FROM guestbook LIMIT offset, jumlahData;

Sehingga untuk memunculkan data guestbook pada halaman pertama, maka perintahnya

  1. SELECT * FROM guestbook LIMIT 0, 5;

untuk memunculkan data dihalamana kedua perintahnya

  1. SELECT * FROM guestbook LIMIT 5, 5;

dan seterusnya..

OK.. deh.. dah paham, trus yang jadi masalah adalah bagaimana menentukan offset pada setiap halamannya? Bila kita lihat patternnya, maka hubungan antara offset, jumlah data yang ingin ditampilkan per halaman dan nomor halamannya adalah:

offset = (no halaman – 1) * jumlah data per halaman;

Lho kok bisa? he.. 3x kita cek saja. Untuk halaman 1, maka nilai offset = (1 – 1) * 5 = 0. Untuk halaman 2, nilai $offset = (2 – 1) * 5 = 5 dan halaman ketiga $offset = (3 – 1) * 5 = 10. Bener kan? 

OK.. deh, dah paham tentang offset, so.. kita bisa tambahkan scriptnya untuk mencari offset dan query SQL nya.

  1. <?php
  2. mysql_connect('namahost', 'dbuser', 'dbpassword');
  3. mysql_select_db('dbname');
  4. // jumlah data yang akan ditampilkan per halaman
  5. $dataPerPage = 5;
  6. // apabila $_GET['page'] sudah didefinisikan, gunakan nomor halaman tersebut,
  7. // sedangkan apabila belum, nomor halamannya 1.
  8. if(isset($_GET['page']))
  9. {
  10.     $noPage = $_GET['page'];
  11. }
  12. else $noPage = 1;
  13. // perhitungan offset
  14. $offset = ($noPage - 1) * $dataPerPage;
  15. // query SQL untuk menampilkan data perhalaman sesuai offset
  16. $query = "SELECT * FROM guestbook LIMIT $offset$dataPerPage";
  17. $result = mysql_query($query) or die('Error');
  18. // menampilkan data
  19. echo "<table border='1'>";
  20. echo "<tr><td>Nama</td><td>Email</td><td>Tanggal</td><td>Komentar</td></tr>";
  21. while($data = mysql_fetch_array($result))
  22. {
  23.    echo "<tr><td>".$data['nama']."</td><td>".$data['email']."</td><td>".$data['tanggal']."</td><td>".$data['komentar']."</td></tr>";
  24. }
  25. echo "</table>";
  26. .
  27. .
  28. ?>


Nah… masalah berikutnya adalah bagaimana menentukan total jumlah halamannya? Hal ini penting karena nantinya akan ditampilkan sebagai link navigasi pagingnya. Untuk menghitung total jumlah halaman, kita cari patternnya terlebih dahulu. Misalkan terdapat 15 data, dan kita ingin menyajikan data sejumlah 5 per halaman, maka total ada berapa halaman yang dibutuhkan? OK.. benar ada 3. Trus… kalo ada 31 data dan kita ingin menyajikan data sejumlah 5 per halaman, total ada berapa halaman? OK.. benar ada 7 (untuk halaman ke-7 hanya tampil 1 buah data). Sehingga dari pattern tersebut formula untuk menghitung jumlah halaman adalah

jumlah halaman = ceil(jumlah data / data per halaman);

ceil() adalah function yang digunakan untuk membulatkan ke atas suatu bilangan. Misal ceil(3.2) = 4, ceil(3.7) = 4.

Trus… yang jadi masalah adalah bagaimana mendapatkan jumlah datanya? Nah… untuk mendapatkan jumlah data keseluruhan yang ada kita gunakan query SQL.

  1. SELECT COUNT(*) FROM guestbook;

OK… I know, dan sekarang kita bisa tambahkan proses menghitung jumlah data dan jumlah halaman pada scriptnya.

  1. <?php
  2. mysql_connect('namahost', 'dbuser', 'dbpassword');
  3. mysql_select_db('dbname');
  4. // jumlah data yang akan ditampilkan per halaman
  5. $dataPerPage = 5;
  6. // apabila $_GET['page'] sudah didefinisikan, gunakan nomor halaman tersebut,
  7. // sedangkan apabila belum, nomor halamannya 1.
  8. if(isset($_GET['page']))
  9. {
  10.     $noPage = $_GET['page'];
  11. }
  12. else $noPage = 1;
  13. // perhitungan offset
  14. $offset = ($noPage - 1) * $dataPerPage;
  15. // query SQL untuk menampilkan data perhalaman sesuai offset
  16. $query = "SELECT * FROM guestbook LIMIT $offset$dataPerPage";
  17. $result = mysql_query($query);
  18. // menampilkan data
  19. echo "<table border='1'>";
  20. echo "<tr><td>Nama</td><td>Email</td><td>Tanggal</td><td>Komentar</td></tr>";
  21. while($data = mysql_fetch_array($result))
  22. {
  23.    echo "<tr><td>".$data['nama']."</td><td>".$data['email']."</td><td>".$data['tanggal']."</td><td>".$data['komentar']."</td></tr>";
  24. }
  25. echo "</table>";
  26. // mencari jumlah semua data dalam tabel guestbook
  27. $query  = "SELECT COUNT(*) AS jumData FROM guestbook";
  28. $hasil  = mysql_query($query);
  29. $data  = mysql_fetch_array($hasil);
  30. $jumData = $data['jumData'];
  31. // menentukan jumlah halaman yang muncul berdasarkan jumlah semua data
  32. $jumPage = ceil($jumData/$dataPerPage);
  33. .
  34. .
  35. ?>

Nah… sekarang tinggal bagaimana cara memunculkan link berisi nomor halaman yang menuju ke setiap halamannya. Untuk memunculkan nomor halamannya, caranya mudah. Kita hanya menggunakan looping saja.

Tapi eit.. tunggu dulu pada desain advance paging di atas, sebelum memunculkan link nomor halaman, terdapat link << prev. Kapan link ini akan muncul? ya... tepat sekali yaitu ketika nomor halaman yang sedang aktif (sedang dibuka) setelah halaman pertama atau $noPage > 1. Trus.. menuju ke nomor halaman berapakah link tersebut? yap.. benar yaitu menuju ke nomor halaman sebelumnya ($noPage – 1).

Dengan demikian kita bisa tambahkan perintah berikut ini pada script

  1. if ($noPage > 1) echo  "<a href='".$_SERVER['PHP_SELF']."?page=".($noPage-1)."'>&lt;&lt; Prev</a>";

sehingga menjadi..

  1. <?php
  2. mysql_connect('namahost', 'dbuser', 'dbpassword');
  3. mysql_select_db('dbname');
  4. // jumlah data yang akan ditampilkan per halaman
  5. $dataPerPage = 5;
  6. // apabila $_GET['page'] sudah didefinisikan, gunakan nomor halaman tersebut,
  7. // sedangkan apabila belum, nomor halamannya 1.
  8. if(isset($_GET['page']))
  9. {
  10.     $noPage = $_GET['page'];
  11. }
  12. else $noPage = 1;
  13. // perhitungan offset
  14. $offset = ($noPage - 1) * $dataPerPage;
  15. // query SQL untuk menampilkan data perhalaman sesuai offset
  16. $query = "SELECT * FROM guestbook LIMIT $offset$dataPerPage";
  17. $result = mysql_query($query) or die('Error');
  18. // menampilkan data
  19. echo "<table border='1'>";
  20. echo "<tr><td>Nama</td><td>Email</td><td>Tanggal</td><td>Komentar</td></tr>";
  21. while($data = mysql_fetch_array($result))
  22. {
  23.    echo "<tr><td>".$data['nama']."</td><td>".$data['email']."</td><td>".$data['tanggal']."</td><td>".$data['komentar']."</td></tr>";
  24. }
  25. echo "</table>";
  26. // mencari jumlah semua data dalam tabel guestbook
  27. $query   = "SELECT COUNT(*) AS jumData FROM guestbook";
  28. $hasil  = mysql_query($query);
  29. $data     = mysql_fetch_array($hasil);
  30. $jumData = $data['jumData'];
  31. // menentukan jumlah halaman yang muncul berdasarkan jumlah semua data
  32. $jumPage = ceil($jumData/$dataPerPage);
  33. // menampilkan link previous
  34. if ($noPage > 1) echo  "<a href='".$_SERVER['PHP_SELF']."?page=".($noPage-1)."'>&lt;&lt; Prev</a>";
  35. .
  36. .
  37. ?>

Berikutnya kita akan tampilkan link nomor-nomor halamannya menggunakan looping. Adapun perintah-perintahnya adalah seperti di bawah ini.

  1. for($page = 1; $page <= $jumPage; $page++)
  2. {
  3.          if ((($page >= $noPage - 3) && ($page <= $noPage + 3)) || ($page == 1) || ($page == $jumPage))
  4.          {
  5.             if (($showPage == 1) && ($page != 2))  echo "...";
  6.             if (($showPage != ($jumPage - 1)) && ($page == $jumPage))  echo "...";
  7.             if ($page == $noPage) echo " <b>".$page."</b> ";
  8.             else echo " <a href='".$_SERVER['PHP_SELF']."?page=".$page."'>".$page."</a> ";
  9.             $showPage = $page;
  10.          }
  11. }

Terakhir.. kita perlu link untuk memunculkan next >>. OK kapan link ini muncul? ya benar… yaitu ketika halaman yang sedang aktif bukanlah pada halaman terakhir atau sebelum halaman terakhir. Sehingga kita bisa tambahkan perintah

  1. if ($noPage < $jumPage) echo "<a href='".$_SERVER['PHP_SELF']."?page=".($noPage+1)."'>Next &gt;&gt;</a>";

sehingga scriptnya menjadi

  1. <?php
  2. mysql_connect('namahost', 'dbuser', 'dbpassword');
  3. mysql_select_db('dbname');
  4. // jumlah data yang akan ditampilkan per halaman
  5. $dataPerPage = 5;
  6. // apabila $_GET['page'] sudah didefinisikan, gunakan nomor halaman tersebut,
  7. // sedangkan apabila belum, nomor halamannya 1.
  8. if(isset($_GET['page']))
  9. {
  10.     $noPage = $_GET['page'];
  11. }
  12. else $noPage = 1;
  13. // perhitungan offset
  14. $offset = ($noPage - 1) * $dataPerPage;
  15. // query SQL untuk menampilkan data perhalaman sesuai offset
  16. $query = "SELECT * FROM guestbook LIMIT $offset$dataPerPage";
  17. $result = mysql_query($query) or die('Error');
  18. // menampilkan data
  19. echo "<table border='1'>";
  20. echo "<tr><td>Nama</td><td>Email</td><td>Tanggal</td><td>Komentar</td></tr>";
  21. while($data = mysql_fetch_array($result))
  22. {
  23.    echo "<tr><td>".$data['nama']."</td><td>".$data['email']."</td><td>".$data['tanggal']."</td><td>".$data['komentar']."</td></tr>";
  24. }
  25. echo "</table>";
  26. // mencari jumlah semua data dalam tabel guestbook
  27. $query   = "SELECT COUNT(*) AS jumData FROM guestbook";
  28. $hasil  = mysql_query($query);
  29. $data     = mysql_fetch_array($hasil);
  30. $jumData = $data['jumData'];
  31. // menentukan jumlah halaman yang muncul berdasarkan jumlah semua data
  32. $jumPage = ceil($jumData/$dataPerPage);
  33. // menampilkan link previous
  34. if ($noPage > 1) echo  "<a href='".$_SERVER['PHP_SELF']."?page=".($noPage-1)."'>&lt;&lt; Prev</a>";
  35. // memunculkan nomor halaman dan linknya
  36. for($page = 1; $page <= $jumPage; $page++)
  37. {
  38.          if ((($page >= $noPage - 3) && ($page <= $noPage + 3)) || ($page == 1) || ($page == $jumPage))
  39.          {
  40.             if (($showPage == 1) && ($page != 2))  echo "...";
  41.             if (($showPage != ($jumPage - 1)) && ($page == $jumPage))  echo "...";
  42.             if ($page == $noPage) echo " <b>".$page."</b> ";
  43.             else echo " <a href='".$_SERVER['PHP_SELF']."?page=".$page."'>".$page."</a> ";
  44.             $showPage = $page;
  45.          }
  46. }
  47. // menampilkan link next
  48. if ($noPage < $jumPage) echo "<a href='".$_SERVER['PHP_SELF']."?page=".($noPage+1)."'>Next &gt;&gt;</a>";
  49. ?>

Akhirnya selesai juga.. panjang juga ternyata :D moga pada g' bosan bacanya ya.. buat yang g' mau cape ngikutin tutorialnya silangkan download filenya di bawah ini :

Download File
Sekian Posting kali ini semoga bermanfaat..

Sumber Artikel

Tidak ada komentar