Генерация списка страниц (не сообщений) в данной категории

Я использую Jekyll в качестве статического генератора для веб-сайта (не блога), и я хочу, чтобы на моей странице указателя автоматически создавался список всех страниц. В частности, я хочу иметь разные категории и перечислять все статьи в каждой категории отдельно.Вот пример того, что яЯ описываю, если выу вас проблемы с подпиской. Есть ли способ сделать это в Jekyll (например, на страницах GitHub)? Я'мы виделистраница документации по переменным но это кажется специфическим для формата поста в блоге.

 gwern22 июн. 2013 г., 23:23
Вот'пример того, что яЯ описываю, если выу вас проблемы с подпиской. FWIW, эта страница нет автоматически генерируется - я добавляю записи вручную, когда я думаю, что онизакончен и высокого качества.
 Ben26 февр. 2014 г., 00:15
@Mike - вы можете рассмотреть вопрос об изменении принятого ответа ...;)
 Mike23 июн. 2013 г., 18:22
Я только что решил сделать то же самое, Гверн.

Ответы на вопрос(4)

ений, отсортированных по категориям, не является проблемой. Вы можете перебрать site.categories, он содержит название категории и список всех сообщений в этой категории.

Перечисление всех страниц возможно, вы также можете перебирать site.pages. Но страница не относится к определенной категории (только сообщения).

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

 Polygnome17 июн. 2013 г., 17:59
Вам не нужно хранить их все в одном каталоге, и вы не обязаны использовать 'сообщение' раскладка. сообщения будут использоватьсообщение' макет по умолчанию, но вы можете указать макет для каждого поста отдельно через YAML Front Matter (на самом деле, это было обязательно в jekyll < 1.0). Это'правда, вам нужно использовать определенное соглашение об именах, но действительно ли это разрушитель игры?
 Mike17 июн. 2013 г., 17:56
Использование сообщений запирает меня в кучу вещей, которые я не делаюне хочу (необходимость использовать определенный формат имен, сохраняя их все в одном каталоге, заставляя меня использовать "сообщение" макет) но нет возможности использовать категории на страницах в Jekyll.
 Mike17 июн. 2013 г., 17:02
Это действительно предел функциональности, которую предоставляет Jekyll, но это не так.работать для моих нужд. Я думаю я'Я собираюсь сделать это, написав скрипт bash, который создает сайт, а затем вызывает скрипт на Haskell, который вставляет ссылки на страницы по категориям.
 Polygnome17 июн. 2013 г., 18:06
Вы даже можете избавиться от проблемы именования, используя черновики и настройкиshow_drafts: true в вашем _config.yml;)
 Polygnome17 июн. 2013 г., 17:04
Вы можете объяснитьЗачем это не работает для ваших нужд?

ь, из-за улучшений в Jekyll.

ЕстьНЕТ индекс необходимо в._config.yml

Если список страницне указан на странице но, например, в документе, вы можете добавить категорию также в документ:

---
layout: doc
title: Fruit List
categories: [fruit]
---

И затем используйте это так:

{% for p in site.pages %}
   {% if p.categories contains page.category %}
     * [{{ p.title }}]({{ p.url | absolute_url }})
        <small>{{ p.excerpt }}</small>
   {% endif %}
{% endfor %}

С постами это может быть даже короче:

{% for post in site.categories[page.category] %}
  * [{{ post.title }}]({{ post.url | absolute_url }})  
      <small>{{ post.excerpt }}</small>
{% endfor %}

Почему это работает только для постов, я пока не могу понять.

Интересным моментом является то, что этот фрагмент можно использовать везде (если вы смешиваете документы / страницы / посты)! Так что просто добавьте это как_includes и используйте это как:

## Further Reading
{% include pages-list.md %}

Я работаю с темойМинимальные ошибки

более чистый способ сделать это, используя жидкость "содержит" имущество

на _config.yml добавить свой индекс категорий
categories: [fruit, meat, vegetable, cheese, drink]
на странице page.md добавьте одну или несколько категорий, доступных в _config.yml
---
layout: page
title: Orange juice
description: Orange juice is juice from oranges. It's made by squeezing oranges.
categories: [fruit, drink]
---
в вашем шаблоне, чтобы получить все страницы в категории фруктов, которые вы делаете:
{% for page in site.pages %}
  {% if page.categories contains 'fruit' %}
    <div class="item">
      <h3>{{page.title}}</h3>
      <p>{{page.description}}</p>  
    </div>
  {% endif %}
{% endfor %}
 Project14 февр. 2017 г., 18:34
