How to create a Pagination in Codeigniter

In this tutorial will learn how to create “Pagination in CodeIgniter”.  In this tutorial, we used the CodeIgniter pagination class by initializing pagination library.

I am assuming you have already basic experience of working with the CodeIgniter framework before. Also, I will be sharing only partial code snippet related to pagination functionality.

Initializing pagination library and model.

public function __construct()
{
    parent::__construct();
    $this->load->model('Product_Model',"product_model");
    $this->load->library('pagination');
}

Rotes in CodeIgniter.

$route['ProductList']	= 'product/allProductList';
$route['ProductList(:num)']	= 'product/allProductList';

Initialization pagination library in Controller function.

public function allProductList()
{
    $config = array();
    $config["base_url"] = base_url() . "ProductList/";  
    $total_row   = $this->product_model->getproductList_count();
    $config["total_rows"] = $total_row;
    $config["per_page"] = 16;
    $config["uri_segment"]  = 2;
    $choice = $config["total_rows"] / $config["per_page"];
    $config["num_links"] = round($choice);
    $config['cur_tag_open'] = '&nbsp;<li class="active"><a >';
    $config['cur_tag_close'] = '</a></li>';
    $config['num_tag_open'] = '&nbsp;';
    $config['num_tag_close'] = '&nbsp;';
    $config['next_link'] = 'Next';
    $config['prev_link'] = 'Previous';
    $this->pagination->initialize($config);
    if($this->uri->segment(2)){
        $page = ($this->uri->segment(2)) ;
    }
    else{
       $page = 0;
    } 

    $data["productlist"] = $this->product_model->getproductList($config["per_page"], $page);
    $str_links = $this->pagination->create_links();
    $data["linked"] = explode('&nbsp;',$str_links );
    $this->load->view('product',$data);
}

Controller call in Model.

function getproductList_count()
{
    $query = $this->db->select('*');
    $query = $this->db->from('tbl_products');
    $query = $this->db->get();
    return $query->num_rows();
}

function getproductList($limit, $start)
{
    $query = $this->db->select('*');
    $query = $this->db->from('tbl_products');
    $query = $this->db->limit($limit, $start);
    $query = $this->db->get();
    return $query->result();
}

Now, finally, controller call in view.

if(!empty($linked))
{
?>
     <ul class="pagination" style="">
	 <?php foreach ($linked as $link) {
            ?>
		<li><?=$link?></li>
	  <?php } ?>
     </ul>
<?php }
?>

Here are Css that help to beautify your pagination block.

CSS Pagination format code

<style>
.pagination {
    display: inline-block;
    padding-left: 0;
    margin: 20px 0;
    border-radius: 4px
}
.pagination>li {
    display: inline
}
.pagination>li>a,
.pagination>li>span {
    position: relative;
    float: left;
    padding: 6px 12px;
    margin-left: -1px;
    line-height: 1.42857143;
    color: #337ab7;
    text-decoration: none;
    background-color: #fff;
    border: 1px solid #ddd
}
.pagination>li:first-child>a,
.pagination>li:first-child>span {
    margin-left: 0;
    border-top-left-radius: 4px;
    border-bottom-left-radius: 4px
}
.pagination>li:last-child>a,
.pagination>li:last-child>span {
    border-top-right-radius: 4px;
    border-bottom-right-radius: 4px
}
.pagination>li>a:focus,
.pagination>li>a:hover,
.pagination>li>span:focus,
.pagination>li>span:hover {
    z-index: 2;
    color: #23527c;
    background-color: #eee;
    border-color: #ddd
}
.pagination>.active>a,
.pagination>.active>a:focus,
.pagination>.active>a:hover,
.pagination>.active>span,
.pagination>.active>span:focus,
.pagination>.active>span:hover {
    z-index: 3;
    color: #fff;
    cursor: default;
    background-color: #337ab7;
    border-color: #337ab7
}
.pagination>.disabled>a,
.pagination>.disabled>a:focus,
.pagination>.disabled>a:hover,
.pagination>.disabled>span,
.pagination>.disabled>span:focus,
.pagination>.disabled>span:hover {
    color: #777;
    cursor: not-allowed;
    background-color: #fff;
    border-color: #ddd
}
.pagination-lg>li>a,
.pagination-lg>li>span {
    padding: 10px 16px;
    font-size: 18px;
    line-height: 1.3333333
}
.pagination-lg>li:first-child>a,
.pagination-lg>li:first-child>span {
    border-top-left-radius: 6px;
    border-bottom-left-radius: 6px
}
.pagination-lg>li:last-child>a,
.pagination-lg>li:last-child>span {
    border-top-right-radius: 6px;
    border-bottom-right-radius: 6px
}
.pagination-sm>li>a,
.pagination-sm>li>span {
    padding: 5px 10px;
    font-size: 12px;
    line-height: 1.5
}
.pagination-sm>li:first-child>a,
.pagination-sm>li:first-child>span {
    border-top-left-radius: 3px;
    border-bottom-left-radius: 3px
}
.pagination-sm>li:last-child>a,
.pagination-sm>li:last-child>span {
    border-top-right-radius: 3px;
    border-bottom-right-radius: 3px
}
</style>

Leave a Reply

Your email address will not be published. Required fields are marked *