2

我有内容类型主题和小册子。小册子与主题相关(例如,名为“B 小调弥撒”的小册子可能与主题“音乐”相关)使用“关系”字段类型:

pamphlet:
   ...
   relations:
      topics:
         multiple: false
   ...

我想要的是列出所有的音乐小册子。更准确地说,我希望能够显示每个主题,以及与该主题相关的小册子列表。

有一个功能record.related(),但它的工作方式是相反的,即当我显示一个小册子时,我可以使用它来显示该小册子与音乐相关;但是当我显示音乐主题以列出所有与音乐相关的小册子时,我无法使用它。

(文档说关系总是双向的,但我看不出如何。)

欢迎提出建议。

4

3 回答 3

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 开发人员做了一些简洁的工作。

于 2015-01-23T18:13:52.060 回答
1

我现在有一个低效的解决方案。也许有人可以改进它。

为了显示与给定主题相关的所有小册子,我创建了一个模板topic.twig。在该模板中,record.title包含主题的名称(例如“音乐”)并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: ... }  %}

这可能会在数据库级别完成选举,而不是依次查看每条记录。但是我的实验只产生了树枝语法错误。有没有人有更有效的方法?

于 2015-01-15T08:15:54.787 回答
0

您是否查看了按标签扩展的相关内容?这会按标签为您提供相关内容的列表:http: //extensions.bolt.cm/view/45073af0-8585-4d5b-b978-fd6405858e0e

于 2015-01-15T08:55:14.240 回答