how to link the pages using codeigniter pagination? - codeigniter

how to link the pages using codeigniter pagination?
the problem is with the variable $start its supposed to pass the start value to the database limit query . but its not.
Model
public function fetch_countries($limit,$start) {
$this->db->limit($limit, $start);
//$query ="SELECT * FROM mail_to Order By id Desc LIMIT ".$limit.",".$start;
$query = $this->db->get("mail_to");
//$qry=$this->db->query($query);
var_dump($query->result_array());
if($query->num_rows()>0){
return $query->result_array();
}
else
{
return false;
}
}
Controller
public function example1() {
$config = array();
$config["base_url"] = base_url() . "index.php/admin/user/example1";
$config["total_rows"] = $this->mdl_user->record_count();
$config["per_page"] = 5;
$config["uri_segment"] = 3;
$this->pagination->initialize($config);
$page = ($this->uri->segment(3)) ? $this->uri->segment(3) : 0;
//var_dump($config['per_page']);
$data["results"] = $this->mdl_user->fetch_countries($config["per_page"],$page);
//var_dump($data['results']);
$data["links"] = $this->pagination->create_links();
$this->load->view("example1", $data);
}

URI Segment should be
$config["uri_segment"] = 4;
$page = ($this->uri->segment(4)) ? $this->uri->segment(4) : 0;
In Model
public function fetch_countries($limit, $page)
{
$query = $this->db->query("SELECT * FROM mail_to LIMIT $page, $limit");
$result = $query->result_array();
return $result;
}
In Controller
public function example1() {
$config["base_url"] = base_url() . "index.php/admin/user/example1";
$config["total_rows"] = $this->mdl_user->record_count();
$config["per_page"] = 5;
$config['uri_segment'] = 4;
$limit = $config['per_page'];
$this->pagination->initialize($config);
$page = ($this->uri->segment(4)) ? $this->uri->segment(4) : 0;
$data["results"] = $this->mdl_user->fetch_countries($page $limit);
$data["links"] = $this->pagination->create_links();
$this->load->view("example1", $data);
}

Related

Change pagination url to domain/product?page=x in Codigniter

For my Codeigniter project I have below pagination code:
$this->load->library('pagination');
$config['base_url'] = base_url().'/joblist';
$config['total_rows'] = $this->joblist_model->joblist_count();
$config['per_page'] = 2;
$config['use_page_numbers'] = TRUE;
$config["uri_segment"] = 2;
$page = ($this->uri->segment(2)) ? $this->uri->segment(2) : 0;
$data['title'] = 'Job list in Cambodia';
$data['rows'] = $this->joblist_model->joblist($config["per_page"], $page);
$this->pagination->initialize($config);
$data['pagination'] = $this->pagination->create_links();
Question: How do I change the url from domain/joblist/page/xx to domain/joblist?page=xx ?
Yes, you can enable the query string in pagination.
$this->load->library('pagination');
$config['base_url'] = base_url().'/joblist';
$config['total_rows'] = 4;
$config['per_page'] = 2;
$config['use_page_numbers'] = TRUE;
$config["uri_segment"] = 2;
$config['page_query_string']=TRUE;
$config['query_string_segment'] = 'page';
$page = ($this->uri->segment(2)) ? $this->uri->segment(2) : 0;
$this->pagination->initialize($config);
$this->pagination->create_links());
Here is an example using $this->input->get(); and page_query_string set to true
You may need to set some routes on config/routes.php
https://www.codeigniter.com/user_guide/general/routing.html#examples
$route['product'] = 'joblist/index';
controller example
class Joblist extends CI_Controller {
public function index() {
$this->load->library('pagination');
$config['base_url'] = base_url('product');
$config['total_rows'] = $this->db->count_all_results('jobs');
$config['per_page'] = 2;
$config['page_query_string'] = TRUE;
$config['query_string_segment'] = 'page';
// Use the input->get();
$page = ($this->input->get('page')) ? $this->input->get('page') : 0;
$this->pagination->initialize($config);
$data['rows'] = $this->fetch_jobs($config['per_page'], $page);
$data['links'] = $this->pagination->create_links());
$this->load->view('example', $data);
}
public function fetch_jobs($limit, $start) {
$this->db->limit($limit, $start);
$query = $this->db->get("jobs");
if ($query->num_rows() > 0) {
foreach ($query->result() as $row) {
$data[] = $row;
}
return $data;
}
return false;
}
}

pagination not working in codeigniter

