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