Widgets area (prose): platform blocks and their settings
/docs/widgets-areacurrentМашинный перевод с английского· проверено 2026-08-19
Статус: current · проверенный: 2026-08-19, live GET /docs/widgets + widget источники владелец: гладиатр API документация · Служить: GET /docs/widgets-area · мастерство: vizen-widgets Модель note: Композиция переносится на groups 2026-08-21 (chrome.md §3) — тот widgets И все они, и все остальные, неизменны.. Машинный справочник: /docs/widgets — генерируемый props schema; это name был взят, следовательно -area
1.Что вы можете сделать здесь
Разместите платформу block на page и настроить его. block читать live shop data — цены, акции и category tree оставаться current Сами по себе. Сдаваться - это design Свобода: look Он такой же широкий, как и props тот widget Объявляем, и не более.
2. Решать first
| Если ты хочешь… | Возьми это path | Стоимость |
|---|---|---|
| а product row с live цены | productListing здесь | look ограниченный props; полоса cannot быть перекрашенным (§7)) |
| а product row с любой design | own разметка — own-markup.md | Цены и замораживание акций в разметку |
| а header/menu/footer Безошибочно Ваш | own разметка в chrome group — chrome.md | sticky Сегодня нужен обходной путь |
Скажи вилку вилке owner before Самый дорогой дефект, который был измерен На самом деле это была вилка, о которой никто не говорил..
3. где правда о props жизнь
GET /docs/widgets # public, no token, Cache-Control: max-age=300Пер. kind: label (ru/en), placement (chrome | page), render (slot | section), `writePath`, а JSON Схема этого props с неисправностями и choices — разрешенный values В каждой из них.
Это Созданный, не написанный: buildWidgetRegistry() каждый из них widget's own manifest.normalize на empty объект, поэтому ссылка сообщает, что парсер понимает, с по умолчанию, который использует рендерер. props: null значит, нет settings его own вообще; props: {} средство settings существуют и все они optional.
Никогда не пиши реквизит из памяти: а value Вне рамок принимается и default выдается, как эталонные состояния в его own note.
4. Виды, как и live Ссылка возвращает их
Семнадцать человек, сгруппированные по тому, где они settings Пойдем, счеты идут. schema sizes — читать тот schema само собой before писать.
Страница blocks которые сами себя рисуют (render: section, writePath: props): slideshow 14 · reels 19 · cards 3 · steps 22 · faq 16 · features 16 · cta 15 · columns 9.
Страница blocks кормить, page (render: slot) — Три из них вмещают свои props, Вот где заблудились писатели: productListing → `props.listing` (11) · productCard → `props.card` (1) · form → `props.form` (0, все optional) · breadcrumbs, pageHeading, html → props, нет props их own (html сконфигурирован как own разметка — own-markup.md).
Chrome (render: section, writePath: props): siteHeader 32 · siteMenu 16 · siteFooter 13.
Контейнеры перечислены ниже structural, не widgets:
- `group` —
props.widgets, Заказной список block ids. Тот, который form тот Платформа сохраняет композицию в: а header, а footer, а body template и а page feed Все они groups, Рассказывается отдельно от block'sgroup_typelabel. Видишь?chrome.md§3. heading— наследие: fields Садись на section, не подprops.zone— а page's own blocks вокруг body Наследует: сервис blocks__page:top(before тот body) и__page:bottom(after В сетке, в сетке pages тот геометрических зон, таких как__page:main;refs= block ids как JSON номера, page settings вpage, before/after placement в сетке pages вprops.zoneFlow. Живое: shop's page editor Рецепт и письмо. правила —/docs/components§4.7.1 Не использовать а zone как header, footer или template: Это те, кто groups.chromeKit(props.kit={top:[], bottom:[]}) — superseded через `group`. Читайте для магазинов, которые предшествовали этому; не пишите new один.
5.Письмо path Где агенты ошибаются
GET /content-blocks # → result[]: { id, name, sections[] }
PUT /content-blocks/{id} # { "id": …, "item": { "sections": [ … ] } }{ "type": "text", // coarse legacy field: image|slideshow|text|video
"payload": { "v": 2,
"kind": "productListing", // ← the widget's real identity
"props": { "listing": { "categoryId": 12, "limit": 24 },
"blockWidth": "content" } } }type это не тот widget — Он валидируется против ["image","slideshow","text","video"] И ничего не говорит о том, что нарисовано. payload.kind делать.
Для этого вложены проп. widget. writePath для productListing это props.listing, так limit это payload.props.listing.limit. Писать payload.props.limit Принимается и ничего не делает — парсер never взгляд Это вводит в заблуждение, потому что Форма чтения не является формой записи: тот schema показывает плоскость limit Потому что парсер возвращается плоским. why writePath существует вообще.
`sections` является заменой-set. Прочти block, Измените один элемент, отправьте Отправь один список назад. section Остальные исчезают: прото3 cannot выражение «ясно все», поэтому не-empty sections означает "заменить именно этим".".
Так что единственный безопасный монтаж читается → изменить один лист → PUT Весь список. проверять Перечитывая заново block, И, как только он вернулся, то, как он был послан, открывая page и считать, что cards. 200 не является доказательством (см. § 8)..
Быстро! view прямо из него listing. props.listing.cardClick: "modal" делает plain щелкнуть по card Открыть product В окне вместо навигации; showQuickViewButton: true Добавить отдельно button На каждую плитку. Окно описанный modalSize (small 480px · medium 1152px · full), modalHead и modalFoot (окно header и footer — тот footer где находятся стрелы, счетчик и page link live), modalTpl (тот body group) и modalNav (ходить current results со стрелами). ⚠️ modalHead и modalFoot есть отсутствующий `/docs/widgets`: У них нет никаких default — "незаполненный" означает "несмотря на то, что size подразумевать" (head На каждый size, full включенный; foot always off) — и генерируемые schema только перевозит fields Парсер возвращается за empty props. Их values Это те же самые окна, что и у тебя. own Маркировка - это одно струна: GET /docs/webcoding §14.3.
6. wrapper Также является конфигурируемым
Их топоры написаны рядом с `kind` — В корневой части props, Не внутри себя widget's writePath:
| ось | Тип | по умолчанию | |
|---|---|---|---|
props.blockWidth | "content" \ | "full" | "content" |
props.paddingSides | {top,right,bottom,left} х | 12 вертикальных, 24 горизонтальных (0 горизонтальных, когда full) | |
props.containerPadding | {top,right,bottom,left} х | — | |
props.blockRadius | px или {tl,tr,br,bl} | 16 | |
props.container | {fill, borderTop, borderBottom, borderColor} | — | |
props.innerMax | px или "content" | — | |
props.overflow | "visible" \ | "clip" | "visible" |
props.layer | number (z-order) | незавершенный |
Слои устройств являются props.tablet и props.mobile, Одинаковые ключи: отсутствующий layer Возвращается к более широкому. Побочные эффекты: overflow: "clip" Также сломается position: sticky внутри block, layer делает block расположенные и могут clip соседом's выпадение и kind: "html" Получить ноль padding и radius.
7.Известно limits — Скажи им вслух before многообещающий look
container.fillнаproductListingэто Принимается и ничего не делает: тот listing's own полоскать cannot Сегодня перекрасим;- тот listing template это
defaultИ нет других, —oneOf ["default"], empty означает shop default, unknown читать какdefault; siteMenu.level2Постройте настоящий выпад из category tree, Но он открывается нажать (Section.tsxпереключает active item вonClick). The schema description говорит "drop «Вверх по течению» — The description Это неправильно, не code;- а style value Вне ее энум возвращается к default вместо того, чтобы зажимать к нему:
WEIGHTSэто['400','500','600','700'], Взвешивание 800 на header name как его опоясывающий default600; siteMenu.labelStyle.sizeвkind: "text"в рендерахsize + 2— set 13, Браузер вычисляет 15px.
За этими границами ответ own-markup.md — И это стоит live data в product rows. Скажи так. before строительство, а не after.
8.Безмолвно ignored
| Что? | Что на самом деле происходит |
|---|---|
А. П. В корне props для вложенных widget (props.limit, не props.listing.limit) | принятый, хранимый, never читать |
| а value вне рамок | принятый, default выдается |
container.fill на productListing | Принято, полоса сохраняет свой цвет |
ан unknown template на productListing | принятый, читается как default |
Вес вне 400/500/600/700 | принятый, style's default вес отдается |
а PUT несущий один section из нескольких | Остальное - это deleted — не ignored, Но только молчаливый |
9. Пределы
- widget виды 17 (+3 structural); ссылка ~53 KB,
max-age=300; sectionsза content block: max 50 (validate.rules.repeated.max_items);- block
name: 1-255 символов.
10.Как это было проверено
- 2026-08-19, live
GET https://api.vizen.shop/docs/widgets→ 200, 53 200 bytes; Переосмысленные и переосмысленные 2026-08-20. §4 и §6 скопированы из этого ответа. - Источники читать:
vizen-market/storefront/scripts/gen-widgets-json.mjs,packages/sections/src/widgets/registry.ts,.../siteMenu/Section.tsx,packages/sections/src/siteChrome/config.ts,backend-3D/api/catalog/catalog.proto. - §7 items не прослеживается к этим источникам, полученным из измерений браузера витрина 2026-08-19; пересчитано здесь без изменений.