Membuat pagination otomatis di CodeIgniter 4

Untuk membuat pagination di CodeIgniter 4 sebenarnya lebih sederhana dibandingkan ketika di CI3, hanya saja mungkin kalau kita belum terbiasa rasanya sedikit membingungkan. Apalagi kalau kita lagi migrasi dari CI3 ke CI4.

Kali ini saya akan menuliskan sebagai catatan tentang membuat pagination di CodeIgniter 4. Ditulisan ini, akan membahas mengenai pagination secara default. Untuk custom pagination, kita akan bahas dilain tulisan.

Yang menarik dari library pagination CI4 ini, selain simple dan confignya engga ribet, mudah pengelolaan template nya, juga mendukung multipagination di satu halaman. Jadi kalau misalnya kita ingin membuat beberapa pagination dalam satu view pun, bisa memungkinkan dengan adanya grouping pagernya.

Load Library Pagination CI4

Untuk dapat menggunakan library bawaan sistem, di CI4 ini kita menggunakan perintah seperti ini:

$pager = \Config\Services::pager();

Membuat pager dari result database

Satu lagi yang menarik dari library pager CI4 ini, yaitu fungsi paginate() yang bisa kita gunakan untuk membuat pagination dari result DB. Kita tidak perlu repot-repot membuat seting macem-macem, kita cukup menambahkan fungsi yang sudah ada.

Supaya tidak membingungkan, saya beri contoh, misalnya ini adalah skrip untuk membuat pagination pada halaman blog.

<?php namespace App\Controllers;

use App\Models\BlogModel;

class Blog extends BaseController
{
	protected $BlogModel;

	public function __construct() {
        $this->BlogModel = new BlogModel();
         }

	public function index()
	{
        $get_blog = $this->BlogModel->paginate(6);
        $data['blog'] = $get_blog;
        $data['pager'] = $this->BlogModel->pager;

	}
        echo view('users/index', $data);

}

Diatas merupakan skrip controller yang bisa teman-teman gunakan. Yang perlu diperhatikan adalah, saya memanggil BlogModel seperti biasnya, teman-teman bisa menggunakan metode yang lain, sebagaimana nyamannya teman-teman.

Kemudian fokus di fungsi index, di

    $get_blog = $this->BlogModel->paginate(6); //angka 6 jumlah item result per page nya

sebernya tidak ada fungsi paginate di BlogModel, fungsi paginate sudah ada bawaan system model CI4. Kalau teman-teman mau cek, bisa cek di system/Model.php, teman-teman bakalan menemukan skrip seperti:

public function paginate(int $perPage = 20, string $group = 'default', int $page = 0)
{
    $pager = \Config\Services::pager(null, null, false);
    $page  = $page >= 1 ? $page : $pager->getCurrentPage($group);

    $total = $this->countAllResults(false);

    // Store it in the Pager library so it can be
    // paginated in the views.
    $this->pager = $pager->store($group, $page, $perPage, $total);

    $offset = ($page - 1) * $perPage;

    return $this->findAll($perPage, $offset);
}

Tapi hiraukan saja, kalau inginya biar bisa jalan. Saya menyampaikan sekedar untuk pengetahuan, supaya kita tau bagaimana fungsi-fungsi dalam framework itu bisa bekerja.

Model yang saya gunakan kurang lebih (setelah saya sederhanakan) menjadi seperti ini:

<?php namespace App\Models;

use CodeIgniter\Model;

class BlogModel extends Model
{


    public function __construct() {

        parent::__construct();
        $db = \Config\Database::connect();
        $this->builder = $db->table('blog');
    }


}

Loh mas? kenapa tidak ada fungsi sama sekali? Iya, ketika kita menggunakan pagination model ini, dia tidak membaca fungsinya, tetapi membaca db->table yang didefinisikan. Apakah benar atau tidak, kalau kedepan ada sesuatu yang baru yang saya pelajari akan saya informasikan.

Minusnya apa? Saya jadi kesulitan untuk melakukan join dan select nya jadi * dan tanpa alias, ini akan merepotkan. Namun bisa diakali nanti akan saya jelaskan dalam tulisan yang lain yang membahas tentang manual pagination. Supaya tak terlalu panjang, jadi saya pisah-pisah.

Lalu bagaimana di viewnya?

Untuk menampilkan pagination di view, teman-teman cukup menggunakan:

<?= $pager->links() ?> atau <?= $pager->simpleLinks() ?>

Perbedaanya apa? Ketika menggunakan links() akan menampilkan berupa angka-angka pager, sementara kalau menggunakan simpleLinks akan menampilkan order dan newer di paginationnya.

Sebenarnya bisa aja kita ubah di templatenya, sesuai selera kita, akan kita bahas di tulisan yang lain. Sementara mengikuti tulisan ini teman-teman sudah bisa menampilkan pagination di CodeIgniter 4.

Semoga bermanfaat.