From 52bbcb7ad523b1be15e56655bfe0eb47bd35feef Mon Sep 17 00:00:00 2001 From: Anna Shpakovskaya Date: Tue, 18 Nov 2025 17:01:14 +0300 Subject: [PATCH 01/18] =?UTF-8?q?=D0=94=D0=BE=D0=BA=D1=83=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D1=82=D0=B0=D1=86=D0=B8=D1=8F=20=D0=95=D0=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ru/guides/single-source/build.md | 40 ++++ ru/guides/single-source/ei.md | 30 +++ ru/guides/single-source/includes.md | 49 +++++ ru/guides/single-source/presets.md | 58 ++++++ ru/guides/single-source/profiling.md | 259 ++++++++++++++++++++++++ ru/guides/single-source/toc_includes.md | 71 +++++++ 6 files changed, 507 insertions(+) create mode 100644 ru/guides/single-source/build.md create mode 100644 ru/guides/single-source/ei.md create mode 100644 ru/guides/single-source/includes.md create mode 100644 ru/guides/single-source/presets.md create mode 100644 ru/guides/single-source/profiling.md create mode 100644 ru/guides/single-source/toc_includes.md diff --git a/ru/guides/single-source/build.md b/ru/guides/single-source/build.md new file mode 100644 index 00000000..561e0366 --- /dev/null +++ b/ru/guides/single-source/build.md @@ -0,0 +1,40 @@ +# Локальная сборка YFM с переиспользованием (для КПБ) + +Для отладки документации с инклюдами или пресетами переменных, можно использовать локальную сборку YFM. + +{% note warning %} + +В локальной сборке YFM не отображается следующий функционал: + + * дополнительные возможности из npm (plantuml, LaTeX, вставка кода из файла, graphviz); + + * внешние файлы, которые не лежат в директории с ya.make и подтягиваются через макрос. + +{% endnote %} + +## Перед началом {#setup} + +1. [Установите Node.js](https://nodejs.org/ru/download/). Одновременно установится менеджер пакетов `npm`: он понадобится для работы локальной сборки. + +1. [Установите yfm-docs](https://diplodoc.com/docs/ru/tools/docs/). + +1. Проверьте, что yfm-docs установлен правильно. Например, посмотрите номер версии: + + ``` + yfm --version + ``` + +## Запуск сборки {#run-build} + + +Чтобы собрать документ, выполните команду: + +``` +yfm -i ./<корневой каталог документа> -o ./<директория с итогом сборки> --varsPreset "<имя пресета>" +``` + +Если в вашем документе используются пресеты переменных, для каждого пресета сборку необходимо запускать отдельно. + +Если в документе пресетов переменных нет — флаг `--varsPreset` использовать не нужно. В этом случае документ соберется со значением пресетов `default`. + +В директории с итогом сборки появится одна папка с файлами в формате `.html` для выбранного пресета. Если запустить сборку с другими значениями в ту же директорию, файлы перезапишутся. diff --git a/ru/guides/single-source/ei.md b/ru/guides/single-source/ei.md new file mode 100644 index 00000000..8ee05d64 --- /dev/null +++ b/ru/guides/single-source/ei.md @@ -0,0 +1,30 @@ +# Единый источник + +Единый источник — это способ организации проекта, который позволяет получить несколько похожих версий документа из одного и того же исходного текста. Например, справки для разных платформ, языков или аудиторий. + +Единый источник упрощает обновление проекта и снижает количество ошибок. Повторяющийся текст находится в одном месте, поэтому при обновлении не нужно искать и править все его вхождения. + +## Методы работы с единым источником {#methods} + +* [**Профилирование**](./profiling.md) используется для формирования нескольких похожих документов из одного документа-источника. Текст размечается с помощью [условных операторов](https://diplodoc.com/docs/ru/syntax/vars#conditions) или [переменных](https://diplodoc.com/docs/ru/syntax/vars). При сборке в каждый выходной документ подставляются только нужные фрагменты текста. + + Способ применяется, если общего контента больше, чем уникального. + +* **Переиспользование** контента позволяет подставлять повторяющиеся фрагменты текста внутри одного или нескольких документов. + + Способ применяется, если уникального контента больше, чем общего. + + Переиспользование обеспечивают: + + * [Инклюды](./includes.md) — отдельные файлы с текстом, ссылки на которые вставляются в нужном месте текста. При сборке текст из файла подставляется полностью. + * [Пресеты переменных](./presets.md) — набор переменных и их значений. При сборке документа в текст подставляется значение переменной в зависимости от условий сборки. + * [Вставки оглавлений](toc_includes.md) — блоки оглавления, которые вставляются в основное оглавление. + + +## Особенности {#peculiaritys} + +* Каталоги с изображениями и инклюдами принято размещать в папках с названием `_assets` и `_includes` соответственно. Символ `_` означает, что папка не будет отображаться в итоговой сборке, но может быть использована как источник. + +* Внутри проекта с профилированием можно дополнительно использовать инклюды или пресеты переменных, поэтому способы можно комбинировать. + +* Если из одного документа-источника необходимо опубликовать несколько документов на разных доменах, то нужно настроить конфигурационные файлы для [профилирования](./profiling.md#configs). В случае переиспользования возможна публикация нескольких документов только на одном домене с разными url. diff --git a/ru/guides/single-source/includes.md b/ru/guides/single-source/includes.md new file mode 100644 index 00000000..21bb3c63 --- /dev/null +++ b/ru/guides/single-source/includes.md @@ -0,0 +1,49 @@ +# Инклюды + +Вы можете вынести повторяющийся контент в отдельный файл и использовать его внутри документационного проекта в качестве страницы, раздела, абзаца или элемента списка. + +Переиспользование поможет сократить время работы с текстом: контент хранится в одном месте, а изменения применяются ко всему проекту. + + +## Порядок переиспользования {#steps} + +1. Создайте каталог для хранения повторяющегося контента. Инклюды принято размещать в папке `_includes`. + + {% note warning %} + + Файлы для переиспользования должны храниться в каталоге, имя которого начинается с символа `_`. + + {% endnote %} + +1. В каталоге `_includes` создайте md-файл с повторяющимся текстом. + +1. В файл документа добавьте ссылку на md-файл в место, которое предназначено для вставки: + + + ```markdown + {% include [Описание](../_includes/file.md) %} + ``` + Если заголовок файла не нужно подставлять, добавьте ключевое слово `notitle`: + + ```markdown + {% include notitle [Описание](../_includes/file.md) %} + ``` + + Чтобы подставить только один раздел из файла, добавьте к ссылке [якорь на заголовок](https://diplodoc.com/docs/ru/syntax/base#headers) соответствующего раздела: + + ```markdown + {% include notitle [Описание](../_includes/file.md#anchor) %} + ``` + + * `[Описание]` — описание файла. Информация для авторов документа, не влияет на сборку. + * `(../_includes/file.md)` — путь к файлу. + + {% note info %} + + Если подставляете раздел или абзац, отделите инклюд от основного текста пустой строкой сверху и снизу. + + Подставить одно или несколько предложений как часть абзаца нельзя. + + {% endnote %} + +Переиспользованный контент появится при сборке. Относительные ссылки в нем будут перестроены. diff --git a/ru/guides/single-source/presets.md b/ru/guides/single-source/presets.md new file mode 100644 index 00000000..c7271be7 --- /dev/null +++ b/ru/guides/single-source/presets.md @@ -0,0 +1,58 @@ +# Пресеты переменных + +Пресеты — это наборы переменных, которые позволяют переиспользовать повторяющийся контент и поддерживать несколько вариантов документации из одних и тех же исходных файлов. + +Пресеты объявляются в файле `presets.yaml`. Пресет `default` обязателен и содержит значения переменных по умолчанию. Переменные указываются в формате `<имя_переменной>: <значение>`. + +{% cut "Пример файла `presets.yaml`" %} + +```yaml +default: # набор значений по умолчанию + locale: ru + platform: browser + +ios: # набор значений для ios + platform: ios + +android: # набор значений для android + platform: android +``` + +{% endcut %} + +{% note info %} + +Файлов `presets.yaml` может быть несколько. Они будут учитываться в порядке уменьшения приоритета: от ближайшего к текущему файлу до самого близкого к корню проекта. + +{% cut "Пример" %} + +``` +input-folder +|-- .yfm +|-- toc.yaml +|-- presets.yaml // 2 +|-- index.yaml +|-- quickstart.md +|-- pages + |-- presets.yaml // 1 + |-- faq.md + |-- how-to.md +``` + +- При сборке файла `faq.md` значения переменных из файла `presets.yaml` № 1 в приоритете над переменными из файла № 2. + +- При сборке файла `quickstart.md` будут учитываться только значения переменных из файла `presets.yaml` № 2. + +{% endcut %} + +{% endnote %} + +Для простого переиспользования без профилирования все переменные указываются в пресете `default`. + +В случае использования переменных для [профилирования текста](./profiling.md) в файле `presets.yaml` укажите пресеты для каждого варианта профилирования. При сборке значения переменных берутся из пресета `default` или пресета, который указан в [конфигурационном файле `.yfm`](https://diplodoc.com/docs/ru/settings#config) в параметре `varsPreset`. + + +#### Узнайте больше + +- [Как работать с переменными](https://diplodoc.com/docs/ru/syntax/vars) + diff --git a/ru/guides/single-source/profiling.md b/ru/guides/single-source/profiling.md new file mode 100644 index 00000000..de3a4ef3 --- /dev/null +++ b/ru/guides/single-source/profiling.md @@ -0,0 +1,259 @@ +# Профилирование + +Текст размечается с помощью [условных операторов](https://diplodoc.com/docs/ru/syntax/vars#conditions) или [переменных](https://diplodoc.com/docs/ru/syntax/vars). При сборке в каждый выходной документ подставляются только нужные фрагменты текста. + +## Организация проекта + +1. В корне проекта создайте папку `common` с исходными файлами. + +1. В корне проекта создайте папки для каждой версии документа. Например, `android` и `ios` для разных платформ. + +1. В папках для версий документов настройте [конфигурационные файлы](#configs). + +1. В корне проекта добавьте общий [файл `a.yaml`](#a-yaml) — он запускает сборку всех версий документа при изменении в исходных файлах. + +Пример организации структуры: + +``` +project_name +├── common # папка с файлами проекта +│ ├── ru # языковая папка +│ │ ├── index.md +│ | ├── presets.yaml +│ | └── toc.yaml +| └── en # языковая папка +│ ├── index.md +│ ├── presets.yaml +│ └── toc.yaml +├── document_name_1 # Папка собираемого документа, например android, windows или tld-com +│ ├── .yfm +│ ├── a.yaml +│ └── ya.make +├── document_name_2 +│ ├── .yfm +│ ├── a.yaml +│ └── ya.make +├── document_name_3 +| ├── .yfm +| ├── a.yaml +| └── ya.make +└a.yaml # общий файл a.yaml +``` + +## Шаг 1. Добавьте пресеты переменных {#prepare-conditions} + +Cоздайте [файл `presets.yaml`](https://diplodoc.com/docs/ru/presets.md). Общий файл располагается в корневой директории проекта и содержит все переменные для каждого условия профилирования. + +Значения переменных, которые установлены по умолчанию, поместите в пресет `default`. Он является обязательным. + +Уникальные значения поместите в отдельные пресеты для каждого условия профилирования. + +{% cut "Пример файла `presets.yaml` для разных платформ" %} + +``` yaml +default: # набор значений по умолчанию + locale: ru + platform: browser + +ios: # набор значений для ios + platform: ios + +android: # набор значений для android + platform: android + ``` + +{% endcut %} + +Обычно условия профилирования называют `product`, `platform`, `audience`, но можно использовать и любые другие имена, которые приняты в вашем проекте. + +#### Узнайте больше + +- [Как работать с переменными](https://diplodoc.com/docs/ru/syntax/vars) + + +## Шаг 2. Разметьте текст документа {#set-conditions-text} + +Текст размечается с помощью [условных операторов](https://diplodoc.com/docs/ru/syntax/vars#conditions) или [переменных](https://diplodoc.com/docs/ru/syntax/vars). + +{% note warning %} + +Если текст размечен с помощью переменных, то в файле `presets.yaml` должны быть пресеты для каждого варианта профилирования. При сборке значения переменных берутся из пресета `default` и пресета, который указан в [конфигурационном файле `.yfm`](https://diplodoc.com/docs/ru/settings#config) в параметре `varsPreset`. + +{% endnote %} + +Условия для профилирования могут быть составными. Несколько условий объединяются с помощью операторов `or` или `and`. + +{% cut "Примеры разметки условными операторами" %} + + +**Три фрагмента, которые отличаются для каждой платформы:** + +``` +{% if platform == "ios" %} +Скачайте приложение в [App Store](https://www.apple.com/ios/app-store/). +{% endif %} + +{% if platform == "android" %} +Скачайте приложение в [Google Play](https://play.google.com). +{% endif %} + +{% if platform == "browser" %} +Откройте страницу в браузере. +{% endif %} +``` + +**Фрагмент можно отнести к нескольким платформам:** + +``` +{% if platform == "ios" or platform == "android" %} +Скачайте приложение. +{% endif %} +``` + +**Фрагмент должен отображаться для определенной платформы и только в выбранном регионе:** + +``` +{% if platform == "browser" and locale == "ru" %} +Откройте страницу example.ru. +{% endif %} +``` + +{% endcut %} + + +## Шаг 3. Разметьте оглавление документа {#set-conditions-toc} + +[Оглавление документа `toc.yaml`](https://diplodoc.com/docs/ru/project/toc) размечается при помощи условного оператора `when`: + +``` +when: условие == "значение" +``` + +{% cut "Примеры" %} + +**Две страницы, которые отображаются для разных платформ:** + + ```yaml + - name: Обзор iOS + href: iOS-overview.md + when: platform == "ios" + - name: Обзор Android + href: android-overview.md + when: platform == "android" + ``` + +**Одна страница отображается для нескольких платформ:** + +```yaml +- name: Обзор + href: overview.md + when: platform == "ios" or platform == "android" +``` + +**Страница должна отображаться для определенной платформы и только в выбранном регионе:** + +```yaml +- name: Обзор + href: overview.md + when: platform == "ios" and locale == "ru" +``` + +{% endcut %} + +[//]: # (TODO: вычитать раздел 4) + +## Шаг 4. Настройте конфигурационные файлы {#configs} + +Конфигурационные файлы необходимы для правильной сборки и публикации проекта. + +{% note info %} + +Если для проекта необходима автоматическая выкладка в прод, ее можно будет настроить только для одного из документов проекта, для остальных нужно будет делать ручную выкладку. Подробнее об этом можно почитать в [разделе Выкладка через Арканум](https://docs.yandex-team.ru/docstools/deploy/release#vykladka-cherez-arkanum). + +{% endnote %} + + +### Файл `.yfm` {#yfm} + +[В конфигурационный файл `.yfm`](https://diplodoc.com/docs/ru/settings#config) добавьте следующие параметры сборки: + +```yaml +apply-presets: true +varsPreset: "имя-пресета" +``` + +В поле `varsPreset` укажите имя пресета из [шага 1](#prepare-conditions). + + +### Файл `ya.make` {#yamake} + +В [конфигурационный файл `ya.make`](https://docs.yandex-team.ru/docstools/settings/yamake) для каждого документа, который собирается из единого источника, добавьте макрос `DOCS_DIR` и укажите путь от корня Аркадии до папки с документом-источником: + +Пример: + +``` +DOCS_DIR (docs/yateam/ei/common) +``` + +[//]: # (Для файла `ya.make`, который находится в папке с документом-источником, указывать макрос `DOCS_DIR` не нужно.) + + +### Файл `a.yaml` {#a-yaml} + +[Конфигурационный файл `a.yaml`](https://docs.yandex-team.ru/docstools/settings/ayaml) содержит настройки деплоя. Деплой настраивается отдельно для каждого документа. + +1. В корневую папку документации добавьте общий файл `a.yaml`. + + ```yaml + title: title + service: service + ci: + on-demand-auto: + - tags: + - docs-build + - docs-release + ``` + + + {% note warning %} + + Общий файл `a.yaml` обязательный. Он разрешает автоматически запускать деплой для всех документов при изменении исходных файлов. + + {% endnote %} + +1. Добавьте файл `a.yaml` в корень каждого документа, собираемого из единого источника. Заполните поля `title`, `ci.secret`, `ci.runtime`. В блоках `actions` и `releases` укажите путь до директории с общим файлом `a.yaml`. + + ```yaml + title: title + service: service + + ci: + includes: + docs: ci/registry/common/docs/docs.a.yaml + + extends: "docs#/any/default-config" + + secret: sec-*********** + runtime: + sandbox: + owner: ****** + notifications: + - statuses: FAILURE + transport: email + recipients: ******** + + actions: + precommit: + triggers: !override + - on: pr + on-demand: true + filters: + - sub-paths: ['**'] + - abs-paths: ['<путь от корня Аркадии до директории с общим a.yaml>/**'] + + releases: + docs: + filters: !override + - sub-paths: ['**'] + - abs-paths: ['build/platform/yfm', '<путь от корня Аркадии до директории с общим a.yaml>/**'] + ``` diff --git a/ru/guides/single-source/toc_includes.md b/ru/guides/single-source/toc_includes.md new file mode 100644 index 00000000..28c5f679 --- /dev/null +++ b/ru/guides/single-source/toc_includes.md @@ -0,0 +1,71 @@ +# Вставки оглавлений + +В [файл оглавления `toc.yaml`](https://docs.yandex-team.ru/docstools/project/toc) можно вставить оглавления из других файлов с расширением `.yaml`. При вставке отображаются все страницы, которые используются в оглавлении. + +## Как вставить оглавление + +Чтобы включить оглавление как раздел, добавьте в файл `toc.yaml` следующую конструкцию: + +```yaml +- name: <название раздела> + include: + path: <путь до вставляемого файла> +``` + +Чтобы включить оглавление без создания раздела, добавьте в файл `toc.yaml` следующую конструкцию: + +```yaml +- include: { path: <путь до вставляемого файла> } +``` + +По умолчанию указывается абсолютный путь от корня проекта. + +Во включаемом файле `.yaml` должен быть один блок `items`, который содержит список страниц и разделов. + +Пример: + +```yaml +items: + - name: Название страницы + href: page.md +``` + +### Режимы вставки оглавлений {#include-mode} + +Режимы вставки оглавлений задаются в свойстве `mode`: + +* `root_merge` — режим по умолчанию. В нем вместе с оглавлением скопируются все используемые файлы и директории. Копирование происходит с перезаписью файлов. Относительные ссылки не перестраиваются. +* `merge` — аналогично `root_merge`, но путь к файлу с оглавлением указывается относительно файла, в котором вы используете `include`. +* `link` — не изменяет структуру проекта. Относительные ссылки перестраиваются. + +{% cut "Примеры использования режимов" %} + +Чтобы использовать относительный путь, зададим режим `merge`: + +**Вставка страницы** + +   +: ```yaml + - include: { mode: merge, path: ../relative/path/to/toc.yaml } + ``` + +**Вставка раздела** + +  +: ```yaml + - name: Название раздела + include: + path: ../relative/path/to/toc.yaml + mode: merge + ``` + +{% endcut %} + + +## Переиспользование оглавления в проектах с единым источником + +1. В директории с документом-источником создайте файл с общей частью оглавления. +1. В директорию с документом, собираемым из единого источника, добавьте файл оглавления `toc.yaml`. Включите в него файл оглавления из директории с документом-источником. +1. В директорию с документом, собираемым из единого источника, добавьте [файл `presets.yaml`](presets.md) и все страницы с уникальным для этого документа контентом. + +Пример проекта в Аркадии — справка [Яндекс Заданий](https://a.yandex-team.ru/arcadia/docs/support/tasks). From 42a00098163673e0dfadb11a17839cd70b4318cb Mon Sep 17 00:00:00 2001 From: Anna Shpakovskaya Date: Tue, 18 Nov 2025 17:15:03 +0300 Subject: [PATCH 02/18] =?UTF-8?q?=D0=9E=D0=B3=D0=BB=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ru/toc.yaml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/ru/toc.yaml b/ru/toc.yaml index be693873..8d72b429 100644 --- a/ru/toc.yaml +++ b/ru/toc.yaml @@ -183,6 +183,19 @@ items: href: guides/content-analytics.md - name: Настройка личного домена href: personal-domain-ya-cloud.md + - name: Единый источник + href: guides/single-source/ei.md + items: + - name: Профилирование + href: guides/single-source/profiling.md + - name: Пресеты переменных + href: guides/single-source/presets.md + - name: Инклюды + href: guides/single-source/includes.md + - name: Вставки оглавлений + href: guides/single-source/toc_includes.md + - name: Локальная сборка YFM с переиспользованием (для КПБ) + href: guides/single-source/build.md - name: Автогенерация и интеграция документации href: guides/includers.md items: From aa389eaae0d55b398e5f3797ea18140e86db75cc Mon Sep 17 00:00:00 2001 From: Anna Shpakovskaya Date: Wed, 19 Nov 2025 09:59:15 +0300 Subject: [PATCH 03/18] =?UTF-8?q?=D0=9F=D1=80=D0=B8=D0=BC=D0=B5=D1=80?= =?UTF-8?q?=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ru/guides/single-source/ei.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/ru/guides/single-source/ei.md b/ru/guides/single-source/ei.md index 8ee05d64..83d1ea73 100644 --- a/ru/guides/single-source/ei.md +++ b/ru/guides/single-source/ei.md @@ -4,6 +4,15 @@ Единый источник упрощает обновление проекта и снижает количество ошибок. Повторяющийся текст находится в одном месте, поэтому при обновлении не нужно искать и править все его вхождения. +{% cut "Примеры" %} + +* [Справка Яндекс Почты](https://yandex.ru/support/yandex-360/customers/mail/ru/web/letter/create/letter-from-mobile?tabs=defaultTabsGroup-002l0bah_android) +* [Справка Яндекс Музыки](https://yandex.ru/support/music/ru/new-template/gettingstart) +* [Справка Кинопоиска](https://yandex.ru/support/kinopoisk/ru/authorization/get-started) + +{% endcut %} + + ## Методы работы с единым источником {#methods} * [**Профилирование**](./profiling.md) используется для формирования нескольких похожих документов из одного документа-источника. Текст размечается с помощью [условных операторов](https://diplodoc.com/docs/ru/syntax/vars#conditions) или [переменных](https://diplodoc.com/docs/ru/syntax/vars). При сборке в каждый выходной документ подставляются только нужные фрагменты текста. From ad97932d3b48bc1534f94786129a068598f863e5 Mon Sep 17 00:00:00 2001 From: Anna Shpakovskaya Date: Wed, 19 Nov 2025 10:24:27 +0300 Subject: [PATCH 04/18] =?UTF-8?q?=D0=9F=D1=83=D1=82=D1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ru/guides/single-source/includes.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ru/guides/single-source/includes.md b/ru/guides/single-source/includes.md index 21bb3c63..316e72c5 100644 --- a/ru/guides/single-source/includes.md +++ b/ru/guides/single-source/includes.md @@ -21,22 +21,22 @@ ```markdown - {% include [Описание](../_includes/file.md) %} + {% include [Описание](../../_includes/file.md) %} ``` Если заголовок файла не нужно подставлять, добавьте ключевое слово `notitle`: ```markdown - {% include notitle [Описание](../_includes/file.md) %} + {% include notitle [Описание](../../_includes/file.md) %} ``` Чтобы подставить только один раздел из файла, добавьте к ссылке [якорь на заголовок](https://diplodoc.com/docs/ru/syntax/base#headers) соответствующего раздела: ```markdown - {% include notitle [Описание](../_includes/file.md#anchor) %} + {% include notitle [Описание](../../_includes/file.md#anchor) %} ``` * `[Описание]` — описание файла. Информация для авторов документа, не влияет на сборку. - * `(../_includes/file.md)` — путь к файлу. + * `(../../_includes/file.md)` — путь к файлу. {% note info %} From f44f77c2da041afb6c92abe557c11c608008aaf3 Mon Sep 17 00:00:00 2001 From: Anna Shpakovskaya Date: Wed, 19 Nov 2025 12:02:49 +0300 Subject: [PATCH 05/18] =?UTF-8?q?=D0=9F=D1=80=D0=B0=D0=B2=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ru/guides/single-source/profiling.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ru/guides/single-source/profiling.md b/ru/guides/single-source/profiling.md index de3a4ef3..f9ed10f8 100644 --- a/ru/guides/single-source/profiling.md +++ b/ru/guides/single-source/profiling.md @@ -42,7 +42,7 @@ project_name ## Шаг 1. Добавьте пресеты переменных {#prepare-conditions} -Cоздайте [файл `presets.yaml`](https://diplodoc.com/docs/ru/presets.md). Общий файл располагается в корневой директории проекта и содержит все переменные для каждого условия профилирования. +Cоздайте [файл `presets.yaml`](presets.md). Общий файл располагается в корневой директории проекта и содержит все переменные для каждого условия профилирования. Значения переменных, которые установлены по умолчанию, поместите в пресет `default`. Он является обязательным. From c0856d60600e00cc9d68ec8c2a9e174d7b8f0837 Mon Sep 17 00:00:00 2001 From: Anna Shpakovskaya Date: Fri, 21 Nov 2025 14:11:16 +0300 Subject: [PATCH 06/18] =?UTF-8?q?=D0=9F=D1=80=D0=B0=D0=B2=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ru/guides/single-source/build.md | 5 +-- ru/guides/single-source/ei.md | 41 ++++++++++++++++++++++--- ru/guides/single-source/profiling.md | 28 ++--------------- ru/guides/single-source/toc_includes.md | 9 +----- 4 files changed, 41 insertions(+), 42 deletions(-) diff --git a/ru/guides/single-source/build.md b/ru/guides/single-source/build.md index 561e0366..034ae700 100644 --- a/ru/guides/single-source/build.md +++ b/ru/guides/single-source/build.md @@ -4,11 +4,8 @@ {% note warning %} -В локальной сборке YFM не отображается следующий функционал: +В локальной сборке YFM не отображаются дополнительные возможности из npm (plantuml, LaTeX, вставка кода из файла, graphviz); - * дополнительные возможности из npm (plantuml, LaTeX, вставка кода из файла, graphviz); - - * внешние файлы, которые не лежат в директории с ya.make и подтягиваются через макрос. {% endnote %} diff --git a/ru/guides/single-source/ei.md b/ru/guides/single-source/ei.md index 83d1ea73..3f2b1704 100644 --- a/ru/guides/single-source/ei.md +++ b/ru/guides/single-source/ei.md @@ -4,14 +4,19 @@ Единый источник упрощает обновление проекта и снижает количество ошибок. Повторяющийся текст находится в одном месте, поэтому при обновлении не нужно искать и править все его вхождения. -{% cut "Примеры" %} +### Примеры * [Справка Яндекс Почты](https://yandex.ru/support/yandex-360/customers/mail/ru/web/letter/create/letter-from-mobile?tabs=defaultTabsGroup-002l0bah_android) + +Пользователь мобильного приложения Яндекс Почты может найти в справке инструкции, адаптированные под смартфон. В то же время пользователь веб-версии видит инструкции, учитывающие особенности работы с сервисом в браузере. При этом обе версии справки создаются на основе одного исходного текста. + * [Справка Яндекс Музыки](https://yandex.ru/support/music/ru/new-template/gettingstart) -* [Справка Кинопоиска](https://yandex.ru/support/kinopoisk/ru/authorization/get-started) -{% endcut %} +После установки Яндекс Музыки пользователь может обратиться к справке, чтобы разобраться с работой сервиса. Справка содержит понятные инструкции, адаптированные под конкретную платформу. + +* [Справка Кинопоиска](https://yandex.ru/support/kinopoisk/ru/authorization/get-started) +Если пользователь сталкивается с трудностями при авторизации в Кинопоиске, он может обратиться к справке. Там он найдет пошаговые инструкции, объясняющие все необходимые действия. При этом пользователи из разных стран или с других платформ увидят версии справки, учитывающие языковые и интерфейсные особенности. ## Методы работы с единым источником {#methods} @@ -19,6 +24,14 @@ Способ применяется, если общего контента больше, чем уникального. + {% cut "Пример" %} + + В [справке Яндекс Почты](https://yandex.ru/support/yandex-360/customers/mail/ru/) в одном исходном тексте содержатся инструкции по работе с сервисом. С помощью профилирования из этого текста формируются две версии справки: + * для мобильного приложения включаются фрагменты, описывающие действия, специфичные для смартфона (например, действия для [написания письма](https://yandex.ru/support/yandex-360/customers/mail/ru/web/letter/create/letter-from-mobile?tabs=defaultTabsGroup-nrz4zeaf_android)); + * для веб-версии включаются фрагменты, описывающие действия, специфичные для браузера (например, [добавление файлов](https://yandex.ru/support/yandex-360/customers/mail/ru/web/letter/attachments)). + + {% endcut %} + * **Переиспользование** контента позволяет подставлять повторяющиеся фрагменты текста внутри одного или нескольких документов. Способ применяется, если уникального контента больше, чем общего. @@ -26,9 +39,29 @@ Переиспользование обеспечивают: * [Инклюды](./includes.md) — отдельные файлы с текстом, ссылки на которые вставляются в нужном месте текста. При сборке текст из файла подставляется полностью. + + {% cut "Пример" %} + + В [справке Яндекс Музыки](https://yandex.ru/support/music/ru/) некоторые разделы содержат повторяющуюся информацию, например, о [способах авторизации](https://yandex.ru/support/music/ru/new-template/gettingstart). Такие блоки оформляются в виде инклюдов и включаются в нужные места текста. При изменении способов авторизации достаточно отредактировать только один файл. + + {% endcut %} + * [Пресеты переменных](./presets.md) — набор переменных и их значений. При сборке документа в текст подставляется значение переменной в зависимости от условий сборки. + + {% cut "Пример" %} + + В [справке Кинопоиска](https://yandex.ru/support/kinopoisk/ru/) в разделе [«Покупка и аренда фильмов»](https://yandex.ru/support/kinopoisk/ru/online/content/buing-renting) могут использоваться переменные для методов оплаты, которые зависят от региона. В пресетах задаются разные значения для переменных `метод_оплаты` в зависимости от страны пользователя. При генерации версии справки для конкретного региона в текст подставляются соответствующие значения, что позволяет предоставить пользователям информацию, релевантную их местоположению и доступным сервисам. + + {% endcut %} + * [Вставки оглавлений](toc_includes.md) — блоки оглавления, которые вставляются в основное оглавление. + {% cut "Пример" %} + + В [справке Яндекс Почты](https://yandex.ru/support/yandex-360/customers/mail/ru/) основная справка содержит несколько крупных разделов, например, [«Управление контактами»](https://yandex.ru/support/yandex-360/customers/mail/ru/web/abook), [«Настройка почтового ящика»](https://yandex.ru/support/yandex-360/customers/mail/ru/box-settings). Для каждого раздела создается свой блок оглавления, который включает подразделы и ключевые темы. С помощью вставок оглавлений эти блоки включаются в общее оглавление справки, что позволяет пользователям быстро находить нужные разделы и ориентироваться в большом объеме информации. + + {% endcut %} + ## Особенности {#peculiaritys} @@ -36,4 +69,4 @@ * Внутри проекта с профилированием можно дополнительно использовать инклюды или пресеты переменных, поэтому способы можно комбинировать. -* Если из одного документа-источника необходимо опубликовать несколько документов на разных доменах, то нужно настроить конфигурационные файлы для [профилирования](./profiling.md#configs). В случае переиспользования возможна публикация нескольких документов только на одном домене с разными url. +* Если из одного документа-источника необходимо опубликовать несколько документов на разных доменах, то нужно настроить конфигурационные файлы для [профилирования](./profiling.md#configs). В случае переиспользования возможна публикация нескольких документов только на одном домене с разными URL. diff --git a/ru/guides/single-source/profiling.md b/ru/guides/single-source/profiling.md index f9ed10f8..62b1974b 100644 --- a/ru/guides/single-source/profiling.md +++ b/ru/guides/single-source/profiling.md @@ -28,15 +28,12 @@ project_name ├── document_name_1 # Папка собираемого документа, например android, windows или tld-com │ ├── .yfm │ ├── a.yaml -│ └── ya.make ├── document_name_2 │ ├── .yfm │ ├── a.yaml -│ └── ya.make ├── document_name_3 | ├── .yfm | ├── a.yaml -| └── ya.make └a.yaml # общий файл a.yaml ``` @@ -166,16 +163,9 @@ when: условие == "значение" Конфигурационные файлы необходимы для правильной сборки и публикации проекта. -{% note info %} - -Если для проекта необходима автоматическая выкладка в прод, ее можно будет настроить только для одного из документов проекта, для остальных нужно будет делать ручную выкладку. Подробнее об этом можно почитать в [разделе Выкладка через Арканум](https://docs.yandex-team.ru/docstools/deploy/release#vykladka-cherez-arkanum). - -{% endnote %} - - ### Файл `.yfm` {#yfm} -[В конфигурационный файл `.yfm`](https://diplodoc.com/docs/ru/settings#config) добавьте следующие параметры сборки: +В [конфигурационный файл `.yfm`](https://diplodoc.com/docs/ru/settings#config) добавьте следующие параметры сборки: ```yaml apply-presets: true @@ -184,23 +174,9 @@ varsPreset: "имя-пресета" В поле `varsPreset` укажите имя пресета из [шага 1](#prepare-conditions). - -### Файл `ya.make` {#yamake} - -В [конфигурационный файл `ya.make`](https://docs.yandex-team.ru/docstools/settings/yamake) для каждого документа, который собирается из единого источника, добавьте макрос `DOCS_DIR` и укажите путь от корня Аркадии до папки с документом-источником: - -Пример: - -``` -DOCS_DIR (docs/yateam/ei/common) -``` - -[//]: # (Для файла `ya.make`, который находится в папке с документом-источником, указывать макрос `DOCS_DIR` не нужно.) - - ### Файл `a.yaml` {#a-yaml} -[Конфигурационный файл `a.yaml`](https://docs.yandex-team.ru/docstools/settings/ayaml) содержит настройки деплоя. Деплой настраивается отдельно для каждого документа. +Конфигурационный файл `a.yaml` содержит настройки деплоя. Деплой настраивается отдельно для каждого документа. 1. В корневую папку документации добавьте общий файл `a.yaml`. diff --git a/ru/guides/single-source/toc_includes.md b/ru/guides/single-source/toc_includes.md index 28c5f679..24d4c548 100644 --- a/ru/guides/single-source/toc_includes.md +++ b/ru/guides/single-source/toc_includes.md @@ -1,6 +1,6 @@ # Вставки оглавлений -В [файл оглавления `toc.yaml`](https://docs.yandex-team.ru/docstools/project/toc) можно вставить оглавления из других файлов с расширением `.yaml`. При вставке отображаются все страницы, которые используются в оглавлении. +В [файл оглавления `toc.yaml`](https://diplodoc.com/docs/ru/project/toc) можно вставить оглавления из других файлов с расширением `.yaml`. При вставке отображаются все страницы, которые используются в оглавлении. ## Как вставить оглавление @@ -62,10 +62,3 @@ items: {% endcut %} -## Переиспользование оглавления в проектах с единым источником - -1. В директории с документом-источником создайте файл с общей частью оглавления. -1. В директорию с документом, собираемым из единого источника, добавьте файл оглавления `toc.yaml`. Включите в него файл оглавления из директории с документом-источником. -1. В директорию с документом, собираемым из единого источника, добавьте [файл `presets.yaml`](presets.md) и все страницы с уникальным для этого документа контентом. - -Пример проекта в Аркадии — справка [Яндекс Заданий](https://a.yandex-team.ru/arcadia/docs/support/tasks). From 37c168ae22885b605b3ee049910a918fc39246c0 Mon Sep 17 00:00:00 2001 From: Anna Shpakovskaya Date: Mon, 24 Nov 2025 11:48:13 +0300 Subject: [PATCH 07/18] =?UTF-8?q?=D0=9F=D1=80=D0=B8=D0=BC=D0=B5=D1=80?= =?UTF-8?q?=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ru/_images/audio-track.png | Bin 0 -> 69490 bytes ru/guides/single-source/build.md | 2 +- ru/guides/single-source/ei.md | 15 +++--- ru/guides/single-source/profiling.md | 66 --------------------------- 4 files changed, 10 insertions(+), 73 deletions(-) create mode 100644 ru/_images/audio-track.png diff --git a/ru/_images/audio-track.png b/ru/_images/audio-track.png new file mode 100644 index 0000000000000000000000000000000000000000..24c1f9bb68aa537be5536cb84f8362a89f8039c1 GIT binary patch literal 69490 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 R8`r>pmz31bWh$EZ|3CMPP!0e9 literal 0 HcmV?d00001 diff --git a/ru/guides/single-source/build.md b/ru/guides/single-source/build.md index 034ae700..2025e14d 100644 --- a/ru/guides/single-source/build.md +++ b/ru/guides/single-source/build.md @@ -1,4 +1,4 @@ -# Локальная сборка YFM с переиспользованием (для КПБ) +# Локальная сборка YFM с переиспользованием Для отладки документации с инклюдами или пресетами переменных, можно использовать локальную сборку YFM. diff --git a/ru/guides/single-source/ei.md b/ru/guides/single-source/ei.md index 3f2b1704..850d4b65 100644 --- a/ru/guides/single-source/ei.md +++ b/ru/guides/single-source/ei.md @@ -8,15 +8,17 @@ * [Справка Яндекс Почты](https://yandex.ru/support/yandex-360/customers/mail/ru/web/letter/create/letter-from-mobile?tabs=defaultTabsGroup-002l0bah_android) -Пользователь мобильного приложения Яндекс Почты может найти в справке инструкции, адаптированные под смартфон. В то же время пользователь веб-версии видит инструкции, учитывающие особенности работы с сервисом в браузере. При этом обе версии справки создаются на основе одного исходного текста. +Пользователь мобильного приложения Яндекс Почты может найти в справке инструкции, адаптированные [под смартфон](https://yandex.ru/support/yandex-360/customers/mail/ru/web/letter/create/letter-from-mobile?tabs=defaultTabsGroup-002l0bah_android). В то же время пользователь [веб-версии](https://yandex.ru/support/yandex-360/customers/mail/ru/web/letter/create/write-letter) видит инструкции, учитывающие особенности работы с сервисом в браузере. При этом обе версии справки создаются на основе одного исходного текста. * [Справка Яндекс Музыки](https://yandex.ru/support/music/ru/new-template/gettingstart) -После установки Яндекс Музыки пользователь может обратиться к справке, чтобы разобраться с работой сервиса. Справка содержит понятные инструкции, адаптированные под конкретную платформу. +После установки Яндекс Музыки пользователь может обратиться к справке, чтобы разобраться с работой сервиса. Справка содержит понятные инструкции, адаптированные под конкретную платформу. Например, [Xiaomi GetApps](https://global.app.mi.com/details?lo=RU&la=ru&id=ru.yandex.music) или [компьютер](https://music.yandex.ru/download/). * [Справка Кинопоиска](https://yandex.ru/support/kinopoisk/ru/authorization/get-started) -Если пользователь сталкивается с трудностями при авторизации в Кинопоиске, он может обратиться к справке. Там он найдет пошаговые инструкции, объясняющие все необходимые действия. При этом пользователи из разных стран или с других платформ увидят версии справки, учитывающие языковые и интерфейсные особенности. +При просмотре фильма пользователь может выбирать аудиодорожку на нужном ему языке: + +![Audio track](../../_images/audio-track.png){width=400} ## Методы работы с единым источником {#methods} @@ -42,7 +44,7 @@ {% cut "Пример" %} - В [справке Яндекс Музыки](https://yandex.ru/support/music/ru/) некоторые разделы содержат повторяющуюся информацию, например, о [способах авторизации](https://yandex.ru/support/music/ru/new-template/gettingstart). Такие блоки оформляются в виде инклюдов и включаются в нужные места текста. При изменении способов авторизации достаточно отредактировать только один файл. + В [справке Яндекс Музыки](https://yandex.ru/support/music/ru/) некоторые разделы содержат повторяющуюся информацию. Такие блоки оформляются в виде инклюдов и включаются в нужные места текста. Например, [Дополнительные преимущества в сервисах Яндекса](https://yandex.ru/support/music/ru/new-template/gettingstart) и [Что входит в подписку Плюса](https://yandex.ru/support/music/ru/access-and-account/why-is-paid). {% endcut %} @@ -50,7 +52,9 @@ {% cut "Пример" %} - В [справке Кинопоиска](https://yandex.ru/support/kinopoisk/ru/) в разделе [«Покупка и аренда фильмов»](https://yandex.ru/support/kinopoisk/ru/online/content/buing-renting) могут использоваться переменные для методов оплаты, которые зависят от региона. В пресетах задаются разные значения для переменных `метод_оплаты` в зависимости от страны пользователя. При генерации версии справки для конкретного региона в текст подставляются соответствующие значения, что позволяет предоставить пользователям информацию, релевантную их местоположению и доступным сервисам. + В [справке Яндекс Почты](https://yandex.ru/support/yandex-360/customers/mail/ru/) переменная `действие_с_письмом` может иметь разные значения: + * для [мобильного приложения](https://yandex.ru/support/yandex-360/customers/mail/ru/web/letter/create/letter-from-mobile?tabs=defaultTabsGroup-08mm4747_android) — «Нажмите значок в правом нижнем углу экрана»; + * для [веб-версии](https://yandex.ru/support/yandex-360/customers/mail/ru/web/letter/create/write-letter) — «Чтобы создать новое письмо, в левом верхнем углу экрана нажмите „Написать“». {% endcut %} @@ -62,7 +66,6 @@ {% endcut %} - ## Особенности {#peculiaritys} * Каталоги с изображениями и инклюдами принято размещать в папках с названием `_assets` и `_includes` соответственно. Символ `_` означает, что папка не будет отображаться в итоговой сборке, но может быть использована как источник. diff --git a/ru/guides/single-source/profiling.md b/ru/guides/single-source/profiling.md index 62b1974b..4b8028fd 100644 --- a/ru/guides/single-source/profiling.md +++ b/ru/guides/single-source/profiling.md @@ -10,8 +10,6 @@ 1. В папках для версий документов настройте [конфигурационные файлы](#configs). -1. В корне проекта добавьте общий [файл `a.yaml`](#a-yaml) — он запускает сборку всех версий документа при изменении в исходных файлах. - Пример организации структуры: ``` @@ -27,14 +25,10 @@ project_name │ └── toc.yaml ├── document_name_1 # Папка собираемого документа, например android, windows или tld-com │ ├── .yfm -│ ├── a.yaml ├── document_name_2 │ ├── .yfm -│ ├── a.yaml ├── document_name_3 | ├── .yfm -| ├── a.yaml -└a.yaml # общий файл a.yaml ``` ## Шаг 1. Добавьте пресеты переменных {#prepare-conditions} @@ -173,63 +167,3 @@ varsPreset: "имя-пресета" ``` В поле `varsPreset` укажите имя пресета из [шага 1](#prepare-conditions). - -### Файл `a.yaml` {#a-yaml} - -Конфигурационный файл `a.yaml` содержит настройки деплоя. Деплой настраивается отдельно для каждого документа. - -1. В корневую папку документации добавьте общий файл `a.yaml`. - - ```yaml - title: title - service: service - ci: - on-demand-auto: - - tags: - - docs-build - - docs-release - ``` - - - {% note warning %} - - Общий файл `a.yaml` обязательный. Он разрешает автоматически запускать деплой для всех документов при изменении исходных файлов. - - {% endnote %} - -1. Добавьте файл `a.yaml` в корень каждого документа, собираемого из единого источника. Заполните поля `title`, `ci.secret`, `ci.runtime`. В блоках `actions` и `releases` укажите путь до директории с общим файлом `a.yaml`. - - ```yaml - title: title - service: service - - ci: - includes: - docs: ci/registry/common/docs/docs.a.yaml - - extends: "docs#/any/default-config" - - secret: sec-*********** - runtime: - sandbox: - owner: ****** - notifications: - - statuses: FAILURE - transport: email - recipients: ******** - - actions: - precommit: - triggers: !override - - on: pr - on-demand: true - filters: - - sub-paths: ['**'] - - abs-paths: ['<путь от корня Аркадии до директории с общим a.yaml>/**'] - - releases: - docs: - filters: !override - - sub-paths: ['**'] - - abs-paths: ['build/platform/yfm', '<путь от корня Аркадии до директории с общим a.yaml>/**'] - ``` From a736f8a573536766430ca5fb838099e35feb5ead Mon Sep 17 00:00:00 2001 From: Anna Shpakovskaya Date: Mon, 24 Nov 2025 17:19:33 +0300 Subject: [PATCH 08/18] =?UTF-8?q?=D0=9E=D0=B3=D0=BB=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ru/toc.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ru/toc.yaml b/ru/toc.yaml index 8d72b429..653fb958 100644 --- a/ru/toc.yaml +++ b/ru/toc.yaml @@ -194,7 +194,7 @@ items: href: guides/single-source/includes.md - name: Вставки оглавлений href: guides/single-source/toc_includes.md - - name: Локальная сборка YFM с переиспользованием (для КПБ) + - name: Локальная сборка YFM с переиспользованием href: guides/single-source/build.md - name: Автогенерация и интеграция документации href: guides/includers.md From 350548b69a52859f687bcd98508bbd8c242c0cc1 Mon Sep 17 00:00:00 2001 From: Anna Shpakovskaya Date: Thu, 4 Dec 2025 14:16:28 +0300 Subject: [PATCH 09/18] =?UTF-8?q?=D0=9F=D1=80=D0=B0=D0=B2=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ru/guides/single-source/build.md | 24 +------- ru/guides/single-source/includes.md | 49 ---------------- ru/guides/single-source/{ei.md => index.md} | 32 ++++------- ru/guides/single-source/presets.md | 58 ------------------- ru/guides/single-source/profiling.md | 2 +- ru/guides/single-source/toc_includes.md | 64 --------------------- ru/toc.yaml | 8 +-- 7 files changed, 14 insertions(+), 223 deletions(-) delete mode 100644 ru/guides/single-source/includes.md rename ru/guides/single-source/{ei.md => index.md} (50%) delete mode 100644 ru/guides/single-source/presets.md delete mode 100644 ru/guides/single-source/toc_includes.md diff --git a/ru/guides/single-source/build.md b/ru/guides/single-source/build.md index 2025e14d..fc8de6c1 100644 --- a/ru/guides/single-source/build.md +++ b/ru/guides/single-source/build.md @@ -1,28 +1,6 @@ # Локальная сборка YFM с переиспользованием -Для отладки документации с инклюдами или пресетами переменных, можно использовать локальную сборку YFM. - -{% note warning %} - -В локальной сборке YFM не отображаются дополнительные возможности из npm (plantuml, LaTeX, вставка кода из файла, graphviz); - - -{% endnote %} - -## Перед началом {#setup} - -1. [Установите Node.js](https://nodejs.org/ru/download/). Одновременно установится менеджер пакетов `npm`: он понадобится для работы локальной сборки. - -1. [Установите yfm-docs](https://diplodoc.com/docs/ru/tools/docs/). - -1. Проверьте, что yfm-docs установлен правильно. Например, посмотрите номер версии: - - ``` - yfm --version - ``` - -## Запуск сборки {#run-build} - +Для отладки документации с инклюдами или пресетами переменных, можно использовать [локальную сборку YFM](https://diplodoc.com/docs/ru/installation#lokalnaya-sborka-proekta). Чтобы собрать документ, выполните команду: diff --git a/ru/guides/single-source/includes.md b/ru/guides/single-source/includes.md deleted file mode 100644 index 316e72c5..00000000 --- a/ru/guides/single-source/includes.md +++ /dev/null @@ -1,49 +0,0 @@ -# Инклюды - -Вы можете вынести повторяющийся контент в отдельный файл и использовать его внутри документационного проекта в качестве страницы, раздела, абзаца или элемента списка. - -Переиспользование поможет сократить время работы с текстом: контент хранится в одном месте, а изменения применяются ко всему проекту. - - -## Порядок переиспользования {#steps} - -1. Создайте каталог для хранения повторяющегося контента. Инклюды принято размещать в папке `_includes`. - - {% note warning %} - - Файлы для переиспользования должны храниться в каталоге, имя которого начинается с символа `_`. - - {% endnote %} - -1. В каталоге `_includes` создайте md-файл с повторяющимся текстом. - -1. В файл документа добавьте ссылку на md-файл в место, которое предназначено для вставки: - - - ```markdown - {% include [Описание](../../_includes/file.md) %} - ``` - Если заголовок файла не нужно подставлять, добавьте ключевое слово `notitle`: - - ```markdown - {% include notitle [Описание](../../_includes/file.md) %} - ``` - - Чтобы подставить только один раздел из файла, добавьте к ссылке [якорь на заголовок](https://diplodoc.com/docs/ru/syntax/base#headers) соответствующего раздела: - - ```markdown - {% include notitle [Описание](../../_includes/file.md#anchor) %} - ``` - - * `[Описание]` — описание файла. Информация для авторов документа, не влияет на сборку. - * `(../../_includes/file.md)` — путь к файлу. - - {% note info %} - - Если подставляете раздел или абзац, отделите инклюд от основного текста пустой строкой сверху и снизу. - - Подставить одно или несколько предложений как часть абзаца нельзя. - - {% endnote %} - -Переиспользованный контент появится при сборке. Относительные ссылки в нем будут перестроены. diff --git a/ru/guides/single-source/ei.md b/ru/guides/single-source/index.md similarity index 50% rename from ru/guides/single-source/ei.md rename to ru/guides/single-source/index.md index 850d4b65..12b955d8 100644 --- a/ru/guides/single-source/ei.md +++ b/ru/guides/single-source/index.md @@ -1,28 +1,18 @@ # Единый источник -Единый источник — это способ организации проекта, который позволяет получить несколько похожих версий документа из одного и того же исходного текста. Например, справки для разных платформ, языков или аудиторий. +Единый источник — способ организации проекта, который позволяет получить несколько похожих версий документа из одного и того же исходного текста. Например, справки для разных платформ, языков или аудиторий. -Единый источник упрощает обновление проекта и снижает количество ошибок. Повторяющийся текст находится в одном месте, поэтому при обновлении не нужно искать и править все его вхождения. +Это упрощает обновление проекта и снижает количество ошибок. Повторяющийся текст находится в одном месте, поэтому при обновлении не нужно искать и править все его вхождения. ### Примеры -* [Справка Яндекс Почты](https://yandex.ru/support/yandex-360/customers/mail/ru/web/letter/create/letter-from-mobile?tabs=defaultTabsGroup-002l0bah_android) +Пользователь мобильного приложения [Яндекс Почты](https://yandex.ru/support/yandex-360/customers/mail/ru/web/letter/create/letter-from-mobile?tabs=defaultTabsGroup-002l0bah_android) может найти в справке инструкции, адаптированные [под смартфон](https://yandex.ru/support/yandex-360/customers/mail/ru/web/letter/create/letter-from-mobile?tabs=defaultTabsGroup-002l0bah_android). В то же время пользователь [веб-версии](https://yandex.ru/support/yandex-360/customers/mail/ru/web/letter/create/write-letter) видит инструкции, учитывающие особенности работы с сервисом в браузере. При этом обе версии справки создаются на основе одного исходного текста. -Пользователь мобильного приложения Яндекс Почты может найти в справке инструкции, адаптированные [под смартфон](https://yandex.ru/support/yandex-360/customers/mail/ru/web/letter/create/letter-from-mobile?tabs=defaultTabsGroup-002l0bah_android). В то же время пользователь [веб-версии](https://yandex.ru/support/yandex-360/customers/mail/ru/web/letter/create/write-letter) видит инструкции, учитывающие особенности работы с сервисом в браузере. При этом обе версии справки создаются на основе одного исходного текста. - -* [Справка Яндекс Музыки](https://yandex.ru/support/music/ru/new-template/gettingstart) - -После установки Яндекс Музыки пользователь может обратиться к справке, чтобы разобраться с работой сервиса. Справка содержит понятные инструкции, адаптированные под конкретную платформу. Например, [Xiaomi GetApps](https://global.app.mi.com/details?lo=RU&la=ru&id=ru.yandex.music) или [компьютер](https://music.yandex.ru/download/). - -* [Справка Кинопоиска](https://yandex.ru/support/kinopoisk/ru/authorization/get-started) - -При просмотре фильма пользователь может выбирать аудиодорожку на нужном ему языке: - -![Audio track](../../_images/audio-track.png){width=400} +После установки [Яндекс Музыки](https://yandex.ru/support/music/ru/new-template/gettingstart) пользователь может обратиться к справке, чтобы разобраться с работой сервиса. Справка содержит понятные инструкции, адаптированные под [конкретную платформу](https://yandex.ru/support/music/ru/new-template/appmusic). ## Методы работы с единым источником {#methods} -* [**Профилирование**](./profiling.md) используется для формирования нескольких похожих документов из одного документа-источника. Текст размечается с помощью [условных операторов](https://diplodoc.com/docs/ru/syntax/vars#conditions) или [переменных](https://diplodoc.com/docs/ru/syntax/vars). При сборке в каждый выходной документ подставляются только нужные фрагменты текста. +[**Профилирование**](./profiling.md) используется для формирования нескольких похожих документов из одного документа-источника. Текст размечается с помощью [условных операторов](https://diplodoc.com/docs/ru/syntax/vars#conditions) или [переменных](https://diplodoc.com/docs/ru/syntax/vars). При сборке в каждый выходной документ подставляются только нужные фрагменты текста. Способ применяется, если общего контента больше, чем уникального. @@ -34,13 +24,13 @@ {% endcut %} -* **Переиспользование** контента позволяет подставлять повторяющиеся фрагменты текста внутри одного или нескольких документов. +**Переиспользование** контента позволяет подставлять повторяющиеся фрагменты текста внутри одного или нескольких документов. Способ применяется, если уникального контента больше, чем общего. Переиспользование обеспечивают: - * [Инклюды](./includes.md) — отдельные файлы с текстом, ссылки на которые вставляются в нужном месте текста. При сборке текст из файла подставляется полностью. + * [Инклюды](https://diplodoc.com/docs/ru/syntax/includes) — отдельные файлы с текстом, ссылки на которые вставляются в нужном месте текста. При сборке текст из файла подставляется полностью. {% cut "Пример" %} @@ -48,7 +38,7 @@ {% endcut %} - * [Пресеты переменных](./presets.md) — набор переменных и их значений. При сборке документа в текст подставляется значение переменной в зависимости от условий сборки. + * [Пресеты переменных](https://diplodoc.com/docs/ru/project/presets) — набор переменных и их значений. При сборке документа в текст подставляется значение переменной в зависимости от условий сборки. {% cut "Пример" %} @@ -58,7 +48,7 @@ {% endcut %} - * [Вставки оглавлений](toc_includes.md) — блоки оглавления, которые вставляются в основное оглавление. + * [Вставки оглавлений](https://diplodoc.com/docs/ru/project/toc#includes) — блоки оглавления, которые вставляются в основное оглавление. {% cut "Пример" %} @@ -68,8 +58,8 @@ ## Особенности {#peculiaritys} -* Каталоги с изображениями и инклюдами принято размещать в папках с названием `_assets` и `_includes` соответственно. Символ `_` означает, что папка не будет отображаться в итоговой сборке, но может быть использована как источник. +* Каталоги с изображениями и инклюдами рекомендуется размещать в папках с названием `_assets` и `_includes` соответственно. Символ `_` означает, что папка не будет отображаться в итоговой сборке, но может быть использована как источник. * Внутри проекта с профилированием можно дополнительно использовать инклюды или пресеты переменных, поэтому способы можно комбинировать. -* Если из одного документа-источника необходимо опубликовать несколько документов на разных доменах, то нужно настроить конфигурационные файлы для [профилирования](./profiling.md#configs). В случае переиспользования возможна публикация нескольких документов только на одном домене с разными URL. +* Если из одного документа-источника необходимо опубликовать несколько документов на разных доменах, рекомендуется настроить конфигурационные файлы для [профилирования](./profiling.md#configs). В случае переиспользования возможна публикация нескольких документов только на одном домене с разными URL. diff --git a/ru/guides/single-source/presets.md b/ru/guides/single-source/presets.md deleted file mode 100644 index c7271be7..00000000 --- a/ru/guides/single-source/presets.md +++ /dev/null @@ -1,58 +0,0 @@ -# Пресеты переменных - -Пресеты — это наборы переменных, которые позволяют переиспользовать повторяющийся контент и поддерживать несколько вариантов документации из одних и тех же исходных файлов. - -Пресеты объявляются в файле `presets.yaml`. Пресет `default` обязателен и содержит значения переменных по умолчанию. Переменные указываются в формате `<имя_переменной>: <значение>`. - -{% cut "Пример файла `presets.yaml`" %} - -```yaml -default: # набор значений по умолчанию - locale: ru - platform: browser - -ios: # набор значений для ios - platform: ios - -android: # набор значений для android - platform: android -``` - -{% endcut %} - -{% note info %} - -Файлов `presets.yaml` может быть несколько. Они будут учитываться в порядке уменьшения приоритета: от ближайшего к текущему файлу до самого близкого к корню проекта. - -{% cut "Пример" %} - -``` -input-folder -|-- .yfm -|-- toc.yaml -|-- presets.yaml // 2 -|-- index.yaml -|-- quickstart.md -|-- pages - |-- presets.yaml // 1 - |-- faq.md - |-- how-to.md -``` - -- При сборке файла `faq.md` значения переменных из файла `presets.yaml` № 1 в приоритете над переменными из файла № 2. - -- При сборке файла `quickstart.md` будут учитываться только значения переменных из файла `presets.yaml` № 2. - -{% endcut %} - -{% endnote %} - -Для простого переиспользования без профилирования все переменные указываются в пресете `default`. - -В случае использования переменных для [профилирования текста](./profiling.md) в файле `presets.yaml` укажите пресеты для каждого варианта профилирования. При сборке значения переменных берутся из пресета `default` или пресета, который указан в [конфигурационном файле `.yfm`](https://diplodoc.com/docs/ru/settings#config) в параметре `varsPreset`. - - -#### Узнайте больше - -- [Как работать с переменными](https://diplodoc.com/docs/ru/syntax/vars) - diff --git a/ru/guides/single-source/profiling.md b/ru/guides/single-source/profiling.md index 4b8028fd..7683e993 100644 --- a/ru/guides/single-source/profiling.md +++ b/ru/guides/single-source/profiling.md @@ -33,7 +33,7 @@ project_name ## Шаг 1. Добавьте пресеты переменных {#prepare-conditions} -Cоздайте [файл `presets.yaml`](presets.md). Общий файл располагается в корневой директории проекта и содержит все переменные для каждого условия профилирования. +Cоздайте [файл `presets.yaml`](https://diplodoc.com/docs/ru/project/presets). Общий файл располагается в корневой директории проекта и содержит все переменные для каждого условия профилирования. Значения переменных, которые установлены по умолчанию, поместите в пресет `default`. Он является обязательным. diff --git a/ru/guides/single-source/toc_includes.md b/ru/guides/single-source/toc_includes.md deleted file mode 100644 index 24d4c548..00000000 --- a/ru/guides/single-source/toc_includes.md +++ /dev/null @@ -1,64 +0,0 @@ -# Вставки оглавлений - -В [файл оглавления `toc.yaml`](https://diplodoc.com/docs/ru/project/toc) можно вставить оглавления из других файлов с расширением `.yaml`. При вставке отображаются все страницы, которые используются в оглавлении. - -## Как вставить оглавление - -Чтобы включить оглавление как раздел, добавьте в файл `toc.yaml` следующую конструкцию: - -```yaml -- name: <название раздела> - include: - path: <путь до вставляемого файла> -``` - -Чтобы включить оглавление без создания раздела, добавьте в файл `toc.yaml` следующую конструкцию: - -```yaml -- include: { path: <путь до вставляемого файла> } -``` - -По умолчанию указывается абсолютный путь от корня проекта. - -Во включаемом файле `.yaml` должен быть один блок `items`, который содержит список страниц и разделов. - -Пример: - -```yaml -items: - - name: Название страницы - href: page.md -``` - -### Режимы вставки оглавлений {#include-mode} - -Режимы вставки оглавлений задаются в свойстве `mode`: - -* `root_merge` — режим по умолчанию. В нем вместе с оглавлением скопируются все используемые файлы и директории. Копирование происходит с перезаписью файлов. Относительные ссылки не перестраиваются. -* `merge` — аналогично `root_merge`, но путь к файлу с оглавлением указывается относительно файла, в котором вы используете `include`. -* `link` — не изменяет структуру проекта. Относительные ссылки перестраиваются. - -{% cut "Примеры использования режимов" %} - -Чтобы использовать относительный путь, зададим режим `merge`: - -**Вставка страницы** - -   -: ```yaml - - include: { mode: merge, path: ../relative/path/to/toc.yaml } - ``` - -**Вставка раздела** - -  -: ```yaml - - name: Название раздела - include: - path: ../relative/path/to/toc.yaml - mode: merge - ``` - -{% endcut %} - - diff --git a/ru/toc.yaml b/ru/toc.yaml index 653fb958..d9446cf5 100644 --- a/ru/toc.yaml +++ b/ru/toc.yaml @@ -184,16 +184,10 @@ items: - name: Настройка личного домена href: personal-domain-ya-cloud.md - name: Единый источник - href: guides/single-source/ei.md + href: guides/single-source/index.md items: - name: Профилирование href: guides/single-source/profiling.md - - name: Пресеты переменных - href: guides/single-source/presets.md - - name: Инклюды - href: guides/single-source/includes.md - - name: Вставки оглавлений - href: guides/single-source/toc_includes.md - name: Локальная сборка YFM с переиспользованием href: guides/single-source/build.md - name: Автогенерация и интеграция документации From db26da30eb973e7816b9e745d9d6c39edd29353c Mon Sep 17 00:00:00 2001 From: Anna Shpakovskaya Date: Thu, 4 Dec 2025 14:36:47 +0300 Subject: [PATCH 10/18] =?UTF-8?q?=D0=9F=D1=80=D0=B0=D0=B2=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ru/guides/single-source/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ru/guides/single-source/index.md b/ru/guides/single-source/index.md index 12b955d8..6a5f3585 100644 --- a/ru/guides/single-source/index.md +++ b/ru/guides/single-source/index.md @@ -26,9 +26,9 @@ **Переиспользование** контента позволяет подставлять повторяющиеся фрагменты текста внутри одного или нескольких документов. - Способ применяется, если уникального контента больше, чем общего. +Способ применяется, если уникального контента больше, чем общего. - Переиспользование обеспечивают: +Переиспользование обеспечивают: * [Инклюды](https://diplodoc.com/docs/ru/syntax/includes) — отдельные файлы с текстом, ссылки на которые вставляются в нужном месте текста. При сборке текст из файла подставляется полностью. From 3a160756a2e96c49cefbfbdad45aa8da1ac85c12 Mon Sep 17 00:00:00 2001 From: Anna Shpakovskaya Date: Thu, 4 Dec 2025 14:44:48 +0300 Subject: [PATCH 11/18] =?UTF-8?q?=D0=9F=D1=80=D0=B0=D0=B2=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ru/guides/single-source/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ru/guides/single-source/index.md b/ru/guides/single-source/index.md index 6a5f3585..4fcbcd3e 100644 --- a/ru/guides/single-source/index.md +++ b/ru/guides/single-source/index.md @@ -26,9 +26,9 @@ **Переиспользование** контента позволяет подставлять повторяющиеся фрагменты текста внутри одного или нескольких документов. -Способ применяется, если уникального контента больше, чем общего. + Способ применяется, если уникального контента больше, чем общего. -Переиспользование обеспечивают: + Переиспользование обеспечивают: * [Инклюды](https://diplodoc.com/docs/ru/syntax/includes) — отдельные файлы с текстом, ссылки на которые вставляются в нужном месте текста. При сборке текст из файла подставляется полностью. From e8cf9d0e36d55a7726962db79287c0060c2f4bd6 Mon Sep 17 00:00:00 2001 From: Anna Shpakovskaya Date: Thu, 4 Dec 2025 14:53:36 +0300 Subject: [PATCH 12/18] =?UTF-8?q?=D0=9F=D1=80=D0=B0=D0=B2=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ru/guides/single-source/index.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/ru/guides/single-source/index.md b/ru/guides/single-source/index.md index 4fcbcd3e..bf38987c 100644 --- a/ru/guides/single-source/index.md +++ b/ru/guides/single-source/index.md @@ -32,29 +32,29 @@ * [Инклюды](https://diplodoc.com/docs/ru/syntax/includes) — отдельные файлы с текстом, ссылки на которые вставляются в нужном месте текста. При сборке текст из файла подставляется полностью. - {% cut "Пример" %} + {% cut "Пример" %} В [справке Яндекс Музыки](https://yandex.ru/support/music/ru/) некоторые разделы содержат повторяющуюся информацию. Такие блоки оформляются в виде инклюдов и включаются в нужные места текста. Например, [Дополнительные преимущества в сервисах Яндекса](https://yandex.ru/support/music/ru/new-template/gettingstart) и [Что входит в подписку Плюса](https://yandex.ru/support/music/ru/access-and-account/why-is-paid). - {% endcut %} + {% endcut %} * [Пресеты переменных](https://diplodoc.com/docs/ru/project/presets) — набор переменных и их значений. При сборке документа в текст подставляется значение переменной в зависимости от условий сборки. - {% cut "Пример" %} + {% cut "Пример" %} В [справке Яндекс Почты](https://yandex.ru/support/yandex-360/customers/mail/ru/) переменная `действие_с_письмом` может иметь разные значения: - * для [мобильного приложения](https://yandex.ru/support/yandex-360/customers/mail/ru/web/letter/create/letter-from-mobile?tabs=defaultTabsGroup-08mm4747_android) — «Нажмите значок в правом нижнем углу экрана»; - * для [веб-версии](https://yandex.ru/support/yandex-360/customers/mail/ru/web/letter/create/write-letter) — «Чтобы создать новое письмо, в левом верхнем углу экрана нажмите „Написать“». + * для [мобильного приложения](https://yandex.ru/support/yandex-360/customers/mail/ru/web/letter/create/letter-from-mobile?tabs=defaultTabsGroup-08mm4747_android) — «Нажмите значок в правом нижнем углу экрана»; + * для [веб-версии](https://yandex.ru/support/yandex-360/customers/mail/ru/web/letter/create/write-letter) — «Чтобы создать новое письмо, в левом верхнем углу экрана нажмите „Написать“». - {% endcut %} + {% endcut %} * [Вставки оглавлений](https://diplodoc.com/docs/ru/project/toc#includes) — блоки оглавления, которые вставляются в основное оглавление. - {% cut "Пример" %} + {% cut "Пример" %} В [справке Яндекс Почты](https://yandex.ru/support/yandex-360/customers/mail/ru/) основная справка содержит несколько крупных разделов, например, [«Управление контактами»](https://yandex.ru/support/yandex-360/customers/mail/ru/web/abook), [«Настройка почтового ящика»](https://yandex.ru/support/yandex-360/customers/mail/ru/box-settings). Для каждого раздела создается свой блок оглавления, который включает подразделы и ключевые темы. С помощью вставок оглавлений эти блоки включаются в общее оглавление справки, что позволяет пользователям быстро находить нужные разделы и ориентироваться в большом объеме информации. - {% endcut %} + {% endcut %} ## Особенности {#peculiaritys} From 39b7c58aec336006f485cc18cf628a23cc815d02 Mon Sep 17 00:00:00 2001 From: Anna Shpakovskaya Date: Thu, 4 Dec 2025 15:07:34 +0300 Subject: [PATCH 13/18] =?UTF-8?q?=D0=9F=D1=80=D0=B0=D0=B2=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ru/guides/single-source/index.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ru/guides/single-source/index.md b/ru/guides/single-source/index.md index bf38987c..fa45792b 100644 --- a/ru/guides/single-source/index.md +++ b/ru/guides/single-source/index.md @@ -25,11 +25,11 @@ {% endcut %} **Переиспользование** контента позволяет подставлять повторяющиеся фрагменты текста внутри одного или нескольких документов. - - Способ применяется, если уникального контента больше, чем общего. + + Способ применяется, если уникального контента больше, чем общего. Переиспользование обеспечивают: - + * [Инклюды](https://diplodoc.com/docs/ru/syntax/includes) — отдельные файлы с текстом, ссылки на которые вставляются в нужном месте текста. При сборке текст из файла подставляется полностью. {% cut "Пример" %} From 5f18602c7bbd783b28ecfc72be1ab247f52894b6 Mon Sep 17 00:00:00 2001 From: Anna Shpakovskaya Date: Thu, 4 Dec 2025 15:12:12 +0300 Subject: [PATCH 14/18] =?UTF-8?q?=D0=A5=D0=A5=D0=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ru/guides/single-source/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ru/guides/single-source/index.md b/ru/guides/single-source/index.md index fa45792b..c743fe7e 100644 --- a/ru/guides/single-source/index.md +++ b/ru/guides/single-source/index.md @@ -28,7 +28,7 @@ Способ применяется, если уникального контента больше, чем общего. - Переиспользование обеспечивают: + Переиспользование обеспечивают ХХХ: * [Инклюды](https://diplodoc.com/docs/ru/syntax/includes) — отдельные файлы с текстом, ссылки на которые вставляются в нужном месте текста. При сборке текст из файла подставляется полностью. From 13221069859a7ccc02b4549131aec1c740244e9c Mon Sep 17 00:00:00 2001 From: Anna Shpakovskaya Date: Thu, 4 Dec 2025 15:22:27 +0300 Subject: [PATCH 15/18] =?UTF-8?q?=D0=9F=D1=80=D0=B0=D0=B2=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ru/guides/single-source/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ru/guides/single-source/index.md b/ru/guides/single-source/index.md index c743fe7e..5a5ddc91 100644 --- a/ru/guides/single-source/index.md +++ b/ru/guides/single-source/index.md @@ -24,9 +24,9 @@ {% endcut %} -**Переиспользование** контента позволяет подставлять повторяющиеся фрагменты текста внутри одного или нескольких документов. +**Переиспользование** контента позволяет подставлять повторяющиеся фрагменты текста внутри одного или нескольких документов0. - Способ применяется, если уникального контента больше, чем общего. + Способ применяется, если уникального контента больше, чем общего!. Переиспользование обеспечивают ХХХ: From ad171a8267f42d34f51cfa3440765faa94ba2cc4 Mon Sep 17 00:00:00 2001 From: Anna Shpakovskaya Date: Thu, 4 Dec 2025 16:00:12 +0300 Subject: [PATCH 16/18] =?UTF-8?q?=D0=9F=D1=80=D0=B0=D0=B2=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ru/guides/single-source/index.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ru/guides/single-source/index.md b/ru/guides/single-source/index.md index 5a5ddc91..fa45792b 100644 --- a/ru/guides/single-source/index.md +++ b/ru/guides/single-source/index.md @@ -24,11 +24,11 @@ {% endcut %} -**Переиспользование** контента позволяет подставлять повторяющиеся фрагменты текста внутри одного или нескольких документов0. +**Переиспользование** контента позволяет подставлять повторяющиеся фрагменты текста внутри одного или нескольких документов. - Способ применяется, если уникального контента больше, чем общего!. + Способ применяется, если уникального контента больше, чем общего. - Переиспользование обеспечивают ХХХ: + Переиспользование обеспечивают: * [Инклюды](https://diplodoc.com/docs/ru/syntax/includes) — отдельные файлы с текстом, ссылки на которые вставляются в нужном месте текста. При сборке текст из файла подставляется полностью. From 8b1ce2352e8eb78cbfbc027b1e587e9582760211 Mon Sep 17 00:00:00 2001 From: Anna Shpakovskaya Date: Thu, 4 Dec 2025 17:31:14 +0300 Subject: [PATCH 17/18] =?UTF-8?q?=D0=9F=D1=80=D0=B8=D0=BC=D0=B5=D1=80=20?= =?UTF-8?q?=D0=BF=D0=B5=D1=80=D0=B5=D0=B8=D1=81=D0=BF=D0=BE=D0=BB=D1=8C?= =?UTF-8?q?=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ru/guides/single-source/build.md | 15 --------------- ru/guides/single-source/index.md | 3 +++ ru/project/presets.md | 15 +++++++++++++++ ru/toc.yaml | 2 -- 4 files changed, 18 insertions(+), 17 deletions(-) delete mode 100644 ru/guides/single-source/build.md diff --git a/ru/guides/single-source/build.md b/ru/guides/single-source/build.md deleted file mode 100644 index fc8de6c1..00000000 --- a/ru/guides/single-source/build.md +++ /dev/null @@ -1,15 +0,0 @@ -# Локальная сборка YFM с переиспользованием - -Для отладки документации с инклюдами или пресетами переменных, можно использовать [локальную сборку YFM](https://diplodoc.com/docs/ru/installation#lokalnaya-sborka-proekta). - -Чтобы собрать документ, выполните команду: - -``` -yfm -i ./<корневой каталог документа> -o ./<директория с итогом сборки> --varsPreset "<имя пресета>" -``` - -Если в вашем документе используются пресеты переменных, для каждого пресета сборку необходимо запускать отдельно. - -Если в документе пресетов переменных нет — флаг `--varsPreset` использовать не нужно. В этом случае документ соберется со значением пресетов `default`. - -В директории с итогом сборки появится одна папка с файлами в формате `.html` для выбранного пресета. Если запустить сборку с другими значениями в ту же директорию, файлы перезапишутся. diff --git a/ru/guides/single-source/index.md b/ru/guides/single-source/index.md index fa45792b..727f6d7f 100644 --- a/ru/guides/single-source/index.md +++ b/ru/guides/single-source/index.md @@ -63,3 +63,6 @@ * Внутри проекта с профилированием можно дополнительно использовать инклюды или пресеты переменных, поэтому способы можно комбинировать. * Если из одного документа-источника необходимо опубликовать несколько документов на разных доменах, рекомендуется настроить конфигурационные файлы для [профилирования](./profiling.md#configs). В случае переиспользования возможна публикация нескольких документов только на одном домене с разными URL. + +Для отладки документации с инклюдами или пресетами переменных, можно использовать локальную сборку YFM. +[Пример локальной сборки с переиспользованием](https://diplodoc.com/docs/ru/project/presets#reuse) diff --git a/ru/project/presets.md b/ru/project/presets.md index 3fba99fe..e4d44ab9 100644 --- a/ru/project/presets.md +++ b/ru/project/presets.md @@ -50,3 +50,18 @@ input-folder При сборке файла `faq.md` значения переменных из файла № 1 в приоритете над переменными из файла № 2. При сборке файла `quickstart.md` будут учитываться только значения переменных из файла № 2. + +## Пример локальной сборки с переиспользованием {#reuse} + +Чтобы собрать документ, выполните команду: + +``` +yfm -i ./<корневой каталог документа> -o ./<директория с итогом сборки> --varsPreset "<имя пресета>" +``` + +Если в вашем документе используются пресеты переменных, для каждого пресета сборку необходимо запускать отдельно. + +Если в документе пресетов переменных нет — флаг `--varsPreset` использовать не нужно. В этом случае документ соберется со значением пресетов `default`. + +В директории с итогом сборки появится одна папка с файлами в формате `.html` для выбранного пресета. Если запустить сборку с другими значениями в ту же директорию, файлы перезапишутся. + diff --git a/ru/toc.yaml b/ru/toc.yaml index d9446cf5..5d193715 100644 --- a/ru/toc.yaml +++ b/ru/toc.yaml @@ -188,8 +188,6 @@ items: items: - name: Профилирование href: guides/single-source/profiling.md - - name: Локальная сборка YFM с переиспользованием - href: guides/single-source/build.md - name: Автогенерация и интеграция документации href: guides/includers.md items: From e1bcaa4879bdc521480328c390725eee715fc064 Mon Sep 17 00:00:00 2001 From: Anna Shpakovskaya Date: Fri, 5 Dec 2025 09:23:56 +0300 Subject: [PATCH 18/18] =?UTF-8?q?=D0=A1=D1=81=D1=8B=D0=BB=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ru/guides/single-source/index.md | 14 +++++++------- ru/guides/single-source/profiling.md | 14 +++++++------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/ru/guides/single-source/index.md b/ru/guides/single-source/index.md index 727f6d7f..a300ebe7 100644 --- a/ru/guides/single-source/index.md +++ b/ru/guides/single-source/index.md @@ -12,7 +12,7 @@ ## Методы работы с единым источником {#methods} -[**Профилирование**](./profiling.md) используется для формирования нескольких похожих документов из одного документа-источника. Текст размечается с помощью [условных операторов](https://diplodoc.com/docs/ru/syntax/vars#conditions) или [переменных](https://diplodoc.com/docs/ru/syntax/vars). При сборке в каждый выходной документ подставляются только нужные фрагменты текста. +[**Профилирование**](./profiling.md) используется для формирования нескольких похожих документов из одного документа-источника. Текст размечается с помощью [условных операторов](../../syntax/vars.md#conditions) или [переменных](../../syntax/vars.md). При сборке в каждый выходной документ подставляются только нужные фрагменты текста. Способ применяется, если общего контента больше, чем уникального. @@ -30,7 +30,7 @@ Переиспользование обеспечивают: - * [Инклюды](https://diplodoc.com/docs/ru/syntax/includes) — отдельные файлы с текстом, ссылки на которые вставляются в нужном месте текста. При сборке текст из файла подставляется полностью. + * [Инклюды](../../syntax/includes.md) — отдельные файлы с текстом, ссылки на которые вставляются в нужном месте текста. При сборке текст из файла подставляется полностью. {% cut "Пример" %} @@ -38,17 +38,17 @@ {% endcut %} - * [Пресеты переменных](https://diplodoc.com/docs/ru/project/presets) — набор переменных и их значений. При сборке документа в текст подставляется значение переменной в зависимости от условий сборки. + * [Пресеты переменных](../../project/presets.md) — набор переменных и их значений. При сборке документа в текст подставляется значение переменной в зависимости от условий сборки. {% cut "Пример" %} В [справке Яндекс Почты](https://yandex.ru/support/yandex-360/customers/mail/ru/) переменная `действие_с_письмом` может иметь разные значения: - * для [мобильного приложения](https://yandex.ru/support/yandex-360/customers/mail/ru/web/letter/create/letter-from-mobile?tabs=defaultTabsGroup-08mm4747_android) — «Нажмите значок в правом нижнем углу экрана»; - * для [веб-версии](https://yandex.ru/support/yandex-360/customers/mail/ru/web/letter/create/write-letter) — «Чтобы создать новое письмо, в левом верхнем углу экрана нажмите „Написать“». + * для [мобильного приложения](https://yandex.ru/support/yandex-360/customers/mail/ru/web/letter/create/letter-from-mobile?tabs=defaultTabsGroup-08mm4747_android) — «Нажмите значок в правом нижнем углу экрана»; + * для [веб-версии](https://yandex.ru/support/yandex-360/customers/mail/ru/web/letter/create/write-letter) — «Чтобы создать новое письмо, в левом верхнем углу экрана нажмите „Написать“». {% endcut %} - * [Вставки оглавлений](https://diplodoc.com/docs/ru/project/toc#includes) — блоки оглавления, которые вставляются в основное оглавление. + * [Вставки оглавлений](../../project/toc.md#includes) — блоки оглавления, которые вставляются в основное оглавление. {% cut "Пример" %} @@ -65,4 +65,4 @@ * Если из одного документа-источника необходимо опубликовать несколько документов на разных доменах, рекомендуется настроить конфигурационные файлы для [профилирования](./profiling.md#configs). В случае переиспользования возможна публикация нескольких документов только на одном домене с разными URL. Для отладки документации с инклюдами или пресетами переменных, можно использовать локальную сборку YFM. -[Пример локальной сборки с переиспользованием](https://diplodoc.com/docs/ru/project/presets#reuse) +[Пример локальной сборки с переиспользованием](../../project/presets.md#reuse) diff --git a/ru/guides/single-source/profiling.md b/ru/guides/single-source/profiling.md index 7683e993..3c13e2d9 100644 --- a/ru/guides/single-source/profiling.md +++ b/ru/guides/single-source/profiling.md @@ -1,6 +1,6 @@ # Профилирование -Текст размечается с помощью [условных операторов](https://diplodoc.com/docs/ru/syntax/vars#conditions) или [переменных](https://diplodoc.com/docs/ru/syntax/vars). При сборке в каждый выходной документ подставляются только нужные фрагменты текста. +Текст размечается с помощью [условных операторов](../../syntax/vars.md#conditions) или [переменных](../../syntax/vars.md). При сборке в каждый выходной документ подставляются только нужные фрагменты текста. ## Организация проекта @@ -33,7 +33,7 @@ project_name ## Шаг 1. Добавьте пресеты переменных {#prepare-conditions} -Cоздайте [файл `presets.yaml`](https://diplodoc.com/docs/ru/project/presets). Общий файл располагается в корневой директории проекта и содержит все переменные для каждого условия профилирования. +Cоздайте [файл `presets.yaml`](../../project/presets.md). Общий файл располагается в корневой директории проекта и содержит все переменные для каждого условия профилирования. Значения переменных, которые установлены по умолчанию, поместите в пресет `default`. Он является обязательным. @@ -59,16 +59,16 @@ android: # набор значений для android #### Узнайте больше -- [Как работать с переменными](https://diplodoc.com/docs/ru/syntax/vars) +- [Как работать с переменными](../../syntax/vars.md) ## Шаг 2. Разметьте текст документа {#set-conditions-text} -Текст размечается с помощью [условных операторов](https://diplodoc.com/docs/ru/syntax/vars#conditions) или [переменных](https://diplodoc.com/docs/ru/syntax/vars). +Текст размечается с помощью [условных операторов](../../syntax/vars.md#conditions) или [переменных](../../syntax/vars.md). {% note warning %} -Если текст размечен с помощью переменных, то в файле `presets.yaml` должны быть пресеты для каждого варианта профилирования. При сборке значения переменных берутся из пресета `default` и пресета, который указан в [конфигурационном файле `.yfm`](https://diplodoc.com/docs/ru/settings#config) в параметре `varsPreset`. +Если текст размечен с помощью переменных, то в файле `presets.yaml` должны быть пресеты для каждого варианта профилирования. При сборке значения переменных берутся из пресета `default` и пресета, который указан в [конфигурационном файле `.yfm`](../../settings.md#config) в параметре `varsPreset`. {% endnote %} @@ -114,7 +114,7 @@ android: # набор значений для android ## Шаг 3. Разметьте оглавление документа {#set-conditions-toc} -[Оглавление документа `toc.yaml`](https://diplodoc.com/docs/ru/project/toc) размечается при помощи условного оператора `when`: +[Оглавление документа `toc.yaml`](../../project/toc.md) размечается при помощи условного оператора `when`: ``` when: условие == "значение" @@ -159,7 +159,7 @@ when: условие == "значение" ### Файл `.yfm` {#yfm} -В [конфигурационный файл `.yfm`](https://diplodoc.com/docs/ru/settings#config) добавьте следующие параметры сборки: +В [конфигурационный файл `.yfm`](../../settings.md#config) добавьте следующие параметры сборки: ```yaml apply-presets: true