К содержанию

Главное

Шаблоны страниц

Шаблон задаёт страницам одного вида один и тот же набор разделов: какие разделы ## есть, в каком порядке и какие из них обязательны. Так читатель находит одно и то же в одном и том же месте на каждой странице справочника, а человек и ИИ-помощник пишут новые страницы одинаково.

Профиль говорит, к какому типу относится страница, например справочник, и проверяет общие признаки: есть ли таблица или список. Шаблон точнее: он называет сами разделы. У шаблона может быть профиль, и тогда страница по шаблону получает и его.

Шаблоны необязательны. Пока шаблон не назначен ни одной странице, Docara ничего нового не проверяет.

Пример

Шаблон для страниц компонентов и правило, которое назначает его всем страницам каталога components/:

JSON
{
  "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 Что писать в разделе. Попадает в заготовку новой страницы как комментарий.

Какой странице какой шаблон

Шаблон страницы определяется так, первое подходящее срабатывает:

  1. template во front matter страницы.
  2. Правило в rules с полем template, путь которого подходит странице.

Если странице подходят правила с разными шаблонами, проверка остановится с AUTHORING_RULE_CONFLICT. В одном правиле можно указать и profile, и template.

Markdown
---
template: component
---

# Кнопка

Если раздела на странице нет нарочно, например у компонента нет своих классов, перечислите его id в template_omit:

Markdown
---
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 и снижают оценку полноты страницы.

Bash
php vendor/bin/docara validate page /ru/components/button/ --json

Новая страница по шаблону

docara scaffold page --template создаёт страницу со всеми разделами шаблона по порядку:

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

Программа пишет раздел между двумя метками, каждая на своей строке:

Markdown
## Классы

<!-- 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 разделов шаблона.

См. также