DEV Community

andysaktia
andysaktia

Posted on • Edited on

Membuat Paggination

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

1. Set Komponen

Dalam set komponen dibuat dalam bentuk fungsi, dan komponen-komponen yang diperlukan seperti keterangan halaman berapa $page, jumlah page dalam $arr_pagedan 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;
    }   
Enter fullscreen mode Exit fullscreen mode

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;
    }
Enter fullscreen mode Exit fullscreen mode

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">&#171; 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 &#187;</a>', $this->page + 1 );
        }
      }
      $ret .= '</div>';

      return $ret;
  }
Enter fullscreen mode Exit fullscreen mode

4. Menggunakan code

$pager = new Pagination();
$pager->setPager(1,50,10,testi.php);
$items_page = $pager->getArrayPage();
$con_pager = $pager->getTestiContainerPager();
Enter fullscreen mode Exit fullscreen mode

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">&#171; 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 &#187;</a>', $this->page + 1 );
        }
      }
      $ret .= '</div>';

      return $ret;
  }
}

Enter fullscreen mode Exit fullscreen mode

Top comments (0)