Concrete5 - 避免在同一页面上的多个页面列表中重复

Concrete5 - avoiding duplication in multiple page lists on the same page

如果标题有点混乱,我们深表歉意,但这是 CMS Concrete5 特有的问题。

我正在开发一个 news/media 相关网站,该网站由一个主页组成,该主页有 3 个独立的页面列表块,布局如所附模型所示。

要使某个页面出现在特色页面列表(以绿色突出显示)中,需要将页面属性 is_featured 设置为 true。 6 块页面列表(以红色突出显示)设置为显示所有页面,包括特色页面。两个页面列表都设置为按日期排序,最新的排在最前面。

我遇到的问题是,当内容编写者发布一个新的特色页面时,我会立即得到与 6 块页面列表左上角列出的相同页面的重复。给定一天左右的时间,随着新 'non-featured' 内容的添加,'duplicated' 页面问题随着列表向下移动并进入第二页而变得不那么成问题(我为红色方块)。

我正在使用标准的 Concrete5 页面列表块,并且有自定义模板,这些模板只是 view.php 用于各种列表(精选、6 页和边栏列表)的文件。

为了消除重复,我尝试在 6 页模板的 view.php 中添加一些代码,这将 'filter out' 在过去 24 小时内发布的任何特色页面。虽然这确实有效,但我发现我当时的 6 页页面列表将只显示 5 页,'filtered out' 页面有一个空白。

我的问题是,是否有一种干净且更好的方法来防止页面列表之间的重复?我不想将页面列表设置为只显示某些类别(因此没有任何重叠),但必须有一种方法来实现考虑到这个特定问题的东西吗?

在“6 项页面列表”页面列表块自定义模板中,将以下代码添加到 foreach ($pages as $page) {...} 循环上方。

$list->filterByIsFeatured(false);
$list->setItemsPerPage(6);
$pagination = $list->getPagination();
$pages = $pagination->getCurrentPageResults();

这样做是获取现有的 $list(Concrete\Core\Page\PageList 对象)并从页面结果中获取 6 non-featured 页。在页面列表块表单中设置的选项、排序和过滤应通过重新使用 $list 来保留。

这里设置了$list对象:
https://github.com/concrete5/concrete5/blob/develop/concrete/blocks/page_list/controller.php#L225