【问题标题】:Codeigniter pagination do not work properlyCodeigniter 分页无法正常工作
【发布时间】:2017-11-27 08:12:18
【问题描述】:

我使用 codeigntier 3 分页库。

它有效,但不完全应该如何。

首先我将发布我的代码。

控制器设置

$config['base_url'] = base_url('items');
            $config['total_rows'] = $this->ItemsM->countAll();
            $config['per_page'] = 5;
            $config['use_page_numbers'] = TRUE;
            $config['nex_link'] = "Next";

            $limit = $config['per_page'];
            $offset = $this->uri->segment(2);

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


            $data = array(
                'musicians' => $this->ItemsM->allItems($limit, $offset),
                'pagination' => $this->pagination->create_links()
            );

            $this->load->view('public/header');
            $this->load->view('public/item-list', $data);
            $this->load->view("public/footer");

型号

类 ItemsM 扩展 CI_MODEL{

function allUsers($limit="", $offset ="")
{
    $query = $this->db->select('*')
                    ->from('items')
                    ->limit($limit)
                    ->offset($offset)
                    ->order_by('creation_date', 'desc')
                    ->get();

    return $query->result();
}

public function countAll(){
    return $this->db->count_all_results('items');
}

路线

$route['items/(:any)'] = 'items';

此分页有效,但我得到的结果不正确。

在第一页/标签上,它显示具有此订单的商品

第 1 项
第 2 项
第 3 项
第 4 项
第 5 项 // 好的

但是当打开第 2 页时

我通过这种方式得到接下来的 5 个结果

项目 3
项目 4
项目 5
项目 6
第七条

老实说,我不明白问题出在哪里,有人知道,请帮忙。谢谢。

【问题讨论】:

  • 看来问题出在您的 sql 查询上。当您单击第 2 页或下一页时,您将获得偏移量 2 的结果。意味着您将 $offset 作为页码传递。在 id 2 或跳过 2 个结果之后显示结果。对吧?
  • 更像是在第 2 页上重复第 1 页的 3 个结果
  • 是的,在第 2 页中,它从 item3 开始,因为它跳过了前 2 个结果。
  • 试试我刚刚发布的答案的代码,希望它能完美运行。如果您遇到问题,请告诉我

标签: php codeigniter pagination


【解决方案1】:

您的问题似乎与变量 $offset 有关,因为您将 $offset 作为您的页码传递,例如。如果您的页码为 2,那么它将跳过 2 个结果,但您需要跳过 5 个结果。要解决此问题,请用您的控制器设置替换此代码。

$config['base_url'] = base_url('items');
        $config['total_rows'] = $this->ItemsM->countAll();
        $config['per_page'] = 5;
        $config['use_page_numbers'] = TRUE;
        $config['nex_link'] = "Next";

        $limit = $config['per_page'];

        $page = $this->uri->segment(2);

        if($page > 1){
           $offset = ($page-1) * $limit;
        }else{
           $offset = $page;
           // Or you can set $offset = 0;
        }

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


        $data = array(
            'musicians' => $this->ItemsM->allItems($limit, $offset),
            'pagination' => $this->pagination->create_links()
        );

        $this->load->view('public/header');
        $this->load->view('public/item-list', $data);
        $this->load->view("public/footer");

在这里我编辑了你的变量$offset。现在您将获得预期的结果。

【讨论】:

  • 嗯,我试过了,它在第 2、3 页等上运行良好...但在第 1 页出现类似这样的 sql 语法错误 SELECT * FROM items LIMIT -5, 5...
  • 哦,因为需要使用if语句,等一下..我会更新答案
  • 欢迎兄弟,随时
  • 完美。干得好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-11
  • 1970-01-01
  • 2014-02-01
相关资源
最近更新 更多