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

Добавление и включение блока Custom code

  1. Добавьте блок Custom code в любую секцию или как вложенный блок под Cart items.
  2. Выберите его и откройте вкладку Code.
  3. Выберите HTML или React component. Новые блоки по умолчанию используют HTML.
  4. Напишите свой код.
  5. Если вы выбрали React, нажмите Compile.
  6. Включите «Use custom template». Для этого блока этот переключатель означает «показывать мой пользовательский код», и по умолчанию он выключен, поэтому ничего не отображается, пока вы его не включите.
  7. Держите переключатель-глаз в боковой панели включённым, чтобы блок оставался видимым для покупателей.
Чтобы блок появился, должны быть включены и переключатель-глаз, и «Use custom template».

Поведение

  • Блок ничего не отображает, пока корзина не загрузится.
  • Он также ничего не отображает, когда выключен глаз в боковой панели, выключен «Use custom template», код пуст или React не смог скомпилироваться или отобразиться. Поскольку сбой происходит без сообщений, проверьте блок в предпросмотре перед публикацией.

Режим HTML

Режим HTML подставляет небольшой набор токенов в вашу разметку. Он предназначен для статического или управляемого токенами контента, а не для выполнения логики.

Токены

Значения токенов — это отформатированные строки (денежный формат магазина, процент со знаком % или количество), готовые к вставке в разметку:

Пример

Режим React

Режим React компилирует компонент и передаёт ему данные корзины плюс действие add-to-cart.
  • Редактор фиксирует обёртку function CustomCode(props: CustomCodeProps) { … }, и вы редактируете только тело между этими строками.
  • Прежде чем блок появится, необходимо нажать Compile, а затем включить «Use custom template».
  • Ваш компонент может использовать useState, useEffect, useMemo, useRef и useCallback.
  • В отличие от режима HTML, React выполняется в контексте страницы, поэтому может обращаться к window и Cart SDK, когда они доступны.
  • Если ваш компонент выбрасывает ошибки во время выполнения, блок ничего не отображает, а остальная часть корзины продолжает работать.

Пропсы

Итоги и суммы экономии — целые числа в младших единицах валюты (центы для USD), поэтому $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.

Примеры

Показать количество товаров:
Как вложенный блок Cart items, используйте 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 и глобальные настройки дизайна.

Когда использовать блок пользовательского кода, пользовательский шаблон или пользовательский скрипт