Skip to content

Simple Advanced Paging PHP

September 13, 2011

Simple Advanced Paging PHP

September 13th, 2011 by bimosaurus

Membuat Fungsi Advanced Paging dengan berbasis Block pada PHP

Teknik Paging adalah teknik yang digunakan pada segala bahasa pemrograman dalam strategi penyajian data banyak. Jika dalam satu halaman tidak mampu menangani banyaknya data, maka akan dibuat halaman-halaman untuk mempermudah navigasi dan tidak memberatkan halaman pertama. Jika data hanya satu data atau dibawah 100 mungkin tidak masalah dengan penggunaan satu halaman. Namun diluar itu akan menjadi masalah besar. Sangat berat kemungkinan menyakinan puluhan ribu data dalam satu halaman depan. Tentu data tersebut akan dibagi dalam beberapa halaman.

Teknik Paging sederhana pun ternyata tidak cukup untuk memenuhi kebutuhan penyajian data. Misal, diketahui terdapat 10.000 data, dan satu halaman akan menampilkan 10 data. Dengan keadaan seperti itu maka pada navigasi halaman harus ditampilkan 100000/10 = 1000 nomer halaman. tentu hal ini juga tidak menguntungkan baik bagi tampilan maupun kinerja server. Berikut dibawah akan saya tampilkan lagi teknik paging yang sederhana namun dapat mengampu data banyak. Kira-kira hasilnya akan menjadi seperti ini:

Logika-logika dasar yang harus dipenuhi adalah:

    1. Server Web mendapatkan informasi tentang permintaan halaman oleh client adalah dari HTTP Request jenis GET
      Contoh : http://server.ini/index.php?page=1 => permintaan halaman satu, dengan GET[page]
    2. Jika tidak terdapat GET permintaan halaman, maka dianggap client meminta halaman 1
    3. Satu block halaman akan menangani 10 nomer halaman. Block pertama adalah 1-10. Informasi mengenai block didapat dari PENDEKATAN KE ATAS (ceil) dari nomer halaman yang sedang diakses, dibagi dengan jumlah halaman dalam satu block.
      Misal client melakukan akses halaman 11. Berarti client sedang memasuki block ke ? ceil(11/10)=2
      client melakukan akses halaman 9? berarti jelas block ke 1.
    4. LINK PREVIOUS/SEBELUMNYA didapat dengan cara membandingkan, apakah halaman aktif itu masih lebih besar daripada halaman terakhir block 1. Jika lebih besar, maka halaman PREVIOUS aktif. Jika tidak, tidak akan diaktifkan. Jika aktif, maka, halaman previous akan berisi link halaman terakhir dari block sebelumnya.
      Jika diakses halaman 44 maka block aktif adalah block 5, previous adalah 40
    5. LINK Next/Lanjut didapat dengan cara membandingkan, apakah halaman terakhir block aktif masih kurang dari jumlah halaman? Jika masih kurang, maka tombol next dimnculkan dengan link halaman pertama dari block setelahnya.
    6. Jumlah halaman ditentukan dengan menentukan pembulatan keatas dari pembagian jumlah data seluruhnya dibagi dengan jumlah data dalam satu halaman. Misal, terdapat jumlah data 44, dengan satu halaman adalah 5 data per halaman, maka akan didapat 9 jumlah halaman / ceil(44/5)

Berikut Source Code nya

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
 
