Codeigniter 分页显示太多链接
Posted
技术标签:
【中文标题】Codeigniter 分页显示太多链接【英文标题】:Codeigniter Pagination Displaying Too Many Links 【发布时间】:2017-10-18 10:03:34 【问题描述】:使用 Codeigniter 3 和 php 我已经构建了一个 Web 应用程序来显示来自 mysql 数据库的结果。一切都按预期工作,分页成功允许用户导航页面,并在每页显示正确数量的结果。
我的问题是分页导航栏上的链接似乎总是太多。
例如,我将从我的数据库中返回 79 条记录,每页显示 10 条。那么,分页中应该只显示 8 个链接,对吧?相反,我可以看到 18 个链接。从 9 到 18 的链接将我带到一个空白页面。
我的控制器代码如下;
public function index()
$config['base_url'] = '/items/index';
$config['use_page_numbers'] = FALSE;
$config['reuse_query_string'] = TRUE;
$config['total_rows'] = $this->db->get('item')->num_rows();
$config['per_page'] = 10;
$config['num_links'] = 10;
$config['full_tag_open'] = '<div><ul class="pagination">';
$config['full_tag_close'] = '</ul></div><!--pagination-->';
$config['first_link'] = '« First';
$config['first_tag_open'] = '<li class="prev page">';
$config['first_tag_close'] = '</li>';
$config['last_link'] = 'Last »';
$config['last_tag_open'] = '<li class="next page">';
$config['last_tag_close'] = '</li>';
$config['next_link'] = 'Next →';
$config['next_tag_open'] = '<li class="next page">';
$config['next_tag_close'] = '</li>';
$config['prev_link'] = '← Previous';
$config['prev_tag_open'] = '<li class="prev page">';
$config['prev_tag_close'] = '</li>';
$config['cur_tag_open'] = '<li class="active"><a href="">';
$config['cur_tag_close'] = '</a></li>';
$config['num_tag_open'] = '<li class="page">';
$config['num_tag_close'] = '</li>';
$config['anchor_class'] = 'follow_link';
$this->load->library('pagination');
$this->pagination->initialize($config);
$data = array(
'items' => $this->items_model->itemList()
);
$this->load->view('item_list', $data);
下面是我的观点;
echo $this->pagination->create_links();
我的网址结构如下;
items/index // displays results 1-10
items/index/10 // displays results 11-20
items/index/20 // displays results 21-30
etc...
感谢任何帮助。 谢谢
【问题讨论】:
尝试设置$config['uri_segment'] = 3;
。
【参考方案1】:
这个问题是因为你需要为每个页面更改以下代码行;
$config['total_rows'] = // number of pages returned here from db
这需要存储您希望显示的页数。如果您在每个方法中设置分页配置,那么这应该很容易做到。在您的示例中,您正在这样做;
$config['total_rows'] = $this->db->get('item')->num_rows();
大概你在每个不正确的页面上都返回这个。
【讨论】:
这就是答案,你【参考方案2】:每当你要在 Codeigniter 中实现分页时,你需要记住两件事:
第一件事与页面生成相关的配置实际上是:
// Loads pagination library
$this->load->library('pagination');
// @params $url = your controller + method path
$config['base_url'] = base_url() . $url;
// @params $totalRows = Total result found in query
$config['total_rows'] = $totalRows;
// @params $perPage = In your case it is 50
$config['per_page'] = $perPage;
// @params $segment = This is what you are missing in your code. Segment is the factor from where system reads which page records need to be shown
$config['uri_segment'] = $segment;
$this->pagination->initialize($config);
第二件事与设计部分相关的分页配置:
$config['full_tag_open'] = '<ul class="pagination pagination-sm m-t-none m-b-none">';
$config['full_tag_close'] = '</ul>';
$config['prev_link'] = '<i class="fa fa-chevron-left"></i>';
$config['prev_tag_open'] = '<li>';
$config['prev_tag_close'] = '</li>';
$config['next_link'] = '<i class="fa fa-chevron-right"></i>';
$config['next_tag_open'] = '<li>';
$config['next_tag_close'] = '</li>';
$config['cur_tag_open'] = '<li class="active"><a href="#">';
$config['cur_tag_close'] = '</a></li>';
$config['num_tag_open'] = '<li>';
$config['num_tag_close'] = '</li>';
$config['first_tag_open'] = '<li>';
$config['first_tag_close'] = '</li>';
$config['last_tag_open'] = '<li>';
$config['last_tag_close'] = '</li>';
$config['first_link'] = '<i class="fa fa-chevron-left"></i> <i class="fa fa-chevron-left"></i>';
$config['last_link'] = '<i class="fa fa-chevron-right"></i><i class="fa fa-chevron-right"></i>';
$this->pagination->create_links();
这是我在项目中一直使用的运行脚本。工作正常。您需要检查您在初始化期间传递的 uri_segment。
如果您遇到任何问题,请告诉我。
【讨论】:
您的配置数组位于正确的位置,应该在初始化分页库之前定义它。这里的段是您的页码在传递的 URL 中的位置。 是的,没关系。检查 uri 段 抱歉,这不起作用。这是我的控制器当前的外观pastebin.com/PxNr7HUw。您可以看到我已将$segment
替换为 2
进行测试。【参考方案3】:
我有完全相同的问题:显示太多链接页面。当它应该只显示10页时,它显示了17页,最后7页为空。 我从另一个线程中遵循这个答案:https://***.com/a/21657962。所以我基本上复制并粘贴它以更改我以前的配置。
这是我之前导致错误的代码:
$config['full_tag_open'] = '<ul class="pagination">';
$config['full_tag_close'] = '</ul>';
$config['first_link'] = false;
$config['last_link'] = false;
$config['first_tag_open'] = '<li>';
$config['first_tag_close'] = '</li>';
$config['prev_link'] = '«';
$config['prev_tag_open'] = '<li class="prev">';
$config['prev_tag_close'] = '</li>';
$config['next_link'] = '»';
$config['next_tag_open'] = '<li>';
$config['next_tag_close'] = '</li>';
$config['last_tag_open'] = '<li>';
$config['last_tag_close'] = '</li>';
$config['cur_tag_open'] = '<li class="active"><a href="#">';
$config['cur_tag_close'] = '</a></li>';
$config['num_tag_open'] = '<li>';
$config['num_tag_close'] = '</li>';
删除所有内容并使用上述代码中的代码进行更改:
$config['full_tag_open'] = "<ul class='pagination'>";
$config['full_tag_close'] ="</ul>";
$config['num_tag_open'] = '<li>';
$config['num_tag_close'] = '</li>';
$config['cur_tag_open'] = "<li class='disabled'><li class='active'><a href='#'>";
$config['cur_tag_close'] = "<span class='sr-only'></span></a></li>";
$config['next_tag_open'] = "<li>";
$config['next_tagl_close'] = "</li>";
$config['prev_tag_open'] = "<li>";
$config['prev_tagl_close'] = "</li>";
$config['first_tag_open'] = "<li>";
$config['first_tagl_close'] = "</li>";
$config['last_tag_open'] = "<li>";
$config['last_tagl_close'] = "</li>";
然后我也碰巧遇到了另一个问题:结果是重复的,最后一页重复了其他数据以使每页有一整行。
我之前的代码:
$data['page'] = ($this->uri->segment(4)) ? $this->uri->segment(4) : 0;
我改成:
$data['page'] = ($this->uri->segment(4)) ? (($this->uri->segment(4) - 1) * $config['per_page']) : 0;
仅作记录:我的$config['uri_segment'] = 4;
【讨论】:
【参考方案4】:你可以试试 datatable.js 首先你在表格中显示所有记录 为表分配唯一的#id 以进行标识 在此之后使用 jquery 并使用数据表创建简单的表,该表具有搜索排序记录导航页面等所有功能 在页脚部分加载 jquery 在页脚部分加载 datatable.css 和 datatable.js jquery的代码
$('#table_id').dataTable();
【讨论】:
感谢@trushar widetech 的建议,但这并不能回答我的问题。 我只是建议您避免分页并使用 datatable.js 进行快速简便的开发【参考方案5】:问题是 per_page,total_rows 就我而言,我解决了它:
$page = 0;
$per_page = 8;
$config["total_rows"] = $this->db->get('item')->num_rows();
$config["total_rows"] = $config["total_rows"]/$per_page;
$config["per_page"] = 1;
【讨论】:
以上是关于Codeigniter 分页显示太多链接的主要内容,如果未能解决你的问题,请参考以下文章
通过 Ajax / Jquery 问题的 Codeigniter 分页
Codeigniter 分页从不同页面和不同员工的不同活动链接开始,而代码相同