my controller page
public function index() {
$data['error']="";
$data['h']="";
$this->load->library('pagination');
$config['base_url'] = base_url().'Imagec/index';
$config['total_rows'] = 10;
$config['per_page'] = 2;
$config["uri_segment"] = 4;
$this->pagination->initialize($config);
$page = ($this->uri->segment(4)) ? $this->uri->segment(4) : 0;
$data['h']=$this->Inserts_model->select($config["per_page"], $page);
$data["links"] = $this->pagination->create_links();
$this->load->view('select_view', $data);
}
my mode page
public function select($limit, $start)
{
$this->db->limit($limit, $start);
$query = $this->db->get('student');
return $query->result();
}
my view page
<p><?php echo $links; ?></p>
here all my code here when click on links the NOT FOUND error occur's
Try this 100% will work
Controller :
public function index() {
$data['error'] = "";
$data['h'] = "";
$this->load->library('pagination');
$data['h'] = $this->inserts_model->select();
$config['base_url'] = base_url() . '/index.php/imagec/index';
$config['total_rows'] = count($data['h']);//it will give you total no of records
$config['per_page'] = 2;
$config["uri_segment"] = 3;
$this->pagination->initialize($config);
$page = ($this->uri->segment(3)) ? $this->uri->segment(3) : 0;
$data['h'] = $this->inserts_model->select($config["per_page"], $page);
$data["links"] = $this->pagination->create_links();
// echo "<pre>";print_r($data);die;
$this->load->view('select_view', $data);
}
Model :
public function select($limit=0, $start=0) {
if (empty($start) && !empty($limit)) {
$this->db->limit($limit);
}
if (!empty($start) && !empty($limit)) {
$this->db->limit($limit, $start);
}
$query = $this->db->get('student');
return $query->result();
}

Can't display all item if order by field nama

