• Docs
        • Документация OnPress v2
            • Документация OnPress v2
              • Как устроена платформа
              • Быстрый старт
              • Доступ, роли и выбор сайта
                • Страницы
                  • Frontmatter: все поля
                  • Синтаксис markdown
                  • Языки и переводы страниц
                • Фреймы
                  • Вставки onpress/
                  • Бинды data-op-bind
                  • Сборка страницы и статическая копия
                • Готовые фреймы
                  • Фрейм assistant: страница с чатом ассистента
                  • Фрейм outline: оглавление в тексте
                  • Фрейм faq: вопросы из текста страницы
                  • Фрейм article: статья
                  • Фрейм docs: документация
                  • Фрейм site__header: шапка сайта
                  • Фрейм site__footer: подвал сайта
                  • Фрейм article__faq: вопросы из набора
                  • Фрейм landing: лендинг ассистента
                  • Фрейм assistant__chat: чат обычной разметкой
                  • Фрейм site__404: страница «не найдено»
                  • Фрейм news: лента новостей
                  • Фрейм news__category: рубрика новостей
                  • Фрейм news__post: новость
                  • Фрейм news__more: читайте ещё
                  • Фрейм news__share: поделиться
                  • Фрейм author__page: страница автора
                  • Фрейм author__byline: подпись автора
                  • Фрейм author__card: карточка автора
                  • Фрейм author__avatar: аватар автора
                  • Фрейм author__socials: соцсети автора
                  • Фрейм author__head: объявление набора автора
                  • Фрейм home: главная-документ
                  • Фрейм pricing: тарифы
                • Наборы данных и системные источники
                  • Повторитель onpress/repeat
              • Стили и оформление
              • Меню
              • Сайдбар документации
              • Языки сайта
              • Настройки, главная и кэш
              • SEO
              • Медиа
              • Сайты и домены
              • Пользователи и профиль
              • Дашборд и вход
                • Рецепты
                  • Сайт с нуля
                  • Раздел документации
                  • Лендинг из конструктора
                  • FAQ на странице
                  • Свой фрейм из готового
                  • Многоязычный сайт
                  • Поменять меню
                  • Перенести страницу
                  • Картинки в статье
                  • Список из данных
                  • Сменить оформление
                • Справочник API
                  • Справочник: страницы
                  • Справочник: переводы
                  • Справочник: фреймы
                  • Справочник: данные
                  • Справочник: меню
                  • Справочник: сайдбар документации
                  • Справочник: стили
                  • Справочник: настройки, главная, кэш
                  • Справочник: языки
                  • Справочник: SEO
                  • Справочник: медиа
                  • Справочник: сайты
                  • Справочник: пользователи и профиль
                  • Справочник: вход и служебное
                • Ошибки и частые проблемы
                  • Коды ошибок
        • Старая документация v1
            • Старая документация v1
              • Начало
              • Привязка домена
              • Виджеты
              • Структура ссылок
              • Connector.js
              • Шапка
              • Подвал
              • Мультиязычность
              • Меню
              • Как настроить стили сайта через Design
              • Schema разметка
              • Open Graph
              • Аналитика
              • FAQ
              • Robots.txt
              • Sitemap
OnPress OnPress
  • Документация
  • Контакты
