#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
конфигурационный файл.
В документации указано, что эта функция будет включена по умолчанию в будущих версиях. На момент написания этой статьи он по-прежнему доступен только для входа.