JBake: перечислить все сообщения с определенным тегом (tagged_posts)

Как в freemarker перебирать все сообщения в блоге с помощью определенного тега, например тега «алгоритмы»?

      <#assign relatedBlogs = ...>
<#if relatedBlogs?size &gt; 0>
    <h2>Related blog posts</h2>
    <ul>
        <#list relatedBlogs as blog>
            <li>
                <a href="${content.rootpath}${blog.uri}">${blog.title}</a>
            </li>
        </#list>
    </ul>
</#if>

У меня это не работает:

      <#assign relatedBlogs = tagged_posts["algorithms"]>

Это тоже не работает:

      <#assign relatedBlogs = tags["algorithms"].tagged_posts>

1 ответ

tags это последовательность, и использовать tags[...]вам нужен хеш. Я закончил тем, что заставил это работать ?filter()а также ?first:

      <#assign relatedTags = tags?filter(tag -> tag.name == "algorithms")>
<#if relatedTags?size &gt; 0>
    <#assign relatedTag = relatedTags?first>
    <h2>Algorithms related blog posts</h2>
    <ul>
        <#list relatedTag.tagged_posts as blog>
            <li>
                <a href="${content.rootpath}${blog.uri}">${blog.title}</a>
            </li>
        </#list>
    </ul>
</#if>

Это не будет хорошо масштабироваться, потому что filter()повторяет теги для каждой страницы, но работает достаточно быстро для веб-сайтов с сотнями страниц. Вот связанная с этим проблема.

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