Craft CMS 中的多部分查询和部分明智排序

问题描述 投票:0回答:2

我在 Craft CMS 中有多个名为“活动”和“最新新闻”的 2 个部分。我在这些部分中发布带有日期的条目。我的问题是我在前端有光滑的轮播,我想在其中显示这两个部分的条目,但按日期排序。类似事件应按事件日期排序,最新新闻应按新闻日期排序。我们如何使用 Craft CMS twig 模板在单个查询中实现此目的。

{% set entries = craft.entries.section(['events', 'latestNews']) %}

上面的查询为我提供了事件和最新新闻部分的所有条目。但是,我不知道如何在单个查询中使用分段字段对它们进行排序。

sections craftcms
2个回答
1
投票

默认情况下,所有条目都有一个发布日期,即使您要跨多个部分进行查询,您也可以按该发布日期对查询进行排序:

{% set entries = craft.entries()
    .section(['events', 'latestNews'])
    .orderBy('postDate DESC')
    .all()
%}

这将返回两个部分中的所有条目,并按发布日期降序排列。


如果您使用两个不同的字段来表示新闻日期和事件日期,那就有点复杂了。您可以使用数据库表达式,但这非常复杂并且不利于性能。

在这种情况下,我将使用设置为日期值的 Preparse 字段。在模板中,根据条目所在的部分输出新闻日期或事件日期。然后按“准备”字段排序。检查插件文档中的示例,了解如何在 Preparse 字段中输出日期值。


0
投票

如果不是数据量大的情况,也许你可以在twig端进行排序...... 而不是使用:

{% for element in elements %}
...
{% endfor %}

使用类似:

{% for element in elements | sort((a,b) => a.orderField <=> b.orderField) %}
...
{% endfor %}

这样,没有用于排序的字段的部分将保持未排序状态,并按顺序冒泡。当然,您可以使用多个 for 循环来迭代不同排序的元素,同时保护某些元素(通过使用 if 块)。

© www.soinside.com 2019 - 2024. All rights reserved.