我正在为我的博客开发一个Ghost模板。我想在首页上看到来自具有特定标签的帖子的最新帖子(例如“新闻”)。
是否可以按foreach
循环中的标记过滤帖子?
还有其他解决方案吗? (首先想到的是使用自定义模板tag-news.hbs
和URL重写的一些技巧)
答案 0 :(得分:11)
您绝对可以使用{{has}}
帮助程序按标记过滤帖子:
{{#foreach posts}}
{{#has tag="news"}}
{{> post}}
{{/has}}
{{/foreach}}
您可以将此代码添加到home.hbs
文件中,它只会在您的主页上使用。
如果您希望其他列表页面有多个帖子,我不确定将其限制为一个帖子的最佳方法。您可能必须编写自定义帮助程序。
您可以访问@index
变量,但如果第一篇帖子中包含“新闻”,则@index
将为2
,因为它会以foreach
为增量{{1}} 1}}循环。
很快您就可以使用api:https://github.com/TryGhost/Ghost/wiki/%5BWIP%5D-API-Documentation
了答案 1 :(得分:5)
在阅读了最近关闭的冗长讨论GitHub Ghost Issue: Query (get) helper #4439之后,好消息 - 帮助者和过滤器正被添加到Public API v1!
The {{#get}} helper #5619刚刚合并为master(仍然不稳定),所以解决方案:
{{#get "posts" featured="true" as |featured|}}
{{#foreach featured}}
...
{{/foreach}}
{{/get}}
答案 2 :(得分:4)
我为Ghost创造了一个小小的黑客。它将{{by_tag}}帮助器添加到主题模板
require('./helpers')();
按标签选择帖子。可选的limit
参数。
示例:
{{#by_tag 'dev'}}
{{#foreach posts}}
{{title}}
{{content}}
{{/foreach}}
{{/by_tag}}
{{#by_tag 'music' limit=3}}
{{#foreach posts}}
{{title}}
{{content}}
{{/foreach}}
{{/by_tag}}
示例:
{{#node_env production}}
...production only
{{/node_env}}
答案 3 :(得分:0)
在index.hbs
:
<div class="post-feed">
{{#foreach posts}}
{{^has tag="videos"}}
{{! this block will not show posts tagged videos }}
{{> "post-card"}}
{{/has}}
{{/foreach}}
</div>
在tag-videos.hbs
:
<div class="post-feed">
{{#foreach posts}}
{{#has tag="videos"}}
{{! this block will show posts tagged videos }}
{{> "post-card"}}
{{/has}}
{{/foreach}}
</div>
希望这有帮助!
答案 4 :(得分:0)
只需添加一些有用的信息,如果您想添加特色帖子,这是这样的:
{{#get "posts" filter="featured:true" as |featured| }}
<ol>
{{#foreach featured}}
<li><a href="{{url}}">{{title}}</a></li>
{{/foreach}}
</ol>
{{/get}}
要大致了解您可以做什么,请访问官方GitHub
希望有帮助