0

抱歉,如果标题有点混乱,但这是 CMS Concrete5 特有的问题。

我正在开发一个新闻/媒体相关网站,该网站由一个主页组成,该主页具有 3 个单独的页面列表块,其布局如附件样机所示。

在此处输入图像描述

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

我遇到的问题是,当内容作者发布一个精选的新页面时,我会立即与 6 块页面列表左上角列出的同一页面重复。大概一天左右,随着新的“非特色”内容的添加,“重复”页面问题在列表中向下移动到第二页时就不再是问题了(我对红色块进行了分页)。

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

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

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

4

1 回答 1

1

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

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

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

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

于 2018-04-01T03:57:07.257 回答