【问题标题】:Listing related records in Bolt CMS在 Bolt CMS 中列出相关记录
【发布时间】:2015-01-13 21:58:12
【问题描述】:

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

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

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

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

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

欢迎提出建议。

【问题讨论】:

    标签: bolt-cms


    【解决方案1】:

    当我说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 开发人员的出色工作。

    【讨论】:

      【解决方案2】:

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

      为了显示与给定主题相关的所有小册子,我创建了一个模板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: ... }  %}
      

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

      【讨论】:

      • 您有没有想出一种按内容类型进行过滤的方法?我正在尝试做类似的事情,但查看相关记录的转储,我的模板字段内容类型始终为空,因此不确定这将如何工作。
      • {% set relatedrecords = record.related('pamphlets') %} 我认为这将是有效的方法。
      【解决方案3】:

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

      【讨论】:

      • 感谢 Jadwigo,但它使用了分类系统的一部分。我想使用受控的主题列表,以便用户编辑器偶尔可以通过仪表板添加新主题,这似乎无法使用分类系统。还是我错了?
      • 分类系统中的标签可以由用户(在bolt中登录的用户)修改,这与类别不同——类别是在bolt中预定义的。网站访问者仍然无法编辑标签
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多