codeigniter:分页逻辑,每页显示2个列表

时间:2017-06-09 06:40:50

标签: php codeigniter pagination

我在我的控制器中有一个分页页面,我有点困惑在我的视图中每页列出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'] = '&nbsp;<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('&nbsp;',$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");
}

1 个答案:

答案 0 :(得分:2)

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