I have model code function in Codeigniter like below, if me sort order by RAND() can display all item but if order by field name like part_no can't display all item, in next page same display with page 1.
Model
function listProductPerCategory($id, $limit, $start){
$this->db->select('
category.id, category.category, product.id, product.id_category,
product.name, product.picture, product.description, product.permalink, product.part_no
');
$this->db->join('category', 'product.id_category = category.id');
$this->db->where('product.id_category', $id);
$this->db->order_by('product.part_no');
$this->db->limit($limit, $start);
$query = $this->db->get($this->tableProduct);
return $query->result();
}
Controller
function listcategory($page = NULL) {
$id = $this->input->get('list');
$data['categoryHead'] = $this->M_home->listCategory();
$this->load->view('frontend/template/header', $data);
$data['productsLast'] = $this->M_home->listProductLast();
$data['productsLast2'] = $this->M_home->listProductLast2();
$data['category'] = $this->M_home->listCategory();
//paging
$config['base_url'] = base_url('categoryproduct'.'?'.http_build_query($_GET));
$config['total_rows'] = $this->M_home->listProductPerCategory_num_rows($id);
$config['per_page'] = $per_page = 12;
$config['uri_segment'] = 2;
$config['first_link'] = 'First';
$config['last_link'] = 'Last';
$config['next_link'] = 'Next';
$config['prev_link'] = 'Prev';
$config['page_query_string'] = TRUE;
//end paging
$this->pagination->initialize($config);
$data['paging'] = $this->pagination->create_links();
$page = ($this->uri->segment(2)) ? $this->uri->segment(2) : 0;
$data['listCategory'] = $this->M_home->listProductPerCategory($id, $per_page, $page);
$this->load->view('frontend/category', $data);
$this->load->view('frontend/template/footer');
}
You have understand that
In SQL LIMIT, start is starting number of record not PAGE.
But from what you passing to listProductPerCategory is page number
So from page 1 to page 2 it is only one record move on next page not 12 records.
So you need to fix in function listProductPerCategory (dont forget to change variable name which may you confuse yourself , change $start -> $page)
So you should get this as below
function listProductPerCategory($id, $limit, $page){
if($page < 1){
$page = 1;
}
if($page > 1){
$start = $limit * $page;
}else{
$start = 0;
}
$this->db->select('
category.id, category.category, product.id, product.id_category,
product.name, product.picture, product.description, product.permalink, product.part_no
');
$this->db->join('category', 'product.id_category = category.id');
$this->db->where('product.id_category', $id);
$this->db->order_by('product.part_no');
$this->db->limit($limit, $start);
$query = $this->db->get($this->tableProduct);
return $query->result();
}
Controller -
Try this -
function listcategory($page = 0){
$id = $this->input->get('list');
$data['categoryHead'] = $this->M_home->listCategory();
$this->load->view('frontend/template/header', $data);
$data['productsLast'] = $this->M_home->listProductLast();
$data['productsLast2'] = $this->M_home->listProductLast2();
$data['category'] = $this->M_home->listCategory();
//paging
$config['base_url'] = base_url('categoryproduct'.'?'.http_build_query($_GET));
$config['total_rows'] = $this->M_home->listProductPerCategory_num_rows($id);
$config['per_page'] = $per_page = 12;
$config['num_links'] = 2;
$config['uri_segment'] = 3;
$config['first_link'] = 'First';
$config['last_link'] = 'Last';
$config['next_link'] = 'Next';
$config['prev_link'] = 'Prev';
$config['page_query_string'] = TRUE;
//end paging
$this->pagination->initialize($config);
$data['paging'] = $this->pagination->create_links();
$data['page'] = $page;
// $page = ($this->uri->segment(2)) ? $this->uri->segment(2) : 0;
$data['listCategory'] = $this->M_home->listProductPerCategory($id, $per_page, $page);
$this->load->view('frontend/category', $data);
$this->load->view('frontend/template/footer');
Order by condition is wrong in your model.
Try this -
$this->order_by('title','ASC or DESC or RANDOM');

code igniter pagination for displaying specific data from database?

I want to display some specific data from database through pagination using CI.but pagination by default passess parameter in function which creates problem for me.
Here is my Controller
function page($catagoryid){
$this->load->library('pagination');
$config['base_url'] = base_url().'index.php/pagination/page/';
$count = $this->db->query("select * from tbl_products where category_id='$categoryid'");
$total=$count->num_rows();
$per_page = 4;
$config['total_rows'] = $total;
$config['per_page'] = $per_page;
$this->pagination->initialize($config);
$data['pagination'] = $this->pagination->create_links();
$this->load->model("mpagination");
$data['list'] = $this->mpagination->get_s(,$categoryid,$config['per_page'],$this->uri->segment(3));
if ($data['list']!== null){
$this->load->view('pagination_view', $data);
}
else {
$this->load->view('noresult');
}
}
Here is my Model
function get_s($categoryid,$num, $offset) {
$this->db->select ('*');
->where('category_id',$categoryid); // field name
$sql = $this->db->get('tbl_products',$num, $offset); // table name
if ($sql->num_rows () >0) {
return $sql->result();
}
else {
return null;
}
}
Here is my view
<?php
foreach($list as $row):?>
<?php echo $row->_prduct_id." ".$row->name." ".$row->description;?>
<br/>
<?php endforeach;?>
<br/>
<?php echo $pagination; ?>
This code work at first but when i clicked on second link of pagination it will not work because by default pagination sends its value to url as parameter and doesnot show data.
what can i do?
I didn't understand your code properly but this is the way you need to do pagination.
public function page($category_id)
{
$result = $this->model_file->model_function($category_id);
$start_index = 0;
$total_rows = count($result);
$items_per_page = 10;
$filtered = array_splice($result,$start_index,$items_per_page);
$model['data'] = $filtered;
$model['page_link'] = create_page_links (base_url()."/controller_file_name/page", $items_per_page, $total_rows);
$this->load->view('view_file_name_path',$model);
}
function create_page_links($base_url, $per_page, $total_rows) {
$CI = & get_instance();
$CI->load->library('pagination');
$config['base_url'] = $base_url;
$config['total_rows'] = $total_rows;
$config['per_page'] = $per_page;
$CI->pagination->initialize($config);
return $CI->pagination->create_links();
}
Try like this
public function index($offset = 0)
{
$language_id = 1;
$this->load->library('pagination');
$limit = 10;
$total = $this->legend_model->get_legend_count($language_id);
$config['base_url'] = base_url().'legend/index/';
$config['total_rows'] = $total;
$config['per_page'] = $limit;
$config['uri_segment'] = 3;
$config['first_link'] = '<< First';
$config['last_link'] = 'Last >>';
$config['next_link'] = 'Next ' . '>';
$config['prev_link'] = '<' . ' Previous';
$config['num_tag_open'] = '<span class="number">';
$config['num_tag_close'] = '</span>';
$config['cur_tag_open'] = '<span class="current"><a href="#">';
$config['cur_tag_close'] = '</a></span>';
$this->pagination->initialize($config);
$data['offset'] = $offset;
$data['legends'] = $this->legend_model->get_legend($language_id, $limit, $offset);
$this->template->write('title', 'Legend : Manage Legend');
$this->template->write_view('content', 'legend/index', $data);
$this->template->render();
}

issue with pagination and limit

I have 3 tables site_settings,sermons & Preachers. In site_settings table, set the max number of preachers to be displayed. Preacher table contains all the preacher details and sermons table contains sermons of all preachers. Am using pagination for displaying preachers(2/page). if the value of site_settings table is 1 or 2 then no of preachers will display 2, if 3 or 4 then preachers 4... I don't know what is happening. Is it a problem with pagination or limit? I am using the following code for this ( In Model)
Method in Model
function viewAll($offset=0, $limit=null) {
$this->db->select('settings_value');
$this->db->from('site_settings');
$this->db->where('settings_name', 'preachercount');
$count = $this->db->get()->row();
echo $count->settings_value;
$preacher = array();
$this->db->select('preacher.preacher_id,preacher.first_name,preacher.last_name,preacher.preacher_image,preacher.preacher_logo,preacher.preacher_bio_brief');
$this->db->distinct('preacher.preacher_id');
$this->db->from('preacher');
$this->db->join('sermons', 'sermons.preacher_id=preacher.preacher_id');
$this->db->order_by('preacher.sort_order');
$this->db->limit($count->settings_value);
$query = $this->db->get('', $limit, $offset);
if ($query->num_rows() > 0) {
foreach ($query->result() as $row) {
$preacher[$row->preacher_id]['preacher_id'] = $row->preacher_id;
$preacher[$row->preacher_id]['preacher_name'] = $row->first_name . ' ' . $row->last_name;
$preacher[$row->preacher_id]['preacher_image'] = $row->preacher_image;
$preacher[$row->preacher_id]['preacher_logo'] = $row->preacher_logo;
$preacher[$row->preacher_id]['preacher_bio_brief'] = $row->preacher_bio_brief;
$this->db->select('*');
$this->db->from('sermons');
$this->db->where('preacher_id', $row->preacher_id);
$this->db->order_by('sort_order ');
$sermon_array = array();
$query = $this->db->get();
if ($query->num_rows() > 0) {
foreach ($query->result() as $row1) {
$sermon_array[$row1->sermon_id] ['sermon_image'] = $row1->sermon_image;
$sermon_array[$row1->sermon_id] ['sermon_title'] = $row1->sermon_title;
$sermon_array[$row1->sermon_id] ['audio_file'] = $row1->audio_file;
$sermon_array[$row1->sermon_id] ['sermon_description'] = $row1->sermon_description;
}
}
$preacher[$row->preacher_id]['sermon'] = $sermon_array;
}
return $preacher;
}
return false;
}
Method in controller
function list() {
$paginate_segment = $this->uri->segment(3) ? $this->uri->segment(3) : 0;
$winner_list = $this->sermon_model->viewAllpreachers(0, null);
$config['base_url'] = base_url() . 'sermons/index/';
$config['total_rows'] = ($winner_list) ? count($winner_list) : 0;
$config['per_page'] = 2;
$config['full_tag_open'] = '';
$config['full_tag_close'] = '';
$config['uri_segment'] = 3;
$config['num_links'] = 4;
$config['display_pages'] = TRUE;
$config['first_link'] = 'First';
$config['first_link'] = 'First';
$config['first_tag_open'] = '<div>';
$config['first_tag_close'] = '</div>';
$config['last_link'] = 'Last';
$config['next_link'] = 'Next';
$config['prev_link'] = 'Prev';
$config['cur_tag_close'] = ' | ';
$config['num_tag_close'] = ' | ';
//initialize pagination
$this->pagination->initialize($config);
$this->data['preachers'] = $this->sermon_model->viewAllpreachers($paginate_segment, $config['per_page']);
$this->data['links'] = $this->pagination->create_links();
$this->data['page'] = $this->config->item('APP_template_dir') . 'site/home/sermons_view';
$this->load->vars($this->data);
$this->load->view($this->_container);
}
As stated in the comments, you're using a limit twice and need to combine those methods:
function viewAll($offset=0, $limit=null) {
$this->db->select('settings_value');
$this->db->from('site_settings');
$this->db->where('settings_name', 'preachercount');
$count = $this->db->get()->row();
// now use value of [$count] if [$limit] is null - else use [$limit]
$limit = (is_null($limit)) ? $count : $limit ;
$preacher = array();
$this->db->select('...');
$this->db->distinct('preacher.preacher_id');
$this->db->from('preacher');
$this->db->join('sermons', 'sermons.preacher_id=preacher.preacher_id');
$this->db->order_by('preacher.sort_order');
// then remove the [limit()] call
// $this->db->limit($count->settings_value); <-- NOT NEEDED
$query = $this->db->get('', $limit, $offset);
This effectively allows you to pass a $limit to the method, or use the settings from the db.

Resources