Блок Custom code добавляет в корзину ваш собственный HTML или React. Разместите его в любой секции выдвижной корзины или вложите внутрь Cart items как вложенный блок, чтобы он повторялся для каждой строки. В отличие от других блоков, у него нет настроек Content и раздела Design: блок и есть код, поэтому вы работаете полностью на его вкладке Code.

Добавление и включение блока Custom code
- Добавьте блок Custom code в любую секцию или как вложенный блок под Cart items.
- Выберите его и откройте вкладку Code.
- Выберите HTML или React component. Новые блоки по умолчанию используют HTML.
- Напишите свой код.
- Если вы выбрали React, нажмите Compile.
- Включите «Use custom template». Для этого блока этот переключатель означает «показывать мой пользовательский код», и по умолчанию он выключен, поэтому ничего не отображается, пока вы его не включите.
- Держите переключатель-глаз в боковой панели включённым, чтобы блок оставался видимым для покупателей.
Поведение
- Блок ничего не отображает, пока корзина не загрузится.
- Он также ничего не отображает, когда выключен глаз в боковой панели, выключен «Use custom template», код пуст или React не смог скомпилироваться или отобразиться. Поскольку сбой происходит без сообщений, проверьте блок в предпросмотре перед публикацией.
Режим HTML
- Встроенные теги
<script>не выполняются, и режим HTML не имеет доступа к SDK илиwindow. - Для логики используйте режим React или пользовательские скрипты с Cart SDK.
Токены
% или количество), готовые к вставке в разметку:
Пример
Режим React
add-to-cart.
- Редактор фиксирует обёртку
function CustomCode(props: CustomCodeProps) { … }, и вы редактируете только тело между этими строками. - Прежде чем блок появится, необходимо нажать Compile, а затем включить «Use custom template».
- Ваш компонент может использовать
useState,useEffect,useMemo,useRefиuseCallback. - В отличие от режима HTML, React выполняется в контексте страницы, поэтому может обращаться к
windowи Cart SDK, когда они доступны. - Если ваш компонент выбрасывает ошибки во время выполнения, блок ничего не отображает, а остальная часть корзины продолжает работать.
Пропсы
$12.50 — это 1250, а не 12.50. Это не отформатированные денежные строки, как токены HTML.
Структуры cart и line
cart и line — те же объекты, которые SDK предоставляет везде, поэтому они задокументированы один раз в справочнике объекта корзины: каждое поле корзины, строки и бандла.
Те, к которым вы будете обращаться чаще всего: cart.items, cart.itemCount, cart.totalPrice, line.title, line.quantity, line.finalLinePrice.
Три особенности этого блока:
lineзадан только у вложенного блока Cart items, где ваш компонент отображается один раз на строку. При размещении в секцииlineравенnull, и вместо этого вы читаетеcart.items.- Дочерние элементы бандла отсутствуют в
cart.items. Когда строки сгруппированы в бандл, появляется только якорная строка; её дочерние элементы находятся вline.bundle.children. - Строк, скрытых трансформацией строк, там тоже нет, хотя они по-прежнему учитываются в
cart.totalPrice.
Примеры
props.line для контента по каждому товару. Блок отображается один раз на строку, помеченный товаром и вариантом этой строки:
Чтение метаданных обогащения
cart.items несёт поле metadata: пустой объект {}, пока обогатитель корзины не заполнит его. После заполнения оно индексируется по id обогатителя и содержит данные Storefront для товара или варианта этой строки:
metadata всегда присутствует и по умолчанию является пустым объектом {}, пока асинхронная загрузка обогатителя не завершится (проверка «ещё не обогащено» — Object.keys(item.metadata).length === 0). Используйте опциональную цепочку (item.metadata?.enricherId) при чтении ключа конкретного обогатителя, поскольку этот ключ отсутствует, пока обогащение не завершится.
Чтение кодов скидок и скидок по строкам
cart.discountCodes перечисляет коды скидок, применённые к корзине, а discountAllocations каждой строки перечисляет скидки, применённые к этой конкретной строке:
Размещение и ограничения
- Область: любая (верх, тело или низ). Также доступен как вложенный блок Cart items.
- Максимум: без ограничений.
- Состояние: заполненная и пустая корзина (как блок секции). Как вложенный блок Cart items отображается только когда в корзине есть строки, по одному экземпляру на строку.
- Не заблокирован, поэтому вы можете удалить или скрыть его.
- Поблочного раздела Design нет. Оформляйте через собственную разметку, пользовательский CSS и глобальные настройки дизайна.