Hello I have the following code,
$this->load->library('pagination');
$this->data['products'] = $this->products_model->get_products_and_category($this->uri->segment(4));
$config['base_url'] = base_url()."admin/products/manage/";
$config['total_rows'] = $this->db->get('products')->num_rows();
$config['per_page'] = 20;
$config['full_tag_open'] = '<div class="btn-group">';
$config['full_tag_close'] = '</div>';
$config['anchor_class'] = 'class="btn" ';
$config['cur_tag_open'] = '<div class="btn">';
$config['cur_tag_close'] = '</div>';
$config['uri_segment'] = 4;
$this->pagination->initialize($config);
$this->data['pagination'] = $this->pagination->create_links();
$this->template->build('admin/products/index', $this->data);
The query this is being run by get_products_and_category($this->uri->segment(4))
looks like this,
public function get_products_and_category($offset=0) {
$this->db->select('products.product_id, products.product_title, products.product_created, products.parent_category, categories.category_id, categories.category_title')
->from('products')
->join('categories' , 'products.parent_category = categories.category_id', 'left')
->order_by('products.product_title', 'ASC')
->limit(25, $offset);
$query = $this->db->get();
return $query->result_array();
}
There are 25 results in my table, and I want to show 20 per page, so by my maths the pagination class should create 2 links (page 1 and page 2) the first page should 20 results on it, and the second should have 4 results, however I am not getting any links at all, am I doing some wrong?
The LIMIT clause can be used to constrain the number of rows returned by the SELECT statement.
Now you have 25 results and you limit your query to return 25 results so your pagination might not work correctly.
Try passing the $config[per_page] in the query
$this->data['products'] = $this->products_model->get_products_and_category($config['per_page'],$this->uri->segment(4));
And then in the query (notice we pass the per_page variable to the limit())
public function get_products_and_category($num, $offset=0) {
$this->db->select('products.product_id, products.product_title, products.product_created, products.parent_category, categories.category_id, categories.category_title')
->from('products')
->join('categories' , 'products.parent_category = categories.category_id', 'left')
->order_by('products.product_title', 'ASC')
->limit($num, $offset); // Here we pass the per_page var
$query = $this->db->get();
return $query->result_array();
}
Hope this helps
Altrim answer is very good. But to stay conform to CodeIgniter, I recommend using this instead :
public function get_products_and_category($offset=0) {
$this->db->select('products.product_id, products.product_title, products.product_created, products.parent_category, categories.category_id, categories.category_title')
->from('products')
->join('categories' , 'products.parent_category = categories.category_id', 'left')
->order_by('products.product_title', 'ASC')
->limit($this->per_page, $offset); // Here we pass the per_page var
$query = $this->db->get();
return $query->result_array();
}
You already define per_page in $config['per_page'] = 20;
Since $this->pagination->initialize($config);
transform $key (per_page) => $value (20)
in $this->$key = $value
in initialize
function.