【发布时间】:2019-12-19 01:52:07
【问题描述】:
我在 CakePHP 3.7 中使用自定义 pagination template
模板位于config/infinite-scroll-paginator.php。我想将它与Infinite Scroll jquery plugin 一起使用。因此,所需的只是每个分页页面有 1 个链接,其中包含指向“下一个”页面(即下一组结果)的 URL。
所以在上面的文件中我有:
$config = [
'nextActive' => '<a class="pagination__next" aria-label="Next" href="{{url}}">{{text}}</a>'
];
在我的控制器中,我首先告诉它使用自定义分页模板:
public $helpers = [
'Paginator' => ['templates' => 'infinite-scroll-paginator']
];
然后,当我想对数据进行分页时,我会使用自定义查找器(findFilters(),它位于 Model/Table/FiltersTable.php):
public $paginate = [
'finder' => 'filters',
];
然后我可以使用它来获取分页数据:
$this->loadModel('Filters');
$rf_keywords = trim($this->request->getQuery('rf_keywords'));
// Pagination
$page = $this->request->getQuery('page') ? (int)$this->request->getQuery('page') : 1;
$this->paginate = ['page' => $page, 'limit' => 100];
$finder = $this
->Filters
->find('filters', [
'rf_keywords' => $rf_keywords
]);
$data = $this->paginate($finder);
$this->set('data', $data);
然后在我的模板中输出分页器 HTML:
<?= $this->Paginator->next(); ?>
所有这些都可以正常工作。我得到每个页面的“下一个”链接。假设我有 10 个页面,我会得到 URL:
/get-filters/?page=1
/get-filters/?page=2
...
/get-filters/?page=10
问题是第 10 页有一个“下一个”链接,而它的 URL 只是
/get-filters
没有更多页面要输出,但我仍然得到一个链接,尽管是无效的。
如何阻止它在最后一页输出链接?我认为分页器组件会处理这个问题,因为它知道有多少页面基于我在$this->paginate 中的limit 值?
【问题讨论】:
-
调试the helper's code 以了解发生了什么。 ps,无限滚动是有史以来最烦人的事情之一;)
-
@ndm 谢谢,我会检查一下。在这个特定的应用程序中,它是一个超过 1000 个过滤器的列表,用户可以通过单击每个过滤器旁边的图标来订阅/取消订阅这些过滤器。记住我们对结果集进行分页然后使用无限滚动加载更多数据的记录数。可以说,这比单击“下一页”要少烦人,因为要记住用户已经进行了很多单击。我同意你的观点,一般来说这是不可取的,如果你对此有任何更好的 UI 模式想法,我很想听 :)
标签: cakephp pagination cakephp-3.0