我有内容类型主题和小册子。小册子与主题相关(例如,一本名为'B小调中的弥撒'的小册子可能与'音乐'主题有关),使用'关系'字段类型:
pamphlet:
...
relations:
topics:
multiple: false
...
我想要的是列出所有音乐小册子。更确切地说,我希望能够显示每个主题,以及与该主题相关的小册子列表。
有一个函数record.related()
但它的另一种方式是工作,也就是说,当我显示一个小册子来表明该小册子与音乐有关时,我可以使用它;但是当我显示音乐主题以列出与音乐相关的所有小册子时,我无法使用它。
(文档说关系总是双向的,但我看不出如何。)
建议欢迎。
答案 0 :(得分:2)
当我说related records()
函数没有完成这项工作时,我完全错了。我们在这里(从开箱即用的record.twig template
开始):
{% set relatedrecords = record.related() %}
{% if relatedrecords is not empty %}
<p> Examples:</p>
<ul>
{% for related in relatedrecords %}
<li><a href="{{ related.link }}">
{{ related.title }}</a></li>
{% endfor %}
</ul>
{% endif %}
一般来说,如果A(小册子)与B(一个主题)相关,则可以使用完全相同的方法来显示给定小册子所属的主题或属于给定小册子的小册子。主题。
抱怨这个错误,并祝贺Bolt开发人员做了大量工作。
答案 1 :(得分:1)
我现在的解决方案效率低下。也许有人可以改进它。
要显示与给定主题相关的所有小册子,我创建了一个模板topic.twig
。在该模板中,record.title
包含主题的名称(例如&#39;音乐&#39;),record.id
包含主题的ID。我们需要选择标记为与具有该ID的主题相关的小册子。以下代码将所有小册子提取到pamphletlist
,然后考虑每个小册子。使用有价值的dump()
函数,我发现小册子的数据结构包含一个数组relation
,其中包含一个数组topics
。下面的代码有效,因为在我的数据中,一个小册子只能与一个主题相关。代码:
{# to get a list of all pamphlets related to this topic #}
{% setcontent pamphletlist = 'pamphlets' %}
{% for p in pamphletlist %}
{{ dump(p) }}
{% for t in p.relation.topics %}
{% if record.id == t %}
<p><a href = " {{ p.link }} "> {{ p.title }} </a></p>
{% endif %}
{% endfor %}
{% endfor %}
使用where
子句肯定会更有效率,如下所示:
{% setcontent pamphletlist = 'pamphlets' where { relation.topics: ... } %}
这可能会在数据库级别完成选举,而不是依次偷看每个记录。但我的实验只产生了twig语法错误。有没有人有更有效的方法?
答案 2 :(得分:0)
您是否按标签扩展查看了相关内容? 这会按标签为您提供相关内容列表: http://extensions.bolt.cm/view/45073af0-8585-4d5b-b978-fd6405858e0e