【问题标题】:Concrete5 - avoiding duplication in multiple page lists on the same pageConcrete5 - 避免在同一页面上的多个页面列表中重复
【发布时间】:2018-03-28 14:11:29
【问题描述】:

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

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

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

我遇到的问题是,当内容作者发布一个精选的新页面时,我会立即与 6 块页面列表左上角列出的同一页面重复。给定一天左右的时间,随着新的“非特色”内容的添加,“重复”页面问题随着列表向下移动到第二页而变得不那么成问题(我为红色块设置了分页)。

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

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

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

【问题讨论】:

    标签: concrete5 concrete5-5.7 concrete5-8.x


    【解决方案1】:

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

    $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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-25
      • 2023-03-27
      • 2021-11-18
      • 1970-01-01
      • 1970-01-01
      • 2017-05-18
      相关资源
      最近更新 更多