setInternalPropertiesは、それらが1つのものであることをカートに伝える方法です。
グループ化の仕組み
これらはShopify経由ではなく、
setInternalPropertiesを通じて設定します。これらはレンダリング専用のオーバーレイです。propertiesには決して届かず、Shopifyに永続化されることも、注文に表示されることもありません。
ステップ1:アプリが何を書き込んでいるか確認する
_で始まる)です。_bundle_id、_bundle_ref、_parent_idなどが典型的です。正確なキーと、いずれかのラインがメイン商品としてマークされているかどうかをメモしてください。
ステップ2:正規プロパティにマッピングする
アプリがメイン商品をマークしていない場合は、
_aftersell_cart_bundle_roleを完全に省略してください。カートが自動的にアンカーを選択します。得られるもの
bundleオブジェクトを持ち、ドロワーはバンドルを単一のアイテムとしてレンダリングします。
- 子は個別の行として表示される代わりに、アンカーの下にネストされます。
- 数量はアトミックです。 バンドルの数量を変更すると、各子の
perAnchorQty比率を使ってすべてのメンバーが一緒にスケーリングされます。あるコンポーネントを2つ含むバンドルは、その2対1の関係を維持します。 - 削除はアトミックです。 バンドルを削除すると、孤立したコンポーネントを残すことなく、1回のリクエストですべてのメンバーラインが削除されます。
- 価格行は1つです。 表示内容はCart itemsブロックのバンドル価格設定に従います。全メンバーの合計か、メイン商品の価格のみかを選べます。
アンカーの選ばれ方
_aftersell_cart_bundle_roleがparentに設定されたライン。- それがなければ、最も価格の高いメンバー。
- それもなければ、カート内の最初のメンバー。
知っておくべきルール
- バンドルには少なくとも2つのラインが必要です。 バンドルIDを持つ単一のラインはそのまま残され、通常どおりレンダリングされます。
- Shopifyネイティブのバンドルはすでに処理されています。 Shopify自体がコンポーネント化としてマークしたラインは、このグループ化ではスキップされ、自動的に適応されます。これが必要なのは、個別のラインを追加するアプリの場合のみです。
- トランスフォームはレンダリングのたびに実行されます。 軽量に保ち、副作用を避けてください。その内部からアクションを呼び出したりフェッチしたりしないでください。
- マージは加算的です。 あなたのプロパティは、他のトランスフォームが設定したものとマージされます。同じキーで真の競合が発生した場合は、最後に登録されたトランスフォームが優先されます。
- グループ化は非表示化とリネームの後、ソートの前に実行されます。 そのため、
setHiddenで非表示にしたラインがバンドルの一部になることはなく、コンパレーターは子ではなくアンカーを参照します。
バンドルの読み取り
keyを保持するbundle.memberKeysを使用してください。
他の用途での活用
setInternalPropertiesが作られた目的ですが、このオーバーレイはラインから導出したレンダリング専用データのための汎用チャネルです。ここに置いたものは、実際のカートに触れることなく、line.internalPropertiesとカスタムコードブロックで読み取れます。
properties[...] の hidden input を追加すれば、追加を実行するのが誰であれ、Shopify にその値が届きます。
次に読むべきページ
registerLineTransform:この処理が実行されるフック。- カートオブジェクト:
bundleとその子の構造。 - Cart itemsブロック:バンドル価格の設定。