Membuat Sistem Paginates/Paginasi dengan PHP dan MYSQL

April 11, 2020

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