Как сайт Eleventy может отображать список страниц в каталоге?

#javascript #node.js #static-site

#javascript #node.js #статический сайт

Вопрос:

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

Например:

 |--section1
|  |--index.njk // this should list /section1/page1/, /section2/page2/, etc.
|  |--page1.md
|  |--page2.md
|   --(etc...)
|--section2
|  |--index.njk // this should list /section2/page1/, etc.
|  |--page1.md
|   --(etc..)
  

Похоже, что Eleventy предоставляет функциональность, аналогичную этой, с помощью своей функции коллекций. Однако, похоже, что collections использует только данные, предоставленные в тегах.

Я могу получить желаемый результат, указав tags: ["section1"] во вводной части каждого page.md . Однако это означает необходимость поддерживать больше избыточных метаданных.

Также похоже, что я мог бы сгенерировать нужные мне коллекции, используя eleventyConfig.addCollection функцию, которая сортировала бы их collections.all() и возвращала на основе их outputPath . Но мне это кажется очень сложным, и мне интересно, есть ли более элегантное решение.

В идеале я хотел бы иметь возможность поместить что-то подобное в мой index.njk шаблон:

 {%- for page in directory -%}
{# do stuff #}
{%- endfor -%}
  

или, возможно

 {%- for page in collections.directory -%}
{# do stuff #}
{%- endfor -%}
  

Я чего-то не понимаю?

Ответ №1:

Я понял это.

Вы можете добавить файл данных в каждый каталог и добавить название каталога в качестве тега.

Например, section1/section1.json будет содержать:

 {
    "tags": ["Section 1"]
}
  

Это будет применено ко всем страницам в этом каталоге. Однако любые теги, указанные на отдельных страницах, переопределят его. Вы должны включить функцию глубокого слияния данных, чтобы объединить теги каталога и страницы. Просто добавьте eleventyConfig.setDataDeepMerge(true); в свой .eleventy.js конфигурационный файл.

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