0

在 CI 的分页中,数据索引应该跟随偏移量。例如:如果限制是 10,那么第二个索引应该有 10 个偏移量,这意味着索引将从 11 开始到 20。

我遵循了一些教程,但我仍然无法让这个偏移量正常工作。每次单击不同的分页索引时,我的索引总是重置为 1 。

这是我的分页代码,请注意我试图回显$offset并且值为(在第二个索引 = 10,在第三个索引 = 20,有$limit= 10)所以我不知道为什么它不工作

public function index($offset = 0) {
        //check authorization
        if(!isset($_SESSION['username']))
            redirect('backend_umat/login');

            // the $offset value is true, but the index is still reseted to 1   
        echo $offset;
        $limit = 10;
        $result = $this->umat_m->get_umat($limit, $offset);

        //pagination
        $config['base_url'] = site_url('/backend_umat/index');
        $config['total_rows'] = $result['num_rows'];
        $config['per_page'] = $limit; 
        $config['uri_segment'] = 3;
        $config['full_tag_open'] = '<div id="pagination">';
        $config['full_tag_close'] = '</div>';

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

        $data['pagination'] = $this->pagination->create_links();

这是我的模型:

public function get_umat($limit, $offset) {
        $this->db->select('*')->from('msumat')->limit($limit, $offset)->
        join('mskelas', 'msumat.kelas_id = mskelas.kelas_id');

$q = $this->db->get();
            $result['rows'] = $q->result();

            $result['num_rows'] = $this->db->select('*')->from('msumat')->
                                  join('mskelas', 'msumat.kelas_id = mskelas.kelas_id')
                                  ->get()->num_rows();

return $result;

感谢您的帮助:D

4

3 回答 3

1
    public function index() {
        //check authorization
        if(!isset($_SESSION['username']))
            redirect('backend_umat/login');

        // the $offset value is true, but the index is still reseted to 1   


    //pagination
    $config['base_url'] = base_url().'backend_umat/index';
    // basically you need a separate query to return only numrows
    $config['total_rows'] = ?;
    $config['per_page'] = 10; 
    $config['uri_segment'] = 3;
    $config['full_tag_open'] = '<div id="pagination">';
    $config['full_tag_close'] = '</div>';

    $this->pagination->initialize($config); 
    $offset = ($this->uri->segment(3)) ? $this->uri->segment(3) : 0;

    $result = $this->umat_m->get_umat( $config['per_page'], $offset);

    $data['pagination'] = $this->pagination->create_links();

在这里试试这个,我改变了一些代码希望这有效。基本上,在从模型中调用任何内容之前,我首先初始化了分页配置。只需执行单独的查询即可获取 numrows。

于 2013-05-04T16:22:06.940 回答
1

控制器 site.com/<controller>/index/<page>

public function index($offset = 0) {
    //check authorization
    if(!isset($_SESSION['username']))
        redirect('backend_umat/login');

    $limit   = 10;
    $offset = (int) $offset;
    $result  = $this->umat_m->get_umat($limit, $offset);

    //pagination
    $config['base_url']       = site_url('/backend_umat/index');
    $config['total_rows']     = $result['num_rows'];
    $config['per_page']       = $limit; 
    $config['uri_segment']    = 3;
    $config['full_tag_open']  = '<div id="pagination">';
    $config['full_tag_close'] = '</div>';

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

    $data['pagination'] = $this->pagination->create_links();

模型

public function get_umat($limit, $offset) {
    $result['rows'] = $this->db
        ->select('SQL_CALC_FOUND_ROWS, msumat.*, mskelas.*', FALSE)
        ->limit($limit, $offset == 1 ? 0 : $offset)
        ->join('mskelas', 'msumat.kelas_id = mskelas.kelas_id')
        ->get('msumat')
        ->result();

    $req = $this->db->query('SELECT FOUND_ROWS()')->row_array(); 
    $result['num_rows'] = $req['FOUND_ROWS()']; 

    return $result;
}

为了不必重写第二个 sql req,SQL_CALC_FOUND_ROWS如果请求不包含 LIMIT 语句,您可以使用它来检索总数。但这可能比两个请求慢。

我将FALSE其用作第二个参数,select()以便 CI 不会尝试使用反引号保护字段或表名。

->select('*'): 如果你想要所有字段是没用的,如果没有调用 select 方法,CI 默认会这样做。

->get()->num_rows(): 改用->count_all_results([table])

于 2013-05-04T17:48:18.630 回答
0

首先,感谢 tomexsans 和 lighta 的帮助。抱歉,我犯了一个“愚蠢”的错误——花了大约 2-3 个小时才意识到——索引没有遵循 $offset,因为我忘记使用该变量。我使用一个整数,每次页面加载时我都会重置为 1,因此索引将永远重置为 1:P

于 2013-05-06T03:24:44.000 回答