Хочу поделиться простым способом выводить структурированную информацию в постах и на страницах Jekyll на примере того, как организовал страницу со списком выступлений и конференций в этом блоге.

Идея не оригинальная и была случайно подсмотрена у Juozas “Joe” Kaziukėnas.

Реализация очень простая. В _config.yml заводится массив данных примерно в таком виде:

talks:
  - conference: PHP Frameworks Day
    location: Киев
    date: 12 октября 2013
    title: "Как превратить проект на Symfony в боль. Набор практических советов на основе реальных проектов"
    site: http://frameworksdays.com/event/php-frameworks-day-2013/review/Kak-prevratit-proekt-na-symfony-v-bol
    slides: https://speakerdeck.com/romalapin/kak-prievratit-proiekt-na-symfony-v-bol-how-to-turn-symfony2-project-into-pain

  - conference: DrupalCampСНГ
    location: Москва
    date: 24-25 августа 2013
    title: "Symfony + Drupal = <3"
    site: http://drupalcis.org/node/120
    slides: https://speakerdeck.com/romalapin/symfony-plus-drupal-equals-3

Или, например, так это сделано у Joe:

conferences:
  - year: 2013
    talks:
    - title: Lone Start PHP conference
      location: Dallas, TX, USA
      date: 28-29th June
      spoken:
          - title: "Virtualized Development"
            feedback: http://joind.in/talk/view/8698
            slides: http://www.slideshare.net/juokaz/virtualized-development-lone-star-php
          - title: "You Can't Optimize What You Can't Measure"
            feedback: http://joind.in/talk/view/8697
            slides: http://www.slideshare.net/juokaz/you-cant-optimize-what-you-cannot-measure-lone-star-php
    - title: Web-5 conference
      location: Béziers, France
      date: 14-15th June
      spoken:
          - title: "Process any amount of data. Any time"
            slides: http://www.slideshare.net/juokaz/process-any-amount-of-data-any-time-web5-conference
    - title: Dutch PHP conference
      location: Amsterdam, The Netherlands
      date: 6-8th June
      spoken:
          - title: "Growing spiders to crawl the web"
            feedback: https://joind.in/talk/view/8462
            slides: http://www.slideshare.net/juokaz/growing-spiders-to-crawl-the-web-dutch-php-conference

Структуру можно свободно менять по своему вкусу.

Затем в шаблоне нужной странице можно использовать заведенный массив. В моем случае через site.tals:

{% for talk in site.talks  %}
#### {{ talk.title }}

_{{ talk.conference }}, {{ talk.date  }}, {{ talk.location  }}_

{% if talk.site  %}* [Сайт]({{ talk.site }}){% endif %}
{% if talk.slides  %}* [Слайды](}}){% endif %}
{% if talk.video %}* [Видео](}}){% endif %}
{% endfor  %}

Кстати, для вывода этого куска кода через подсветку кода пришлось неплохо извратиться, любопытные могут глянуть в исходный код.

И это все. Теперь при добавлении нового выступления мне достаточно дописать его в конфиг. А если захочется сменить отображение, то достаточно будет поменять шаблон только для вывода сниппета, а не у всех конференций.