Vizen Shop

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 с любой designown разметка — own-markup.mdЦены и замораживание акций в разметку
а header/menu/footer Безошибочно Вашown разметка в chrome group — chrome.mdsticky Сегодня нужен обходной путь

Скажи вилку вилке 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's group_type label. Видишь? 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.blockRadiuspx или {tl,tr,br,bl}16
props.container{fill, borderTop, borderBottom, borderColor}—
props.innerMaxpx или "content"—
props.overflow"visible" \"clip""visible"
props.layernumber (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 как его опоясывающий default 600;
  • 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; пересчитано здесь без изменений.

Исходник: https://api.vizen.shop/docs/widgets-area?full=1

Работает в демо-режиме