Why are pagination links not working for me in Cod

2019-03-06 16:37发布

问题:

I'm trying to use codeigniter pagination for my products so there are multiple pages which products but its not working for me and I don't know why..

This is my pagination function in my controller:

//code om in allecadeaus te bepalen hoeveel producten er per pagina zitten
   public function pagination() {
        //load pagination library
        $this->load->library('pagination');
        //laad Products_model voor pagination
        $this->load->model('Pagination_model');
        $this->load->model('Product_model');

        $config = array();
        $config["base_url"] = base_url() . "AlleCadeausController/pagination";
        $config["total_rows"] = $this->products->record_count();
        $config["per_page"] = 24;
        $config['cur_tag_open'] = '<a><b class="text-success">';
        $config['cur_tag_close'] = '</b></a>';
        $config["uri_segment"] = 3;
        $config['use_page_numbers'] =True;
        $config['enable_query_strings'];

        $this->pagination->initialize($config);

        $page = ($this->uri->segment(3)) ? $this->uri->segment(3) : 0;
        $data['title'] = "Products";
        $data['products'] = $this->Product_model->selectProducts();
        $data["links"] = $this->pagination->create_links();

        $this->load->view("allecadeaus", $data);
    }

with this line I'm getting all the products from product table:

$data['products'] = $this->Product_model->selectProducts();

My pagination model:

<?php
class Pagination_model extends CI_Model
{

    public function __construct() {
        parent::__construct();
    }

    public function record_count() {
        return $this->db->count_all("products");
    }

     public function fetch_products($limit, $start) {
        $this->db->limit($limit, $start);
        $query = $this->db->get_where('users',array('Is_Hidden'=>0));

        if ($query->num_rows() > 0) {
            foreach ($query->result() as $row) {
                $data[] = $row;
            }
            return $data;
        }
        return false;
    }

?>

On my all products page I now tried to echo links but it doesn't work. I don't see the correct links and its just 1 link that leads to something else. This is the code in my view on the all products page:

<div class="text-center"><nav aria-label="Page navigation">
                                            <ul class="pagination">

                                                <li><?php echo $links; ?></li>

                                            </ul>
                                        </nav></div>

What am I doing wrong?

回答1:

Please make some changes as follows:

Controller:

public function pagination($row = 0) {
     //load pagination library
        $this->load->library('pagination');
        //laad Products_model voor pagination
        $this->load->model('Pagination_model');
        $this->load->model('Product_model');
        $config = array();
        $limit = '24';      
        $config['base_url'] = site_url() . '/AlleCadeausController/pagination';
        $config['full_tag_open'] = "<ul class='pagination'>";
        $config['full_tag_close'] = '</ul>';
        $config['num_tag_open'] = '<li>';
        $config['num_tag_close'] = '</li>';
        $config['cur_tag_open'] = '<li class="active"><a href="#">';
        $config['cur_tag_close'] = '</a></li>';
        $config['prev_tag_open'] = '<li>';
        $config['prev_tag_close'] = '</li>';
        $config['first_tag_open'] = '<li>';
        $config['first_tag_close'] = '</li>';
        $config['last_tag_open'] = '<li>';
        $config['last_tag_close'] = '</li>';
        $config['prev_link'] = '<i class="fa fa-long-arrow-left"></i>Previous Page';
        $config['prev_tag_open'] = '<li>';
        $config['prev_tag_close'] = '</li>';
        $config['next_link'] = 'Next Page<i class="fa fa-long-arrow-right"></i>';
        $config['next_tag_open'] = '<li>';
        $config['next_tag_close'] = '</li>';     
        $config["total_rows"] = $this->Product_model->record_count();            
        $config['per_page'] = $limit;
        $this->pagination->initialize($config);  
        $data['links'] = $this->pagination->create_links();
        $data['products'] = $this->Product_model->selectProducts($row,$limit);
        $this->load->view("allecadeaus", $data);
    }

Model:

function selectProducts($row,$limit)
        {   
            $query = $this->db->get('Your_table_name',$limit,$row);

            if ($query->num_rows() > 0){
              return $query->result_array();
            }
             else {
              return array();
            }

        }

function record_count(){        
        $this->db->from('Your_table_name');         
        $query = $this->db->get();
        $row = $query->num_rows();
        return $row;
    }

This will help you..thanks!



回答2:

You have a mix of code, pagination and not pagination results.

Add,

$config["num_links"] = 5; //Number of links in pagination

After initilize Codeigniter pagination library. You have to execute a pagination query in your database, for example:

$where = "IF you have got";
$orderby "IF you have got";

$data['products'] = $this->Pagination_model->select_products($config["per_page"], $this->uri->segment(3), $where, $orderby);

Then in your model Pagination_model, you should have got this:

public function select_products($per_page, $segment, $where, $orderby)
{
    if (!isset($segment)) $segment = 1;

    $init= ($segment - 1) *  $per_page;

    $sql = "SELECT *
              FROM Your_table
              $where 
              ORDER BY $orderby
              OFFSET $init ROWS
              FETCH NEXT $per_page ROWS ONLY";

    $query= $this->db->query($sql);
    return $query->result_array();
  }

Be sure you are right point to this->uri->segment() is 3. I think you dont have pagination links because you dont have results in your query.