Это нена самом деле реализовать то, что запрашивает OP. Также необходимо вручную определить все категории в _config, что обременительно.
Решение Вопроса

л (IMHO) простое и надежное решение. Надеюсь, это полезно для всех, кто хочет сделать что-то подобное.

Эта проблема

Учитывая подмножество страниц (не постов) на сайте, перечислите их под заголовками на основе их категорий. Например: дан набор страниц, которые мы считаемресурс страниц (или справочных страниц, или любой логической группы страниц, которые вы хотите отобразить), мы хотим перечислить их под их категориями (например, код, объяснение, и так далее).

Решение

Чтобы получить поведение, которое мы хотим, мы должны внести изменения в трех местах:

_config.ymlresources.mdresource-file-<strong>X</strong>.md_config.yml

В_config.ymlмы должны добавить список всех категорий / ключевых слов / тегов (или как вы хотите это называть), которые появятся в файлах ресурсов. Вот что у меня есть в моем:

category-list: [code, editors, math, unix]

Вы можете вызвать переменную как угодно, я выбралcategory-listпросто убедитесь, что вы используете ту же переменную вresource.md файл.

Примечание. Порядок, в котором вы размещаете элементы в списке, соответствует порядку, в котором они будут перечислены наresource.md стр.

resource-file-<strong>X</strong>.md

Это файлы, которые вы хотите проиндексировать и с которымиresources.md стр. Все, что вам нужно сделать, это добавить две файловые переменные в начало каждого из этих файлов. Во-первых, чтобы указать, что этот файлресурс файл.

resource: true

Второй - указать, к каким категориям вы хотите, чтобы этот файл был проиндексирован. Вы можете проиндексировать его под столько категорий, сколько хотите, и если вы хотите, чтобы страница не была проиндексирована, оставьте список пустым. Моя ссылка для правильной обработки EINTR в C имеет следующие категории:

categories: [code, unix]
resources.md

Это файл, который будет генерировать список страниц на основе их соответствующих категорий. Все, что вам нужно сделать, это добавить следующий код в этот файл (или любой другой файл, в который вы хотите включить список):

{% for cat in site.category-list %}
### {{ cat }}
<ul>
  {% for page in site.pages %}
    {% if page.resource == true %}
      {% for pc in page.categories %}
        {% if pc == cat %}
          <li><a href="{{ page.url }}">{{ page.title }}</a></li>
        {% endif %}   <!-- cat-match-p -->
      {% endfor %}  <!-- page-category -->
    {% endif %}   <!-- resource-p -->
  {% endfor %}  <!-- page -->
</ul>
{% endfor %}  <!-- cat -->
Разбивка кода

Просто краткое объяснение того, как это работает:

Просмотрите каждую из категорий, указанных в._config.ymlПоказать заголовок с названием этой категории.Начните неупорядоченный список для страниц, которые принадлежат к этой категории.Перебирайте страницы на сайте.Если страница являетсяресурс файл, как указано в переменной файлаresourceзатем для каждой из категорий, к которой принадлежит файл, если одна из них соответствует текущей категории в списке, отобразите ссылку на эту страницу.

Примечание: переменныеcategory-list в_config.yml а такжеcategories в файлах ресурсов можно вызывать как угодно, просто убедитесь, что вы используете те же переменные в файле, генерирующем список.

Другое примечание: при изменении_config.yml, вы должны полностью перезапустить Jekyll, даже если у вас есть--watch вариант, вы должны остановить и перезапустить его. Мне потребовалось некоторое время, чтобы понять, почему мои изменения не былиВступает в силу!

Конечный продукт

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

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

 giacomo17 июл. 2015 г., 15:46
Что именно этоressource файл ? где я должен это положить? Спасибо
 m-renaud28 сент. 2015 г., 04:29
Извините за поздний ответ, я, должно быть, пропустил уведомление. @giacomoV, термин "ресурс" совершенно произвольно, чтоТолько у меня есть вариант использования, вы можете заменить это на "рецепты ","кодовые метки ","учебные пособия»и т.д. Почти все, чтоне "сообщение" как это определено в Jekyll. Надеюсь, это имеет смысл: P
 m-renaud28 сент. 2015 г., 04:32
@ Jwan622 Я обычно помещаю файлы resource-name-x.md в подкаталоги / resource, например /resource/codelabs/ enjfoo,bar,baz‹-codelab.md. Файл resource.md обычно просто заканчивается на /resource/index.md.
 Jwan62203 авг. 2015 г., 12:36
Куда идут файлы resource и resource-name-x.md?

Ваш ответ на вопрос