Reezal AQ
Reezal AQ

Reputation: 117

How do I add pagination to codeigniter

Below is how the ci controller looks like. I'm just following tutorial from Youtube Channel. How do you add pagination so the page only load 20 results per page ?

<?php
class Product_details extends CI_Controller{

    function index(){
        $this->load->library('pagination');
        $this->load->model('product_model');
        $data['userArray'] = $this->product_model->return_products();
        $this->load->view('product_listing',$data);

    }
}

View

<table>
    <tr>
        <th>ID</th>
        <th>Product Name</th>
        <th>Product Price</th>
        <th>Product Image</th>
    </tr>
    <?php
        foreach ($userArray as $key => $value) {


            echo "<tr>
            <td>".$value['id']."</td>
            <td>".$value['post_id']."</td>
            <td>".$value['price']."</td>
            <td><img src=".$value['imageUrl']."/></td>
            </tr>";
             }
        ?>
</table>

Thank you

Upvotes: 0

Views: 213

Answers (2)

Akanksha Kushwaha
Akanksha Kushwaha

Reputation: 39

See the example how to add pagination.

Let's My controller is Dashboard.php and it's method is index. Now configure pagination.

public function index()
{
    $config['base_url'] = site_url('/dashboard/index/');
    $config['total_rows'] = $this->dashboard_model->num_rows();
    $config['per_page'] = 5;
    $config['use_page_numbers'] = FALSE; 
    $this->pagination->initialize($config);

    $data['data'] = $this->dashboard_model->all_blog($config['per_page'], $this->uri->segment(3));
    $this->load->view("/dashboard/blog", $data);
}

Model is Dashboard_model.php

public function all_blog($limit, $offset)
    {
      $this->db->from('blogs');
      $this->db->select('*');
      $this->db->order_by("created_at", "desc");
      $q = $this->db->get();
      $data = $q->result_array();
      return $data; 
    }

    public function num_rows()
    {
      $this->db->from('blogs');
      $this->db->select('*');
      $this->db->order_by("created_at", "desc");
      $this->db->limit($limit, $offset);
      $q = $this->db->get();
      $data = $q->num_rows();
      return $data; 
    }

Now it's my view blog.php

  <div class="table-responsive">
   <table class="footable table table-stripped toggle-arrow-tiny" data-page-size="8" data-filter=#filter; id="filter">
   <thead>
      <tr>
        <th></th>
        <th>S.No</th>
        <th>Title </th>
        <th>Blog Image</th>
        <th>Added For</th>
      </tr>
   </thead>
   <tbody>                             
      <?php 
      $count = $this->uri->segment(3, 0);
      foreach ($data as $key) : 
      ?>
      <tr>
        <td><input type="checkbox" class="i-checks" name="input[]"></td>
        <td><?php echo ++$count; ?></td>
        <td><?php echo $key['blog_title']; ?></td>
        <td><img src="<?php echo $key['blog_image']; ?>" style="width: 150px; height: 80px" /></td>
        <td><?php echo $key['user_type']; ?></td>
       </tr>
    <?php endforeach?>
    </tbody>                   
 </table>
 </div>
 <?php 
  echo $this->pagination->create_links();
 ?>

Upvotes: 0

Vijay Makwana
Vijay Makwana

Reputation: 921

you can pass page number in the model.

Controller

 <?php
    class Product_details extends CI_Controller{

    function index($pageNo){

        $this->load->model('product_model');
        $data['userArray'] = $this->product_model->return_products($pageNo);
        $this->load->view('product_listing',$data);

    }
}

Model

public function all($pageNo){

    $pageNo -= 1;
    $this->db->select("*")
             ->from('products')
             ->order_by('id',"ASC")
             ->limit(20, $pageNo * 20);
    $query = $this->db->get();
    return $query->result_array();

Upvotes: 1

Related Questions