Skip to main content
Корзина знает то, что сообщает ей Ajax API Shopify: заголовки, цены, количества, свойства. Она не знает ваши метаполя. Cart enricher получает дополнительные поля товара или варианта из Storefront API и прикрепляет их к каждой подходящей строке, чтобы вы могли показать оценку сроков доставки, предупреждение «отправляется отдельно», список ингредиентов или что угодно ещё, что вы храните на товаре. Типичные применения: окна доставки по товарам, значки аллергенов или ингредиентов, пользовательский флаг «мало на складе», множители баллов лояльности, цены только для подписчиков.

Регистрация enricher

Три поля: Каждый раз при загрузке или изменении корзины Aftersell запрашивает ваш фрагмент для каждого товара или варианта в корзине. Запрос неблокирующий: корзина отображается немедленно и повторно генерирует cart_updated, когда данные приходят. Медленный или сбойный фрагмент никогда не задерживает и не ломает корзину.

Чтение данных

Поскольку обогащение асинхронно, line.metadata.delivery равно undefined, пока не разрешится первый запрос. Всегда защищайте чтение проверкой.

Отображение в корзине

Обогащение помещает данные на строку; блок Custom code в режиме React их отрисовывает. Добавьте блок как подблок Cart items, чтобы он отображался один раз на строку и получал эту строку как props.line:
Обогащённые значения возвращаются из Storefront API как есть и без санитизации. Отображайте их как текст, как показано выше, и никогда через dangerouslySetInnerHTML или записывая сырой HTML.

Данные на уровне варианта

Установите onType: 'ProductVariant', когда метаполе находится на варианте, а не на товаре:

Больше, чем метаполя

Фрагмент встраивается в запрос Storefront API, поэтому работает всё, что API предоставляет на Product или ProductVariant, а не только метаполя:

Что важно сделать правильно

  • Защищайте каждое чтение. metadata по умолчанию равно {}, а ваше пространство имён — undefined, пока не разрешится запрос. Корзина всегда отображается до прихода данных.
  • Каждый id — собственное пространство имён. Несколько enricher-ов сосуществуют без коллизий, включая зарегистрированные другими приложениями.
  • Метаполя должны быть видимы для Storefront. Метаполе, не открытое для Storefront API, возвращает null. Проверьте определение в админке Shopify, если ничего не получаете.
  • Держите фрагмент небольшим. Он выполняется для каждого товара в корзине при каждом её изменении. Запрашивайте поля, которые используете, а не всё подряд.
  • Регистрируйте на этапе настройки. Это хук, поэтому его место в начале скрипта Initialization.
  • Скобки должны быть сбалансированы. Без внешних скобок вокруг фрагмента, но любая вложенная выборка требует своей пары. Несбалансированный фрагмент отклоняется.

Что дальше