paginate atau paginasi merupakan fitur yang sering kita temukan di website/blog,paginasi merupakan fitur yang berfungsi untuk perpindah halaman dari halamn satu ke halaman dua dan seterusnya serta memberikan info seperti halaman yang sedang di bukan dan total halam yang ada di website tersebut.kali ini kita akan membuat sistem paginasi dengan php yang datanya yang akan kita paginasi berasal dari database mysql
tentunya pada awalnya kita buat kode untuk koneksi kedatabasenya
<?php
$host = "localhost"; $username = "root"; $password = ""; $database = "db_inventaris";
$con = mysqli_connect($host,$username,$password,$database);
if(!$con){
die(mysqli_connect_error());
}
disini saya menggunakan databse db_inventaris bisa kalian ubah sesuai nama database yang kalian gunakan
untuk fungsinya saya buat sekomplit mungkin dan mengambil beberapa referensi paginasi yang ada di website/blog yang pada umumnya jadi akan agak panjang scriptnya
<?php
function pagination($tb, $per_page = 10, $url = '?')
{
global $con;
$page = (int)(!isset($_GET["page"]) ? 1 : $_GET["page"]);
if ($page <= 0) $page = 1;
$query = "SELECT COUNT(*) as `num` FROM {$tb}";
$row = mysqli_fetch_array(mysqli_query($con, $query));
$total = $row['num'];
$adjacents = "2";
$prevlabel = "‹ Prev";
$nextlabel = "Next ›";
$lastlabel = "Last ››";
$page = ($page == 0 ? 1 : $page);
$start = ($page - 1) * $per_page;
$prev = $page - 1;
$next = $page + 1;
$lastpage = ceil($total / $per_page);
$lpm1 = $lastpage - 1;
$pagination = "";
if ($lastpage > 1)
{
$pagination .= "<ul class='pagination'>";
$pagination .= "<li class='page_info'>Page {$page} of {$lastpage}</li>";
if ($page > 1) $pagination .= "<li><a href='{$url}page={$prev}'>{$prevlabel}</a></li>";
if ($lastpage < 7 + ($adjacents * 2))
{
for ($counter = 1;$counter <= $lastpage;$counter++)
{
if ($counter == $page) $pagination .= "<li><a class='current'>{$counter}</a></li>";
else $pagination .= "<li><a href='{$url}page={$counter}'>{$counter}</a></li>";
}
}
elseif ($lastpage > 5 + ($adjacents * 2))
{
if ($page < 1 + ($adjacents * 2))
{
for ($counter = 1;$counter < 4 + ($adjacents * 2);$counter++)
{
if ($counter == $page) $pagination .= "<li><a class='current'>{$counter}</a></li>";
else $pagination .= "<li><a href='{$url}page={$counter}'>{$counter}</a></li>";
}
$pagination .= "<li class='dot'>...</li>";
$pagination .= "<li><a href='{$url}page={$lpm1}'>{$lpm1}</a></li>";
$pagination .= "<li><a href='{$url}page={$lastpage}'>{$lastpage}</a></li>";
}
elseif ($lastpage - ($adjacents * 2) > $page && $page > ($adjacents * 2))
{
$pagination .= "<li><a href='{$url}page=1'>1</a></li>";
$pagination .= "<li><a href='{$url}page=2'>2</a></li>";
$pagination .= "<li class='dot'>...</li>";
for ($counter = $page - $adjacents;$counter <= $page + $adjacents;$counter++)
{
if ($counter == $page) $pagination .= "<li><a class='current'>{$counter}</a></li>";
else $pagination .= "<li><a href='{$url}page={$counter}'>{$counter}</a></li>";
}
$pagination .= "<li class='dot'>..</li>";
$pagination .= "<li><a href='{$url}page={$lpm1}'>{$lpm1}</a></li>";
$pagination .= "<li><a href='{$url}page={$lastpage}'>{$lastpage}</a></li>";
}
else
{
$pagination .= "<li><a href='{$url}page=1'>1</a></li>";
$pagination .= "<li><a href='{$url}page=2'>2</a></li>";
$pagination .= "<li class='dot'>..</li>";
for ($counter = $lastpage - (2 + ($adjacents * 2));$counter <= $lastpage;$counter++)
{
if ($counter == $page) $pagination .= "<li><a class='current'>{$counter}</a></li>";
else $pagination .= "<li><a href='{$url}page={$counter}'>{$counter}</a></li>";
}
}
}
if ($page < $counter - 1)
{
$pagination .= "<li><a href='{$url}page={$next}'>{$nextlabel}</a></li>";
$pagination .= "<li><a href='{$url}page=$lastpage'>{$lastlabel}</a></li>";
}
$pagination .= "</ul>";
}
else
{
$pagination .= "<ul class='pagination'>";
$pagination .= "<li class='page_info'>Page {$page} of 1</li>";
$pagination .= "</ul>";
}
$startpoint = ($page * $per_page) - $per_page;
$statement = "$tb ORDER BY `waktu_diinput` DESC";
$q = "SELECT * FROM {$statement} LIMIT {$startpoint} , {$per_page}";
$tb = mysqli_query($con, $q);
$result = array(
'table' => $tb,
'paginate' => $pagination
);
return $result;
}
dalam fungsi itu terdapat 2 fitur utama yaitu mereturn data di table dan menampilkan tombol-tombol paginasinya,fungsi pagination ini akan mengecek apakah $GET[‘page’] ada atau tidak bila tidak ada otomatis akan menampilkan halamn pertawa bila ada maka akan menampilkan halaman sesuai dengan angka yang tersimpan di $GET[‘page’]
setelag itu fungsi ini akan mereturn sebuah array yang berisi data table kita dan tombol paginasianya
berikut cara memanggil fungsinya
<?php
$data = pagination("supplier",2);
supplier disini merupakan nama table yang akan kita gunakan sedangkan angka 2 merupakan jumlah data yang akan kita tampilkan pada setiap halaman/page.jika kalian var_dump $data maka akan muncul array yang berisi 2 value
untuk penggunaan lengkapnya sebagai berikut
<table border="1" width="50%">
<thead>
<tr>
<th>Kode Supplier</th>
<th>Nama Supplier</th>
<th>Alamat Supplier</th>
<th>Telepon Supplier</th>
</tr>
</thead>
<tbody>
<?php
$data = pagination("supplier",2);
while($row = mysqli_fetch_assoc($data['table'])): ?>
<tr>
<td>
<?php echo $row['kode_supplier']; ?>
</td>
<td>
<?php echo $row['nama_supplier']; ?>
</td>
<td>
<?php echo $row['alamat_supplier']; ?>
</td>
<td>
<?php echo $row['telp_supplier']; ?>
</td>
</tr>
<?php endwhile; ?>
</tbody>
<tfoot>
<tr>
<td colspan="4">
<?php echo $data['paginate']; ?>
</td>
</tr>
</tfoot>
</table>
$data[‘table’] berisi data-data dari table supplier tadi sedangkan $data[‘paginate’] berisi tombol-tombol paginasinya.berikut hasilnya
agar lebih indah kita tambahkan beberapa css untuk mendesain tombol paginasinya
ul.pagination {
text-align: center;
color: black;
}
ul.pagination li {
display: inline;
padding: 0 3px;
}
ul.pagination a {
color: black;
display: inline-block;
padding: 5px 10px;
border: 1px solid black;
text-decoration: none;
}
ul.pagination a:hover, ul.pagination a.current {
background: black;
color: #fff;
}
berikut hasilnya
semoga sistem paginasi dari php ini bisa membantu kalian membuat website/blog