Войти
    • Docs
        • Документация OnPress v2
            • Документация OnPress v2
              • Как устроена платформа
              • Быстрый старт
              • Доступ, роли и выбор сайта
                • Страницы
                  • Frontmatter: все поля
                  • Синтаксис markdown
                  • Языки и переводы страниц
                • Фреймы
                  • Вставки onpress/
                  • Бинды data-op-bind
                  • Сборка страницы и статическая копия
                • Готовые фреймы
                  • Фрейм assistant: страница с чатом ассистента
                  • Фрейм outline: оглавление в тексте
                  • Фрейм faq: вопросы из текста страницы
                  • Фрейм article: статья
                  • Фрейм docs: документация
                  • Фрейм site__header: шапка сайта
                  • Фрейм site__footer: подвал сайта
                  • Фрейм article__faq: вопросы из набора
                  • Фрейм landing: лендинг ассистента
                  • Фрейм assistant__chat: чат обычной разметкой
                  • Фрейм site__404: страница «не найдено»
                  • Фрейм news: лента новостей
                  • Фрейм news__category: рубрика новостей
                  • Фрейм news__post: новость
                  • Фрейм news__more: читайте ещё
                  • Фрейм news__share: поделиться
                  • Фрейм author__page: страница автора
                  • Фрейм author__byline: подпись автора
                  • Фрейм author__card: карточка автора
                  • Фрейм author__avatar: аватар автора
                  • Фрейм author__socials: соцсети автора
                  • Фрейм author__head: объявление набора автора
                  • Фрейм home: главная-документ
                  • Фрейм pricing: тарифы
                • Наборы данных и системные источники
                  • Повторитель onpress/repeat
              • Стили и оформление
              • Меню
              • Сайдбар документации
              • Языки сайта
              • Настройки, главная и кэш
              • SEO
              • Медиа
              • Сайты и домены
              • Пользователи и профиль
              • Дашборд и вход
                • Рецепты
                  • Сайт с нуля
                  • Раздел документации
                  • Лендинг из конструктора
                  • FAQ на странице
                  • Свой фрейм из готового
                  • Многоязычный сайт
                  • Поменять меню
                  • Перенести страницу
                  • Картинки в статье
                  • Список из данных
                  • Сменить оформление
                • Справочник API
                  • Справочник: страницы
                  • Справочник: переводы
                  • Справочник: фреймы
                  • Справочник: данные
                  • Справочник: меню
                  • Справочник: сайдбар документации
                  • Справочник: стили
                  • Справочник: настройки, главная, кэш
                  • Справочник: языки
                  • Справочник: SEO
                  • Справочник: медиа
                  • Справочник: сайты
                  • Справочник: пользователи и профиль
                  • Справочник: вход и служебное
                • Ошибки и частые проблемы
                  • Коды ошибок
        • Старая документация v1
            • Старая документация v1
              • Начало
              • Привязка домена
              • Виджеты
              • Структура ссылок
              • Connector.js
              • Шапка
              • Подвал
              • Мультиязычность
              • Меню
              • Как настроить стили сайта через Design
              • Schema разметка
              • Open Graph
              • Аналитика
              • FAQ
              • Robots.txt
              • Sitemap
Документация OnPress v2
Markdown
Открыть в ИИ
  • Открыть в ChatGPT
  • Открыть в Claude
  • Открыть в Gemini
  • Открыть в Perplexity
  • Открыть в Grok
  • Открыть в DeepSeek

Сайдбар документации

Левое дерево документации (его выводит вставка onpress/docs-nav) своего хранилища не имеет — оно целиком выводится из страниц:

  • пункт — страница, собираемая фреймом документации;
  • вложенность — родитель страницы, но только среди таких же страниц: если родитель не страница документации, пункт встаёт в корень;
  • порядок — menu_order среди соседей;
  • подпись — поле nav_label страницы, а без него — её заголовок;
  • скрытый пункт — страница с меткой скрытия: она опубликована и открывается, но в дереве её нет.

Отсюда два следствия, о которых нужно помнить до первого вызова. Перенос пункта в другую ветку меняет адрес страницы — вложенность и есть родитель. Скрытие раздела с видимыми детьми поднимает детей в корень: скрытый раздел перестаёт быть страницей документации, и его дети оказываются под «чужим» родителем.

Какой фрейм — документация

Фрейм документации определяется по порядку: параметр frame запроса (слаг или id) → опция сайта onpress_docs_frame → первый существующий из слагов docs, obolochka-dokumentaciya. Ответ GET называет его в frame и откуда он взят в frame_source. Неизвестный фрейм в параметре — 404 docs_frame_not_found.

Чтобы страница попала в дерево, опубликуйте её с этим фреймом (frame: "docs") и родителем — страницей документации. Порядок у новой страницы — последним среди соседей.

Короткая подпись

Длинный заголовок страницы («Сборка страницы и статическая копия») в дереве удобно заменить короткой подписью — ключом nav_label во frontmatter:

---
name: "Сборка страницы и статическая копия"
slug: "sborka"
url: "/docs/v2/ru/frames/build/"
frame: "docs"
nav_label: "Сборка и копии"
---

Это свой ключ frontmatter, поэтому публикация предупредит, что он записан как метаполе, — так и должно быть. Заголовок страницы, <title> и хлебные крошки остаются полными.

Прочитать дерево

curl -s -H "Authorization: Bearer $OP_TOKEN" "$API/site/$SITE/docs/sidebar?lang=ru&include_hidden=1" \
  | jq '{frame, frame_source, total, hidden_total, tree: [.tree[] | {id, title, url, children: [.children[] | {id, title, hidden}]}]}'
ПараметрСмысл
langтолько страницы этого языка — так, как дерево видит посетитель страницы на этом языке. Без параметра в дереве все языки сразу
include_hiddenвключить скрытые пункты с "hidden": true
statusesстатусы через запятую; по умолчанию publish,draft,private,pending,future — как видит вошедший редактор
publicто же, что statuses=publish — дерево глазами анонимного посетителя
frameфрейм документации явно

Узел: id, title, slug, status, parent, menu_order, hidden, url (с языковым префиксом), link (null у черновика), lang, children.

Порядок внутри ветки

curl -s -X POST "$API/site/$SITE/docs/sidebar/reorder" \
  -H "Authorization: Bearer $OP_TOKEN" -H 'Content-Type: application/json' \
  -d '{"parent": 6249, "order": [6250, 6251, 6252, 6253]}' | jq '{order, appended, updated}'
{ "order": [6250, 6251, 6252, 6253, 6257], "appended": [6257], "updated": 5 }

parent — id, слаг или путь родителя, 0 — корень. order — пункты ветки в нужном порядке; неназванные встают после названных в прежнем порядке (appended). Пункт из другой ветки — 409 not_a_sibling: перенос между ветками меняет адрес и делается отдельно.

Один пункт: {"id": 6257, "after": 6252} (или before, или position — индекс с нуля).

Перенести, переименовать, поменять статус

curl -s -X PATCH "$API/site/$SITE/docs/sidebar/items/docs~v2~ru~sidebar" \
  -H "Authorization: Bearer $OP_TOKEN" -H 'Content-Type: application/json' \
  -d '{"parent": "/docs/v2/ru/menus/", "position": 0}' | jq '{item, warnings}'
{
  "item": { "id": 6265, "parent": { "from": 6249, "to": 6264 }, "url_before": "/docs/v2/ru/sidebar/", "old_paths": [ { "id": 6265, "path": "/docs/v2/ru/sidebar/" } ], "url": "/docs/v2/ru/menus/sidebar/" },
  "warnings": ["page #6265 changes its parent: the address /docs/v2/ru/sidebar/ answers 301 to the new one"]
}

{ref} в пути — id, слаг или путь с тильдами вместо слешей. Поля тела:

ПолеЧто делает
parentперенести в другую ветку (id, слаг, путь или 0) — меняет адрес страницы и всего её поддерева
titleпереименовать: меняется заголовок страницы, слаг и адрес — нет. Для короткой подписи в дереве используйте nav_label
statuspublish, draft, private, pending, future
hiddenспрятать или вернуть
after, before, positionместо среди новых соседей

Прежние адреса страницы и её поддерева API записывает в ответ (old_paths) и в мету страницы; тема v2 отвечает с них перенаправлением 301 на новый адрес, есть ли на сайте своя страница 404 или нет. После переноса проверьте старый адрес запросом без кук. Родитель, который замкнул бы цикл, и главная сайта как родитель отклоняются защитами: пункт встаёт в корень, а warnings объясняет почему. Пустое тело — 400 nothing_to_update.

Спрятать и вернуть

curl -s -X POST "$API/site/$SITE/docs/sidebar/items/docs~v2~ru~staroe/hide" -H "Authorization: Bearer $OP_TOKEN" | jq '{item, warnings}'
curl -s -X POST "$API/site/$SITE/docs/sidebar/items/docs~v2~ru~staroe/show" -H "Authorization: Bearer $OP_TOKEN" | jq .item

