-
Notifications
You must be signed in to change notification settings - Fork 36
Docsup 116404.diplodoc single source #202
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
ashpakovskaya
merged 18 commits into
diplodoc-platform:master
from
ashpakovskaya:DOCSUP-116404.diplodoc-single-source
Dec 5, 2025
Merged
Changes from all commits
Commits
Show all changes
18 commits
Select commit
Hold shift + click to select a range
52bbcb7
Документация ЕИ
ashpakovskaya 42a0009
Оглавление
ashpakovskaya aa389ea
Примеры
ashpakovskaya ad97932
Путь
ashpakovskaya f44f77c
Правки
ashpakovskaya c0856d6
Правки
ashpakovskaya 37c168a
Примеры
ashpakovskaya a736f8a
Оглавление
ashpakovskaya 350548b
Правки
ashpakovskaya db26da3
Правки
ashpakovskaya 3a16075
Правки
ashpakovskaya e8cf9d0
Правки
ashpakovskaya 39b7c58
Правки
ashpakovskaya 5f18602
ХХХ
ashpakovskaya 1322106
Правки
ashpakovskaya ad171a8
Правка
ashpakovskaya 8b1ce23
Пример переиспользования
ashpakovskaya e1bcaa4
Ссылки
ashpakovskaya File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,68 @@ | ||
| # Единый источник | ||
|
|
||
| Единый источник — способ организации проекта, который позволяет получить несколько похожих версий документа из одного и того же исходного текста. Например, справки для разных платформ, языков или аудиторий. | ||
|
|
||
| Это упрощает обновление проекта и снижает количество ошибок. Повторяющийся текст находится в одном месте, поэтому при обновлении не нужно искать и править все его вхождения. | ||
|
|
||
| ### Примеры | ||
|
|
||
| Пользователь мобильного приложения [Яндекс Почты](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) пользователь может обратиться к справке, чтобы разобраться с работой сервиса. Справка содержит понятные инструкции, адаптированные под [конкретную платформу](https://yandex.ru/support/music/ru/new-template/appmusic). | ||
|
|
||
| ## Методы работы с единым источником {#methods} | ||
|
|
||
| [**Профилирование**](./profiling.md) используется для формирования нескольких похожих документов из одного документа-источника. Текст размечается с помощью [условных операторов](../../syntax/vars.md#conditions) или [переменных](../../syntax/vars.md). При сборке в каждый выходной документ подставляются только нужные фрагменты текста. | ||
|
|
||
| Способ применяется, если общего контента больше, чем уникального. | ||
|
|
||
| {% cut "Пример" %} | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. вот это уже хороший пример! |
||
|
|
||
| В [справке Яндекс Почты](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 %} | ||
|
|
||
| **Переиспользование** контента позволяет подставлять повторяющиеся фрагменты текста внутри одного или нескольких документов. | ||
|
|
||
| Способ применяется, если уникального контента больше, чем общего. | ||
|
|
||
| Переиспользование обеспечивают: | ||
|
|
||
| * [Инклюды](../../syntax/includes.md) — отдельные файлы с текстом, ссылки на которые вставляются в нужном месте текста. При сборке текст из файла подставляется полностью. | ||
|
|
||
| {% 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 %} | ||
|
|
||
| * [Пресеты переменных](../../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) — «Чтобы создать новое письмо, в левом верхнем углу экрана нажмите „Написать“». | ||
|
|
||
| {% endcut %} | ||
|
|
||
| * [Вставки оглавлений](../../project/toc.md#includes) — блоки оглавления, которые вставляются в основное оглавление. | ||
|
|
||
| {% 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} | ||
|
|
||
| * Каталоги с изображениями и инклюдами рекомендуется размещать в папках с названием `_assets` и `_includes` соответственно. Символ `_` означает, что папка не будет отображаться в итоговой сборке, но может быть использована как источник. | ||
|
|
||
| * Внутри проекта с профилированием можно дополнительно использовать инклюды или пресеты переменных, поэтому способы можно комбинировать. | ||
|
|
||
| * Если из одного документа-источника необходимо опубликовать несколько документов на разных доменах, рекомендуется настроить конфигурационные файлы для [профилирования](./profiling.md#configs). В случае переиспользования возможна публикация нескольких документов только на одном домене с разными URL. | ||
|
|
||
| Для отладки документации с инклюдами или пресетами переменных, можно использовать локальную сборку YFM. | ||
| [Пример локальной сборки с переиспользованием](../../project/presets.md#reuse) | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,169 @@ | ||
| # Профилирование | ||
|
|
||
| Текст размечается с помощью [условных операторов](../../syntax/vars.md#conditions) или [переменных](../../syntax/vars.md). При сборке в каждый выходной документ подставляются только нужные фрагменты текста. | ||
|
|
||
| ## Организация проекта | ||
|
|
||
| 1. В корне проекта создайте папку `common` с исходными файлами. | ||
|
|
||
| 1. В корне проекта создайте папки для каждой версии документа. Например, `android` и `ios` для разных платформ. | ||
|
|
||
| 1. В папках для версий документов настройте [конфигурационные файлы](#configs). | ||
|
|
||
| Пример организации структуры: | ||
|
|
||
| ``` | ||
| 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 | ||
| ├── document_name_2 | ||
| │ ├── .yfm | ||
| ├── document_name_3 | ||
| | ├── .yfm | ||
| ``` | ||
|
|
||
| ## Шаг 1. Добавьте пресеты переменных {#prepare-conditions} | ||
|
|
||
| Cоздайте [файл `presets.yaml`](../../project/presets.md). Общий файл располагается в корневой директории проекта и содержит все переменные для каждого условия профилирования. | ||
|
|
||
| Значения переменных, которые установлены по умолчанию, поместите в пресет `default`. Он является обязательным. | ||
|
|
||
| Уникальные значения поместите в отдельные пресеты для каждого условия профилирования. | ||
|
|
||
| {% cut "Пример файла `presets.yaml` для разных платформ" %} | ||
|
|
||
| ``` yaml | ||
| default: # набор значений по умолчанию | ||
| locale: ru | ||
| platform: browser | ||
|
|
||
| ios: # набор значений для ios | ||
| platform: ios | ||
|
|
||
| android: # набор значений для android | ||
| platform: android | ||
| ``` | ||
|
|
||
| {% endcut %} | ||
|
|
||
| Обычно условия профилирования называют `product`, `platform`, `audience`, но можно использовать и любые другие имена, которые приняты в вашем проекте. | ||
|
|
||
| #### Узнайте больше | ||
|
|
||
| - [Как работать с переменными](../../syntax/vars.md) | ||
|
|
||
|
|
||
| ## Шаг 2. Разметьте текст документа {#set-conditions-text} | ||
|
|
||
| Текст размечается с помощью [условных операторов](../../syntax/vars.md#conditions) или [переменных](../../syntax/vars.md). | ||
|
|
||
| {% note warning %} | ||
|
|
||
| Если текст размечен с помощью переменных, то в файле `presets.yaml` должны быть пресеты для каждого варианта профилирования. При сборке значения переменных берутся из пресета `default` и пресета, который указан в [конфигурационном файле `.yfm`](../../settings.md#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`](../../project/toc.md) размечается при помощи условного оператора `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} | ||
|
|
||
| Конфигурационные файлы необходимы для правильной сборки и публикации проекта. | ||
|
|
||
| ### Файл `.yfm` {#yfm} | ||
|
|
||
| В [конфигурационный файл `.yfm`](../../settings.md#config) добавьте следующие параметры сборки: | ||
|
|
||
| ```yaml | ||
| apply-presets: true | ||
| varsPreset: "имя-пресета" | ||
| ``` | ||
|
|
||
| В поле `varsPreset` укажите имя пресета из [шага 1](#prepare-conditions). |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
нужны живые примеры на каждое использование. если будут сложности с поиском, спроси коллег, а уж потом призывай меня)