Ghost: новейший пост с определенным тегом на первой странице
Я разрабатываю шаблон Ghost для моего блога. И я хочу видеть на первой странице только один новый пост из сообщений с определенным тегом (например, "новости").
Можно ли фильтровать сообщения по тегу в foreach
цикл?
Любое другое решение? (первое, что приходит на ум, это трюк с пользовательским шаблоном tag-news.hbs
и переписывание URL)
5 ответов
Вы можете определенно фильтровать сообщения по тегу, используя {{has}}
помощник:
{{#foreach posts}}
{{#has tag="news"}}
{{> post}}
{{/has}}
{{/foreach}}
Вы можете добавить этот код в home.hbs
файл, и он будет использоваться только на вашей домашней странице.
Я не уверен, что лучше всего ограничить его одним сообщением, если вы хотите, чтобы на других страницах списка было более одного сообщения. Возможно, вам придется написать собственный помощник.
У вас есть доступ к @index
переменная, но если первый пост с новостями является третьим постом, @index
будет 2
потому что он увеличивается с внешним foreach
петля.
Вскоре вы сможете использовать API: https://github.com/TryGhost/Ghost/wiki/%5BWIP%5D-API-Documentation
После прочтения продолжительной дискуссии GitHub Ghost Issue: Query (get) helper #4439 недавно закрыт, отличные новости - в Public API v1 добавляются помощники и фильтры!
Помощник {{#get}} #5619 только что был объединен с master (все еще нестабильным), поэтому решение:
{{#get "posts" featured="true" as |featured|}}
{{#foreach featured}}
...
{{/foreach}}
{{/get}}
Я создал небольшой взлом для Ghost. Он добавляет {{by_tag}} помощник в шаблоны темы
- Создайте файл helpers.js в каталоге ghost с кодом из этого списка.
- Добавьте первую строку в ваш config.js:
require('./helpers')();
- Перезагрузить призрак
{{#by_tag}} Помощник
Выберите сообщения по тегу. Необязательный 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}} Помощник
Пример:
{{#node_env production}}
...production only
{{/node_env}}
Просто чтобы добавить немного полезной информации, если вы хотите добавить избранные сообщения, вот как:
{{#get "posts" filter="featured:true" as |featured| }}
<ol>
{{#foreach featured}}
<li><a href="{{url}}">{{title}}</a></li>
{{/foreach}}
</ol>
{{/get}}
Чтобы получить общее представление о том, что еще можно сделать, посетите официальный GitHub
Надеюсь, поможет
В 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>
Надеюсь это поможет!