<?php
function paging ( $sql , $item_per_page , $page_per_block , $url , $page , $block ) {
 
/*The Simple Advanced Paging by Bimosaurus..
Please make it sure that this page is load the code like it
********************************************
$item_per_page = 10;
$page_per_block= 10;
********************************************
*/
 
if (!isset($_GET[page]) ){
   $page  = 1;
   $block = 1;
}else{
   $page  = ($_GET[page]);
   $block = ceil($page/$page_per_block);
}
 
   $q        = mysql_query($sql);
   $n        = mysql_num_rows($q);
   $jumdata  = $n;
   $jumhal   = ceil ( $n / $item_per_page );
   $jumblock = ceil ( $jumhal / $page_per_block );
   /*Prevent from Paging Hacking*/
   if( $_GET[page] > $jumhal ) {
      $page    = $jumhal;
      $block   = ceil($page/$page_per_block);
   }elseif($_GET[page] < 1){
      $page    = 1;
      $block   = 1;
   }
   /*end of prevention*/
 
   if ( $jumhal>1 )  {
      ?>
      <span style="float:left; margin-right:10px; font-size:13px; color:#333;">Halaman : </span>
      <?php
 
      if (  $block <= 1  )
      {
         $prev = "no";
         $next = "yes";
      }
      elseif (  $block >= $jumblock  )
      {
         $prev = "yes";
         $next = "no";
      }
      else
      {
         $prev = "yes";
         $next = "yes";
      }
 
 
      if (  $prev == "yes"  )  {
         $prev_page  = ( ($block - 1) * $page_per_block );
         $prev_block = $block - 1;
         ?>
         <span><a href="<?php echo $url;?>&page=1">&laquo;&laquo;First</a></span>
         <span style="margin-right:8px;"><a href="<?php echo $url;?>&page=<?php echo $prev_page; ?>">&laquo;Prev</a></span>
         <?php
      }  elseif ( ($prev == "no") && ($jumblock>1) )  {
      ?>
         <span style="color:#ccc;">&laquo;&laquo;First</span>
         <span style="margin-right:8px; color:#ccc;">&laquo;Prev</span>
         <?php
      }
 
      $startblock = ((($block - 1) * $page_per_block) + 1);
      $endblock   = ($block * $page_per_block);
 
      while ( (  $startblock <= $endblock  ) && (  $startblock <= $jumhal  ) )  {
         if (  $startblock == $page  ){
            ?>
            <span><?php echo $startblock; ?></span>
            <?php
         } else {
            ?>
            <span><a href="<?php echo $url;?>&page=<?php echo $startblock; ?>"><?php echo $startblock; ?></a></span>
            <?php
         }
         $startblock++;
      }
 
 
      if (  $next == "yes" )  {
         $next_page = ($block * $page_per_block) + 1;
         $next_block= $block + 1;
         if ( $next_page <= $jumhal )  {
            ?>
            <span style="margin-left:8px;"><a href="<?php echo $url;?>&page=<?php echo $next_page; ?>">Next&raquo;</a></span>
            <span><a href="<?php echo $url;?>&page=<?php echo $jumhal; ?>">End &raquo; &raquo;</a></span>
            <?php
         }
      }  else  {
         ?>
         <span style="margin-left:8px; color:#ccc;">Next&raquo;</span>
         <span style="color:#ccc;">End&raquo;&raquo;</span>
         <?php
      }
   }
}
 
 
 
 
 
/*------------------------------------------------------------------------------------------*/
/*
Simple Advanced Paging...
Author          : bimosaurus
Version         : 1.0
Date Version    : August the 17,2011
Moments         : Indonesia Independence Day
Example:
paging('SELECT * FROM `table`',10,5,'?mod=namamodul&submod=namasubmodul',$page,$block);
For bug and Consultation : bimosaurus@gmail.com
 
Models : 
 
<<First <Previous 10 11 12 13 14 15 Next> End>>
 
*/
/*--------------------------------------------------------------------------------------------*/
?>

Cara menggunakan…

Simpanlah script paging diatas menjadi paging.php. Pastikan bahwa halaman yang akan anda paging meload Script seperti berikut:

$item_per_page = 10;
$page_per_block= 10;

$item_per_page adalah jumlah item tiap halaman, dan $page_per_block adalah jumlah halaman tiap Block. Selanjutnya, include kan paging php tersebut ke dalam halaman yang meload paging

include “paging.php”;

dan selanjutnya anda tinggal menmanggil fungsi dengan

paging ( $sql , $item_per_page , $page_per_block , $url , $page , $block )

Contoh:

paging('SELECT * FROM `table`',10,5,'?mod=namamodul&amp;submod=namasubmodul',$page,$block);

Anda dapat mendownload script tersebut di sini

Lihat di halaman anda…

http://www.ziddu.com/download/16369565/paging.php.zip.html

Semoga berguna!…

bimosaurus

eof

From → Tak Berkategori

2 Komentar
  1. halo, mas bimo. apa kabar ? masih aktif multiplynya.

  2. cuma mau bilang ada lebih menarik lagi tidak.. source ini sudah beberapa kali saya lihat dan sebelumnya sudah saya implementasi.. tapi masih kurang menarik.. jika ada sample tolong diupdate yah.makasi

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: