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}} помощник в шаблоны темы

  1. Создайте файл helpers.js в каталоге ghost с кодом из этого списка.
  2. Добавьте первую строку в ваш config.js: require('./helpers')();
  3. Перезагрузить призрак

{{#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>

Надеюсь это поможет!

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