Шаблоны страниц
Шаблон задаёт страницам одного вида один и тот же набор разделов: какие
разделы ## есть, в каком порядке и какие из них обязательны. Так читатель
находит одно и то же в одном и том же месте на каждой странице справочника, а
человек и ИИ-помощник пишут новые страницы одинаково.
Профиль говорит, к какому типу относится страница, например справочник, и проверяет общие признаки: есть ли таблица или список. Шаблон точнее: он называет сами разделы. У шаблона может быть профиль, и тогда страница по шаблону получает и его.
Шаблоны необязательны. Пока шаблон не назначен ни одной странице, Docara ничего нового не проверяет.
Пример
Шаблон для страниц компонентов и правило, которое назначает его всем страницам
каталога components/:
{
"schema": "docara.authoring.v1",
"templates": {
"component": {
"description": "Страница компонента в справочнике.",
"profile": "reference",
"sections": [
{"id": "example", "heading": "Пример", "required": true, "example": true},
{"id": "markup", "heading": "Разметка", "required": true,
"hint": "Минимальная правильная разметка и обязательные части."},
{"id": "variants", "heading": "Варианты", "example_per_subsection": true},
{"id": "accessibility", "heading": "Доступность", "required": true},
{"id": "classes", "heading": "Классы", "required": true, "generated": true},
{"id": "see-also", "heading": "См. также"}
]
}
},
"rules": [
{"match": "components/**", "template": "component"}
]
}
Страница по этому шаблону начинается с заголовка # и короткого вступления,
затем идут разделы ## Пример, ## Разметка и дальше по списку. Разделы
«Варианты» и «См. также» можно не писать, остальные обязательны.
Поля шаблона
| Поле | Что задаёт |
|---|---|
templates |
Шаблоны проекта. Ключ — id шаблона: строчные латинские буквы, цифры, _ и -. |
description |
Для чего шаблон. Помогает ИИ-помощнику выбрать нужный. |
profile |
Профиль страниц по шаблону. Профиль во front matter или в правиле с profile важнее. |
other_sections |
true разрешает разделы ##, которых нет в шаблоне. По умолчанию false: лишний раздел — замечание. |
sections |
Разделы по порядку. |
sections[].id |
Постоянный id раздела. На него ссылается template_omit. |
sections[].heading |
Текст заголовка ##. Строка для всех языков или объект по языкам, например {"ru": "Пример", "en": "Example"}. |
sections[].required |
true — раздел обязателен. |
sections[].example |
true — в разделе нужен живой пример :::example. |
sections[].example_per_subsection |
true — живой пример нужен под каждым заголовком ### раздела. Так у каждого варианта или состояния есть свой пример. |
sections[].generated |
true — раздел пишет программа проекта, а не человек, см. Генерируемые разделы. |
sections[].hint |
Что писать в разделе. Попадает в заготовку новой страницы как комментарий. |
Какой странице какой шаблон
Шаблон страницы определяется так, первое подходящее срабатывает:
templateво front matter страницы.- Правило в
rulesс полемtemplate, путь которого подходит странице.
Если странице подходят правила с разными шаблонами, проверка остановится с
AUTHORING_RULE_CONFLICT. В одном правиле можно указать и profile, и
template.
---
template: component
---
# Кнопка
Если раздела на странице нет нарочно, например у компонента нет своих
классов, перечислите его id в template_omit:
---
template_omit: [classes]
---
Что проверяет docara validate page
docara validate page сравнивает разделы ## страницы с шаблоном и сообщает
о каждом расхождении отдельным кодом. Заголовки внутри блоков кода не
считаются, а якорь {#id} в конце заголовка не мешает.
| Код | Что не так |
|---|---|
PAGE_TEMPLATE_SECTION_MISSING |
Нет обязательного раздела. |
PAGE_TEMPLATE_SECTION_UNKNOWN |
Раздела нет в шаблоне, а other_sections не включено. |
PAGE_TEMPLATE_SECTION_ORDER |
Разделы идут не в том порядке. |
PAGE_TEMPLATE_EXAMPLE_MISSING |
В разделе с example нет живого примера. |
PAGE_TEMPLATE_SUBSECTION_EXAMPLE_MISSING |
Под заголовком ### раздела с example_per_subsection нет живого примера. |
PAGE_TEMPLATE_GENERATED_SECTION_EDITED |
В генерируемом разделе есть текст вне генерируемой области. |
PAGE_TEMPLATE_LOCALE_UNDECLARED |
У шаблона нет заголовков для языка страницы. Это подсказка: страница этого языка не проверяется. |
Как и замечания профиля, они не останавливают сборку. В отчёте
docara qa report они попадают в одно замечание QUALITY_TEMPLATE_MISMATCH
и снижают оценку полноты страницы.
php vendor/bin/docara validate page /ru/components/button/ --json
Новая страница по шаблону
docara scaffold page --template создаёт страницу со всеми разделами шаблона
по порядку:
php vendor/bin/docara scaffold page components/badge --template=component --title="Значок"
В заготовке:
templateи профиль шаблона во front matter иdraft: true;- текст-подсказка во вступлении и в каждом разделе;
- подсказка из
hint— HTML-комментарием, на сайте её не видно; - пустая генерируемая область в генерируемом разделе;
- подсказка добавить живой пример там, где он нужен.
Замените подсказки, допишите примеры и удалите draft: true. Отчёт
docara qa report находит подсказки, которые остались на странице.
Заготовка по шаблону и заготовка по
источнику документации не
совмещаются: укажите что-то одно.
Генерируемые разделы
Генерируемый раздел пишет программа проекта, например таблицу классов из CSS или справочник API из манифеста. Человек этот раздел не правит: чтобы изменить его, меняют исходный код или программу.
Программа пишет раздел между двумя метками, каждая на своей строке:
## Классы
<!-- docara:generated -->
| Класс | CSS |
| --- | --- |
| `sf-button` | `display: inline-flex` |
<!-- /docara:generated -->
Заголовок раздела можно поставить и внутри меток, если программа пишет раздел
целиком. Метки работают на любой странице, не только в разделах шаблона.
Генерируемая область не влияет на актуальность перевода: программа
перестраивает её на каждом языке сама. Метки без пары останавливают проверку с
PAGE_TEMPLATE_GENERATED_REGION_INVALID.
Ошибки файла
| Код | Причина и что сделать |
|---|---|
AUTHORING_TEMPLATE_UNKNOWN |
Правило, front matter или --template называют шаблон, которого нет в templates. Что сделать: Исправьте id или добавьте шаблон. |
AUTHORING_TEMPLATE_INVALID |
В шаблоне два раздела с одним id или заголовком, или генерируемый раздел просит живой пример. Что сделать: Дайте разделам разные id и заголовки; пример в генерируемом разделе пишет программа. |
AUTHORING_RULE_INVALID |
В правиле нет ни profile, ни template. Что сделать: Добавьте одно из полей или удалите правило. |
AUTHORING_TEMPLATE_OMIT_INVALID |
В template_omit есть id, которого нет в шаблоне страницы. Что сделать: Укажите id разделов шаблона. |
См. также
- Профили страниц — тип страницы и
docara.authoring.json - Метаданные страницы — ключи
templateиtemplate_omit - Качество документации — оценка от 0 до 100