【问题标题】:codeigniter pagination - results remain same on every pagecodeigniter 分页 - 结果在每一页上保持不变
【发布时间】:2012-09-07 03:12:43
【问题描述】:

我正在使用 Codeigniter 分页,但遇到了问题。

点击时网址会发生变化,例如限制更新displayAllUsers/10 到 displayAllUsers/15,但结果保持不变。

这是我的控制器:

 public function displayAllUsers()
    {

        $this->load->model('backOfficeUsersModel');
        $data['loggedUser'] = $this->backOfficeUsersModel->get_by('username', $this->session->userdata('username'), FALSE,TRUE);

        $this->db->order_by('userid');
        $limit = 5;     // this works, I have 5 records displayed on the page
        $offset = 3;
        $this->db->limit($limit);
        $this->db->offset($offset);
        $data['users'] = $this->backOfficeUsersModel->get();

        // line bellow, prints correct result, 17 records total in database;
        $totalresults = $this->db->get('back_office_users')->num_rows();


        $this->load->library('pagination');
        $config['base_url'] = site_url('/backOfficeUsers/displayAllUsers');
        $config['total_rows'] = $totalresults;
        $config['per_page'] = 5;
        $config['uri_segment'] = 3;
        $this->pagination->initialize($config); 
        $data['main_content'] = 'users';
        $data['title'] = 'Back Office Users';
        $errorMessage = FALSE;
        $this->load->vars($data,$errorMessage);
        $this->load->view('backOffice/template');

    } // end of function displayAllUsers

任何人都可以发现我做错了什么?

【问题讨论】:

    标签: codeigniter pagination


    【解决方案1】:

    尝试像这样进行偏移,

    $offset = $this->uri->segment(3);
    $this->db->limit(5, $offset);
    

    这样当您访问您的用户时,您就从正确的偏移量开始。

    假设您的表中有 20 个用户。当您第一次登陆页面时,您的 $offset 变量将为空,因为您的链接中没有尾随数字(在 $this->uri->segment(3) 处)。因此,当您在数据库中查询 5 个用户时,您从 0 开始,因为 $offset 变量为空。在这种情况下,您的代码将是:

    $this->db->limit(5, 0).
    

    从第 0 条记录开始获取 5 条记录。

    但是,当您使用分页链接时,您设置的 per_page 变量会在您的网址末尾添加一个数字并重新加载页面。发生这种情况时,您的 $offset 变量会得到一个数字,在这种情况下,它每次都会增加 5。 现在在这种情况下,您的代码将是

    $this->db->limit(5,5)
    

    意思是从第 5 条记录开始获取 5 条记录。

    【讨论】:

    • 成功了,但我不知道为什么我的代码不起作用。你介意详细说明一下吗??
    【解决方案2】:

    没有调用 $this->pagination->create_links() 来生成要放在页面上的 html。

    例如,

    ...
    $this->load->vars($data,$errorMessage);
    $data['page_nav'] = $this->pagination->create_links();
    $this->load->view('page_body', $data);
    

    如果它使用$page_nav 来添加分页项,这将适用于表单:

    在`views/page_body.php:

    ... (various html markup)
    <div class="pagination">
     <?php echo $page_nav; ?>
    </div>
    

    【讨论】:

    • 我认为。我也应该把它放在这里吗?
    猜你喜欢
    • 1970-01-01
    • 2012-05-02
    • 1970-01-01
    • 2015-04-24
    • 1970-01-01
    • 2017-01-27
    • 2014-04-10
    • 2014-03-26
    • 2014-09-21
    相关资源
    最近更新 更多