Перечисление связанных записей в Bolt CMS

У меня есть типы контента Темы и брошюры. Брошюры связаны с темами (например, брошюра "Месса си минор" может быть связана с темой "музыка") с использованием типа поля "отношения":

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

Я хочу перечислить все брошюры о музыке. Точнее, я хочу иметь возможность отображать каждую тему со списком брошюр, связанных с этой темой.

Есть функция record.related() но он работает по-другому, то есть я могу использовать его, когда отображаю брошюру, чтобы показать, что брошюра связана с музыкой; но я не могу использовать его при отображении темы "Музыка" для перечисления всех брошюр, связанных с музыкой.

(В документации сказано, что отношения всегда двунаправлены, но я не понимаю, как это сделать.)

Предложения приветствуются.

3 ответа

Я был просто неправ, когда сказал, что 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 за аккуратную работу.

Теперь у меня есть неэффективное решение. Может быть, кто-то может улучшить это.

Чтобы отобразить все брошюры, относящиеся к данной теме, я создал шаблон topic.twig, В этом шаблоне record.title содержит название темы (например, "Музыка") и record.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: ... }  %}

Предполагается, что это позволит провести выборы на уровне базы данных, а не просматривать каждую запись по очереди. Но мои эксперименты только выявили синтаксические ошибки веток. У кого-нибудь есть более эффективный метод?

Вы смотрели на расширение "Связанный контент по тегам"? Это дает вам список связанного контента по тегам: http://extensions.bolt.cm/view/45073af0-8585-4d5b-b978-fd6405858e0e

Другие вопросы по тегам