Статус и адрес страницы не меняются, страница открывается как раньше — пропадает только пункт. Скрытие раздела с видимыми детьми поднимает детей в корень, ответ предупреждает и называет их число: прячьте ветку целиком или сначала перенесите детей.

Положить дерево целиком

Основной сценарий, когда структура готова: одно дерево — один запрос, в одной транзакции.

curl -s -X PUT "$API/site/$SITE/docs/sidebar" \
  -H "Authorization: Bearer $OP_TOKEN" -H 'Content-Type: application/json' \
  -d '{
    "lang": "ru",
    "missing": "keep",
    "dry_run": true,
    "items": [
      { "id": 6249, "children": [
        { "id": 6250 },
        { "id": 6251 },
        { "url": "/docs/v2/ru/pages/", "children": [ 6254, 6255, 6256 ] },
        { "slug": "staroe", "hidden": true }
      ]}
    ]
  }' | jq '{applied, dry_run, changes, moved, dropped, warnings}'

Пункт — ссылка на существующую страницу (id, slug, url или голое значение) плюс необязательные title, status, hidden, children. Страницы ручка не создаёт — их создаёт публикация.

ПолеСмысл
itemsдерево, обязательно
missinghide (по умолчанию) — страницы документации, которых нет в дереве, скрываются (их id — в dropped); keep — остаются как есть
langязыковая ветка, которую заменяет запрос; без него — язык пунктов дерева, а если их несколько — основной язык. missing: "hide" скрывает только страницы этого языка
dry_runпоказать changes, moved, dropped и откатить
frameфрейм документации явно

Весь запрос применяется целиком или не применяется вовсе. Неразрешимая ссылка или страница, указанная дважды, отменяют всё: 409 sidebar_items_unresolved с разбором в errors, где at — координата узла в присланном дереве ("0.1" — второй ребёнок первого корня). Страница, которая ещё не была пунктом документации, становится им: ей ставится фрейм документации, и ответ предупреждает, если до этого у неё был другой фрейм.

Корневые пункты обрабатываются бережно: страница, чей родитель не страница документации, и так рисуется в корне, поэтому её родитель не трогается и адрес не меняется.

changes — что поменялось у каждого пункта (from → to), moved — переезды с адресами до и после, dropped — скрытые, notified — сколько страниц получили событие обновления.

Не используйте PUT дерева там, где разделом управляют несколько человек или агентов: с missing: "hide" он скроет всё, чего нет в вашем дереве. Для правки своей ветки есть reorder и PATCH.

Языки

На многоязычном сайте у каждого языка своё дерево: onpress/docs-nav на странице показывает страницы её языка, GET с lang — ровно их, PUT заменяет дерево одного языка и не трогает остальные.

Коды ошибок

КодHTTPКогда
bad_items400items не массив
bad_missing400missing не hide и не keep
bad_reorder400нет ни order, ни id
bad_status400статус вне списка; допустимые в allowed
nothing_to_update400PATCH с пустым телом
item_ref_required400пустая или неразборчивая ссылка на пункт
page_not_found, not_a_page404нет такой страницы
docs_frame_not_found404названного фрейма документации нет
page_language_mismatch404путь с префиксом одного языка, а страница — другого
ambiguous_page409слаг у нескольких страниц; кандидаты в candidates
duplicate_item409страница в дереве дважды
not_a_sibling409в order пункт другой ветки
sidebar_items_unresolved409общий отказ PUT: ничего не применено, разбор в errors
absolute_url_in_path422в ссылке схема и домен
parent_not_found422сегмент пути — не страница
unknown_language422lang нет на сайте
arrow_backНазад
Меню
Далееarrow_forward
Языки сайта
На этой странице
  • Какой фрейм — документация
    • Короткая подпись
      • Прочитать дерево
        • Порядок внутри ветки
          • Перенести, переименовать, поменять статус
            • Спрятать и вернуть
              • Положить дерево целиком
                • Языки
                  • Коды ошибок
                  OnPress
                  OnPress
                  ИП Зуев И.В. ИНН: 360408359441
                  © 2026
                  политика конфиденциальности публичная оферта
                  • visa
                  • mastercard
                  • sber
                  • tpay