2012-06-05 3 views
5

Я очень новичок в Jekyll and Ruby (пока очень возбужденный).Фильтр site.related_posts в Jekyll

Без использования плагина, я пытаюсь найти способ фильтрации site.related_posts.

Например, я читаю сообщение с заголовком Foo и категориями A, B.

Сайт содержит в общей сложности 3 сообщений:

  1. Foo (категории A, B)
  2. Bar (Категории: А, С, D)
  3. Zoo (Категории: B, F)

по умолчанию, в Джекила мы делаем это:

{% для поста в пределе site.related_posts: 5%}
{%}% ENDFOR

Тем не менее, приведенный выше код возвращает все (3) сообщения.

Сообщение содержит много категорий, поэтому категории должны быть массивом.

Как я могу изменить код и возвращать только те, чьи категории пересекаются с категориями текущего сообщения?

(В этом примере, я хотел бы код, чтобы вернуть только Foo и Zoo.)

+0

Обратите внимание, что по умолчанию «связанные сообщения» на самом деле являются только последними сообщениями. Установите 'lsi: true' в _config.yml или запустите Jekyll с' --lsi', чтобы получить более качественные результаты. –

ответ

5

У меня нет возможности проверить это прямо сейчас, но что-то подобное будет работать данный Liquid's ограниченный синтаксис:

{% for post in site.related_posts limit:5 %} 
    {% assign match = false %} 
    {% for category in post.categories %} 
    {% if page.categories contains category %} 
     {% assign match = true %} 
    {% endif %} 
    {% endfor %} 
    {% if match %} 
    <li><a href="{{ post.url }}">{{ post.title }}</a></li> 
    {% endif %}      
{% endfor %} 
+0

Для получения лучших результатов я пытаюсь использовать тот же код, используя 'site.posts' вместо' site.related_posts limit: 5'. Большое спасибо! –

+0

Отличная ссылка на документацию Liquid, которая открыла мне глаза. – kiewic

1

Убедитесь, что каждый пост имеет категорию в передней материи YAML, а затем добавить это туда, где вы хотели бы показать пост, относящиеся имя_категории:

{% for post in site.categories.CATEGORY_NAME %} 
    <li> 
     <a href="{{ post.url }}"> 
      <img src="{{ post.thumbnail }}"> 
      <p>{{ post.excerpt }}</p> 
     </a> 
    </li> 
{% endfor %}