setInternalProperties — это способ сообщить корзине, что они являются единым целым.
Как работает группировка
Они передаются через
setInternalProperties, а не через Shopify. Это оверлей только для отображения: они никогда не попадают в properties, никогда не сохраняются в Shopify и никогда не появляются в заказе.
Шаг 1: выясните, что записывает ваше приложение
_), содержащее ID, ссылку или название бандла. Типичны варианты вроде _bundle_id, _bundle_ref или _parent_id. Запишите точный ключ и отметьте, помечена ли одна из строк как основной товар.
Шаг 2: сопоставьте это с каноническими свойствами
Если ваше приложение не помечает основной товар, полностью опустите
_aftersell_cart_bundle_role. Корзина выберет якорь за вас.Что вы получаете
bundle, и панель отображает бандл как один товар:
- Дочерние строки вкладываются под якорь, а не отображаются отдельными рядами.
- Количество атомарно. Изменение количества бандла масштабирует всех участников вместе, используя коэффициент
perAnchorQtyкаждого дочернего элемента, поэтому бандл с двумя единицами одного компонента сохраняет это соотношение два к одному. - Удаление атомарно. Удаление бандла удаляет все строки участников одним запросом, а не оставляет осиротевшие компоненты.
- Одна строка цены. Что она показывает, зависит от настройки bundle price в блоке Cart items: сумму всех участников или только цену основного товара.
Как выбирается якорь
- Строка с
_aftersell_cart_bundle_role, установленным вparent. - Иначе — участник с самой высокой ценой.
- Иначе — первый участник в корзине.
Правила, которые стоит знать
- Бандлу нужно минимум две строки. Одиночная строка с ID бандла остаётся нетронутой и отображается обычным образом.
- Нативные бандлы Shopify уже обрабатываются. Строки, которые сам Shopify помечает как компонентные, пропускаются этой группировкой и адаптируются автоматически. Это нужно только для приложений, добавляющих отдельные строки.
- Трансформация выполняется при каждом рендере. Держите её лёгкой и без побочных эффектов. Не вызывайте действия и не выполняйте fetch внутри неё.
- Слияние аддитивно. Ваши свойства объединяются с установленными другой трансформацией. При реальном конфликте по одному и тому же ключу побеждает последняя зарегистрированная трансформация.
- Группировка выполняется после скрытия и переименования и до сортировки. Поэтому строка, скрытая через
setHidden, никогда не станет частью бандла, а компаратор видит якорь, а не дочерние строки.
Чтение бандла
bundle.memberKeys, содержащий key каждого участника, включая якорь.
Использование для других задач
setInternalProperties, но оверлей — это общий канал для данных только для отображения, которые вы вычисляете из строки. Всё, что вы туда помещаете, доступно для чтения в line.internalProperties и в блоке Custom code, не затрагивая реальную корзину:
properties[...] на форме товара, чтобы значение доходило до Shopify независимо от того, кто выполняет добавление.
Что дальше
registerLineTransform: хук, через который это выполняется.- Объект корзины: структура
bundleи его дочерних элементов. - Блок Cart items: настройка цены бандла.