Карта сайта: sitemap.yml
Один файл config/sitemap.yml задаёт структуру сайта. Это явное дерево: каждая строка задаёт страницу, а вложенность строк определяет иерархию адресов. Один файл — единственное место, где заданы адреса, заголовки, метаданные страниц и навигация.
Почему так, а не привычный file-as-route, объясняет решение о карте сайта.
Формат строки
Файл с расширением .yml читает собственный парсер отступов; полный синтаксис YAML не поддерживается. Используйте два пробела на уровень и строки списка без внешних кавычек. Заголовок sitemap: занимает отдельную строку; допустимы пустая форма sitemap: [] и комментарий после заголовка, но не декларация страницы. Значения известных полей layout и navLabel должны быть строками. Кавычки в значениях метаданных допустимы. Неверная запись страницы или неразбираемые метаданные завершают сборку с ошибкой; строка не пропускается молча.
Заголовок [адрес, файл.md, { layout: "имя" }]
- Заголовок — текст до скобок. Движок включает его в данные карты сайта; зарегистрированный обработчик документа получает это значение, а стандартное расширение
rootиспользует его для<title>. - адрес — последний сегмент URL страницы. Абсолютный (с ведущим
/) движок использует целиком, относительный добавляет к адресу родителя. - файл.md — путь к файлу контента относительно корня контента: первого уровня в levels.json (по умолчанию
content/). Корнем может быть локальный каталог или клон внешнего репозитория. { layout: "имя" }— необязательные метаданные страницы. Движок сохраняет значение вpage.layoutи передаёт его зарегистрированному обработчику документа. Обработчик может использовать его при выборе шаблона; движок сам шаблон не выбирает и не предоставляет шаблонpageпо умолчанию.
После раскрытия символических ссылок исходник должен оставаться внутри выбранного корня контента. Корень, заданный символической ссылкой, и ссылки на файлы внутри него поддерживаются; ссылка на внешний файл завершает сборку с ошибкой до чтения его содержимого.
Вложенность определяет адреса
Глубина отступа задаёт иерархию. Пример из реального сайта документации:
sitemap:
- Главная [/, index.md]
- Как строить [how, how/index.md]
- С чего начать [start, how/start.md]
- Модель данных [bemjson, how/bemjson.md]
Главная→/Как строить→/howС чего начать→/how/start(относительныйstartприсоединился к родительскому/how)Модель данных→/how/bemjson
Дерево каталогов и дерево адресов независимы: расположение .md не влияет на URL — итоговый адрес определяется только картой сайта.
Хлебные крошки и навигация
Из дерева sitemap.yml движок строит адреса, хлебные крошки и структуру меню — задавать их вручную не нужно. Отдельного файла навигации нет.
Метаданные шаблона
Необязательные метаданные шаблона задают в строке sitemap, а не в начале файла контента:
- Главная [/, index.md, { layout: "landing" }]
- Документация [docs, docs/index.md]
Здесь page.layout получает значение landing; оно влияет на HTML только если зарегистрированный обработчик документа читает это поле. Стандартный обработчик nuckty-ext-block-root оборачивает каждую страницу в root и не выбирает шаблон по page.layout. Подробнее об обработчиках документов и блоках — блоки и шаблоны nu.
Перекрёстные ссылки
Авторы пишут обычные ссылки в Markdown на файлы .md:
См. [модель данных](how/bemjson.md).
Движок преобразует путь в адрес по карте md2url, построенной из sitemap. Автору не нужно знать итоговый адрес — достаточно сослаться на файл. Подробнее — в разделе Markdown.
Когда карта сайта не подходит
Для сайтов с динамическим или пользовательским контентом, где страницы появляются без центральной регистрации, явное дерево неудобно. nuckty для этого не предназначен: карта сайта рассчитана на курируемую документацию с заранее известной структурой.