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

#freemarker #jbake

Вопрос:

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

 <#assign relatedBlogs = ...>
<#if relatedBlogs?size amp;> 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 amp;> 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() что повторяет теги для каждой страницы, но работает достаточно быстро для веб-сайтов с сотнями страниц. Вот связанный с этим вопрос.