Ketika Saya memiliki banyak data dan itu ditampilkan dalam Web. Hal ini akan menjadi masalah ketika banyak data tersebut berpengaruh pada banyaknya bandwidth atau nilai estetik web. Akhirnya pemberian halaman atau pagination itu penting. Berikut class pagination sederhana yang mungkin dapat membantu mengerti cara kerja dari pagination.
Persiapan
- Mengerti bagaimana menggunakan Class
- Fungsi-fungsi php seperti count, max, min, ceil, array_slice, sprintf.
- Penggunaan
$this
1. Set Komponen
Dalam set komponen dibuat dalam bentuk fungsi, dan komponen-komponen yang diperlukan seperti keterangan halaman berapa $page
, jumlah page dalam $arr_page
dan Batasan items dalam satu page $limit
, seperti berikut:
public $page;
public $limit;
public $offset;
public $totalPages;
public $arr_page;
public $link;
public function setPager($page, $arr_page, $limit, $link)
{
$total = count( $arr_page );
$totalPages = ceil( $total/ $limit );
// proses QC $page input agar dalam batasan range total pages
$page = max($page, 1);
$page = min($page, $totalPages);
$offset = ($page - 1) * $limit;
if( $offset < 0 ) $offset = 0;
// deklarasi page
$this->page = $page;
$this->limit = $limit;
$this->offset = $offset;
$this->totalPages = $totalPages;
$this->arr_page = $arr_page;
$this->link = $link;
}
2. Items dalam Page
Fungsi berikut akan memanfaatkan komponen yang telah diset untuk menentukan items yang akan ikut dimasukan. Dengan memanfaatkan fungsi php array_slice
, fungsi akan memotong array
dari offset yang diingikan pada limit yang diperlukan.
public function getArrayPage()
{
$res_testimony_page = array_slice( $this->arr_page, $this->offset, $this->limit );
return $res_testimony_page;
}
3. Membangun Pager Sederhana
dalam fungsi pembuat conteiner pager ini ada beberapa bentuk, tampilan yang dihasilkan cuba berupa keterangan page dan total page, serta tombol next dan prev. Terlihat seperti << 1/10 >>
public function getTestiContainerPager()
{
$ret = '<div style="min-width: 300px;">';
if( $this->totalPages != 0 ) {
// Keterangan page aktif sebelah kiri
if( $this->page == 1 ) {
$ret .= '';
}
else {
$ret .= sprintf( '<a href="?' . $this->link . '=%d" style="color: #0f4c75">« prev</a>', $this->page - 1 );
}
// penunjuk total pages
$ret .= ' <span><strong>' . $this->page . '</strong> / ' . $this->totalPages . '</span> ';
// Keterangan page aktif sebelah Kanan
if( $this->page == $this->totalPages ) {
$ret .= '';
}
else {
$ret .= sprintf( '<a href="?' . $this->link .'=%d" style="color: #0f4c75">next »</a>', $this->page + 1 );
}
}
$ret .= '</div>';
return $ret;
}
4. Menggunakan code
$pager = new Pagination();
$pager->setPager(1,50,10,testi.php);
$items_page = $pager->getArrayPage();
$con_pager = $pager->getTestiContainerPager();
Done
Keseluruhan code
class Pagination
{
private $page;
private $limit;
private $offset;
private $totalPages;
private $arr_page;
private $link;
public function setPager($page, $arr_page, $limit, $link)
{
$total = count( $arr_page );
$totalPages = ceil( $total/ $limit );
$page = max($page, 1);
$page = min($page, $totalPages);
$offset = ($page - 1) * $limit;
if( $offset < 0 ) $offset = 0;
$this->page = $page;
$this->limit = $limit;
$this->offset = $offset;
$this->totalPages = $totalPages;
$this->arr_page = $arr_page;
$this->link = $link;
}
public function getArrayPage()
{
$res_testimony_page = array_slice( $this->arr_page, $this->offset, $this->limit );
return $res_testimony_page;
}
public function getTestiContainerPager()
{
$ret = '<div style="min-width: 300px;">';
if( $this->totalPages != 0 ) {
if( $this->page == 1 ) {
$ret .= '';
}
else {
$ret .= sprintf( '<a href="?' . $this->link . '=%d" style="color: #0f4c75">« prev</a>', $this->page - 1 );
}
$ret .= ' <span><strong>' . $this->page . '</strong> / ' . $this->totalPages . '</span> ';
if( $this->page == $this->totalPages ) {
$ret .= '';
}
else {
$ret .= sprintf( '<a href="?' . $this->link .'=%d" style="color: #0f4c75">next »</a>', $this->page + 1 );
}
}
$ret .= '</div>';
return $ret;
}
}
Top comments (0)