بِسْمِ اللَّهِ Mudah-mudahan tutorial Codeigniter 3 – CRUD List Data dengan Pagination ini bermanfaat
Pagination atau pengaturan tampilan data per halaman didalam website adalah salah satu bagian penting dalam ilmu per-website-an. Hal berpengaruh dengan performa dari website itu sendiri. Tentunya pengaruh itu untuk menampilkan data yang banyak.
Persiapan Codeigniter 3 – CRUD List Data dengan Pagination
Pastikan sudah ada ini:
Editor yang digunakan adalah Visual Studio Code
Project Codeigniter, untuk membuatnya bisa dilihat tutorial Codeigniter 3 – Instalasi dan membuat layout dengan template
Mengerjakan tutorial layout Codeigniter 3 – Membuat layout dengan template 2
Sudah terkoneksi dengan database, silakan lihat Codeigniter 3 – Koneksi ke Database
Juga tutorial Codeigniter 3 – Menghilangkan index.php pada URL
Mengerjakan tutorial Codeigniter 3 – Login Multiuser dengan library Ion Auth untuk mengatur login dan hak akses, agar user yang terdaftar saja yang bisa melihat data
Tutorial pagination bisa dilihat di Codeigniter 3 – User Guide
Pertama
Buat tabel untuk dalam database, pada tutorial ini yang akan dibuat adalah tabel products. Script sqlnya seperti ini
CREATE TABLE `products` (
`id` int(11) NOT NULL,
`product_name` varchar(255) NOT NULL,
`description` varchar(255) NOT NULL,
`url` varchar(255) DEFAULT NULL,
`create_date` datetime NOT NULL,
`create_by` varchar(75) NOT NULL,
`update_date` datetime DEFAULT NULL,
`update_by` varchar(75) DEFAULT NULL,
`active` tinyint(1) NOT NULL DEFAULT '1'
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO `products` (`id`, `product_name`, `description`, `url`, `create_date`, `create_by`, `update_date`, `update_by`, `active`) VALUES
(1, 'Produk 1', 'Produk 1', '', '2022-03-01 00:00:00', 'admin', NULL, NULL, 1),
(2, 'Produk 2', 'Produk 2', '', '2022-03-01 00:00:00', 'admin', NULL, NULL, 1),
(3, 'Produk 3', 'Produk 3', '', '2022-03-01 00:00:00', 'admin', NULL, NULL, 1),
(4, 'Produk 4', 'Produk 4', '', '2022-03-01 00:00:00', 'admin', NULL, NULL, 1),
(5, 'Produk 5', 'Produk 5', '', '2022-03-01 00:00:00', 'admin', NULL, NULL, 1),
(6, 'Produk 6', 'Produk 6', '', '2022-03-01 00:00:00', 'admin', NULL, NULL, 1),
(7, 'Produk 7', 'Produk 7', '', '2022-03-01 00:00:00', 'admin', NULL, NULL, 1),
(8, 'Produk 8', 'Produk 8', '', '2022-03-01 00:00:00', 'admin', NULL, NULL, 1),
(9, 'Produk 9', 'Produk 9', '', '2022-03-01 00:00:00', 'admin', NULL, NULL, 1);
ALTER TABLE `products`
ADD PRIMARY KEY (`id`),
ADD UNIQUE KEY `id` (`id`);
ALTER TABLE `products`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=10;
Untuk mempersingkat waktu, disini juga sudah disertakan contoh data.
Kedua
Tambahkan library pada autoload (lokasinya di application\config\autoload.php) agar bisa otomatis digunakan, tanpa perlu load disetiap controller. Jika anda sudah mengerjakan tutorial sebelumnya, berarti cukup tambahkan ,’pagination’ pada $autoload[‘libraries’]. Jadi isinya akan seperti ini:
$autoload['libraries'] = array('database','session','ion_auth','form_validation','pagination');
Ketiga
Tambahkan file konfigurasi untuk pagination dengan lokasi di application\config\pagination.php. Scriptnya sebagai berikut
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
$config["per_page"] = 5;
$config["uri_segment"] = 2;
$config['full_tag_open'] = '<ul class="pagination justify-content-center">';
$config['full_tag_close'] = '</ul>';
$config['first_link'] = 'First';
$config['last_link'] = 'Last';
$config['first_tag_open'] = '<li class="page-item"><span class="page-link">';
$config['first_tag_close'] = '</span></li>';
$config['prev_link'] = '«';
$config['prev_tag_open'] = '<li class="page-item"><span class="page-link">';
$config['prev_tag_close'] = '</span></li>';
$config['next_link'] = '»';
$config['next_tag_open'] = '<li class="page-item"><span class="page-link">';
$config['next_tag_close'] = '</span></li>';
$config['last_tag_open'] = '<li class="page-item"><span class="page-link">';
$config['last_tag_close'] = '</span></li>';
$config['cur_tag_open'] = '<li class="page-item active"><a class="page-link" href="#">';
$config['cur_tag_close'] = '</a></li>';
$config['num_tag_open'] = '<li class="page-item"><span class="page-link">';
$config['num_tag_close'] = '</span></li>';
Konfigurasi ini diperlukan karena akan memudahkan dalam coding selanjutnya (dalam hal ini menghemat baris coding). Dimana nantinya kita hanya perlu menambahkan script pagination inti yaitu
$config["per_page"] = $per_page; // jumlah baris per halaman
$config["base_url"] = base_url() . "product"; // url controller
$config["total_rows"] = $this->product_model->count_all(); // jumlah data
Keempat
Membuat model untuk tabel products yang sudah dibuat, sebut saja namanya Product_model yang berlokasi di application\models\Product_model.php. Dengan script seperti ini
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Product_model extends CI_Model
{
public function __construct() {
parent::__construct();
}
function findById($id) {
$this->db->select('*');
$this->db->where('id', $id);
$this->db->where('active', 1);
$query = $this->db->get("products", 1);
if ($query->num_rows() == 1) {
return $query->row_array();
}
}
function list() {
$this->db->select('*');
$this->db->where('active', 1);
$query = $this->db->get("products");
return $query;
}
public function make_query()
{
$query = "
SELECT * from products
WHERE 1=1
";
return $query;
}
public function fetch_data($limit, $start)
{
$query = $this->make_query();
$query .= ' LIMIT '.$start.', '.$limit;
$data = $this->db->query($query);
return $data->result() ;
}
public function count_all()
{
$query = $this->make_query();
$data = $this->db->query($query);
return $data->num_rows();
}
}
Sebenarnya script ini memanfaatkan script yang dulu pernah digunakan pada tutorial Codeigniter 4 dengan beberapa perubahan. Tadinya saya bermaksud menggabungkannya dengan pencarian tapi Alhamdulillah belum berhasil. Mungkin akan saya coba lain waktu.
Kelima
Selanjutnya adalah pembuatan controller, nama controllernya Product dengan lokasi application\controllers\Product.php. Scriptnya sebagai berikut
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Product extends CI_Controller {
public function __construct() {
parent::__construct();
$this->load->model("product_model");
}
public function index()
{
$page = ($this->uri->segment(2)) ? $this->uri->segment(2) : 0;
$data["page"] = $page;
$per_page = 5;
$config["per_page"] = $per_page;
$config["base_url"] = base_url() . "product";
$config["total_rows"] = $this->product_model->count_all();
$this->pagination->initialize($config);
$data['products'] = $this->product_model->fetch_data($per_page, $page);
$data["links"] = $this->pagination->create_links();
$data['title'] = "Daftar Produk";
$data['page_name'] = "product/list";
$this->load->view('template', $data);
}
}
Keenam
Berikutnya adalah pembuatan view atau tampilan. Agar lebih mudah untuk setiap controller saya kelompokan dalam satu folder. Contoh: controller Product akan mempunyai folder product dalam view (lokasinya application\views\product). Nama file yang akan digunakan adalah list.php yang lokasinya di application\views\product\list.php. Berikut ini scriptnya
<div class="card shadow mb-4">
<div class="card-header py-3">
<h6 class="m-0 font-weight-bold text-primary"><?= $title; ?></h6>
<div class="row">
<div class="col">
<div class="text-center"><?= $links; ?></div>
</div>
</div>
</div>
<div class="card-body">
<div class="table-responsive">
<table class="table table-bordered" id="dataTable" width="100%" cellspacing="0">
<thead>
<tr>
<th>ID</th>
<th>Nama Produk</th>
<th>Deskripsi</th>
<th>Gambar</th>
</tr>
</thead>
<tbody>
<?php
foreach ($products as $row) {
?>
<tr>
<td><?= $row->id; ?></td>
<td><?= $row->product_name; ?></td>
<td><?= $row->description; ?></td>
<td><?= $row->url; ?></td>
</tr>
<?php
}
?>
</tbody>
</table>
</div>
</div>
</div>
Terakhir
Silakan dicoba pada browser, jika tidak ada error hasilnya akan seperti ini

Demikian tutorial Codeigniter 3 – CRUD List Data dengan Pagination. Silakan dilanjutkan dan dikembangkan lagi.
Mungkin bisa dikembangkan lagi CRUD List Data dengan Pagination + Pencarian.
Mudah-mudahan tutorial ini bermanfaat.