[英]codeigniter: Pagination logic to show 2 lists per page
我的控制器中有一個分頁頁面,我對視圖中每頁列出2個數據感到困惑。 我正在使用的控制器代碼如下:
public function newsletter()
{
$this->load->library('pagination');
$config = array();
$config["base_url"] = base_url() . "index.php/welcome/newsletter";
$this->load->model('newsletter_model');
$total_row = $this->newsletter_model->record_count();
$config["total_rows"] = $total_row;
$config["per_page"] = 2; // per page 2 records
$config['use_page_numbers'] = TRUE;
$config['num_links'] = $total_row;
$config['cur_tag_open'] = ' <a class="current">';
$config['cur_tag_close'] = '</a>';
$config['page_query_string'] = FALSE;
$config['next_link'] = 'Next';
$config['prev_link'] = 'Previous';
$this->pagination->initialize($config);
if($this->uri->segment(3)){
$page = ($this->uri->segment(3)) ;
}
else{
$page = 1;
}
$this->load->model('newsletter_model');
$data["results"] = $this->newsletter_model->fetch_data($config["per_page"], $page);
$str_links = $this->pagination->create_links();
$data["links"] = explode(' ',$str_links );
$this->load->model('newsletter_model');
$this->load->view('newsletter/newsletter',$data);
}
有了上面的代碼,我每頁可以獲得2條記錄,但是我無法理解分頁背后的邏輯。 誰能解釋我在代碼codeigniter pagination
起作用的邏輯,因為我的工作本身對我來說很容易理解。
我的模型代碼如下:
public function fetch_data($limit, $id)
{
$this->db->select('*');
$this->db->from('ins_newsletter');
$this->db->order_by('nl_id', 'desc');
$this->db->limit($limit,$id);
$query = $this->db->get();
return $query->result_array();
}
public function record_count()
{
return $this->db->count_all("ins_newsletter");
}
CI的Paginator類僅為您生成分頁鏈接。
“記錄分頁”邏輯在這里發生:
$this->db->limit($limit, $offset);
$limit
是要獲取的記錄數 , $offset
是要返回的第一行的偏移量 。
要獲取前兩個記錄,我們將設置$limit
= 2, $offset
= 0
CI可轉換為SQL,例如:
SELECT ...... FROM ins_newsletter LIMIT 0, 2;
要獲取記錄編號3和4,我們將設置$limit
= 2, $offset
= 2
CI可轉換為SQL,例如:
SELECT ...... FROM ins_newsletter LIMIT 2, 2;
編輯:
您的代碼中有一個小錯誤。
第1頁的偏移量應為0,第2頁的偏移量應為2,第3頁的偏移量應為4,第4頁的偏移量應為6,第5頁的偏移量應為8 ...依此類推。
public function fetch_data($limit, $page)
{
$offset = ($page - 1) * $limit;
...
}
我建議您將第二個參數更改為$page
而不是$id
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.