Skip to main content
アクションはカートを読み取り、変更しますwindow.aftersell.cart.actions の下にあります。
アクションは、ready() の中またはイベントハンドラの中で、カートの準備が整ってから実行してください。
カートの読み込み前、アクションはスタブです。 それぞれがアクション名を含むコンソール警告(例: cart.actions.addItem() called before the cart loaded)を出力し、何もしません。非同期アクションは Promise を解決するため、.then() チェーンは例外を投げずに通常どおり実行されます。getCart()null を返し、formatMoney() は空文字列を返します。早く呼びすぎても何も壊れませんが、何も起こりません。アクションが何もしていないように見えるときは、コンソールでその警告を確認してください。

すべてのアクション

cart_updated ハンドラからアクションを呼ぶとループする可能性があります。まず2 つのルールを読んでください。

ドロワー

open と close

カートドロワーを開閉します。どちらも同期的で、引数を取りません。

読み取り

getCart()

現在のカートオブジェクトを返します。読み込み前は null を返します。結果はコピーなので、書き換えても実際のカートは変わりません。
スナップショットなので、結果を保持し続けず、最新のデータが必要になるたびに読み直してください。イベントハンドラの中では、すでにペイロードとして最新のカートを受け取っているため、そこで getCart() を呼ぶ必要はありません。

formatMoney(cents)

ストアの金額フォーマットを使って、最小通貨単位の金額をフォーマットします。SDK 内のすべての価格はセント単位なので、これが表示可能な形に変換する方法です。
フォーマットは configure({ money_format }) で上書きできます。

カートの変更

アイテム系のアクションは、バリアント ID ではなく Shopify の key でラインを識別します。カートは同じバリアントを異なるプロパティで複数のラインに保持できるためです。getCart().items[n].key から読み取ってください。

addItem(variantId, quantity?)

バリアントをカートに追加します。quantity のデフォルトは 1 です。カートが確定した時点で解決されます。
すでにカートに入っているバリアントを追加すると、既存のラインにラインアイテムプロパティがない限り、2 つ目のラインが作られるのではなく、そのラインの数量が増えます。プロパティを持つラインは別のラインとして扱われるため、新しいラインが作られます。

removeItem(key)

ラインを完全に削除します。

updateItemQuantity(key, quantity)

ラインの数量を設定します。0 を渡すとラインが削除されます。
2 つ目の例は、2 回目のパスでは > 1 のチェックが false になるため、cart_updated から実行しても安全です。2 つのルールを参照してください。

replaceLineVariant(key, variantId)

数量とプロパティを保持したまま、ラインのバリアントを交換します。カート内のサイズやフレーバーの切り替えに便利です。
交換すると、ラインの販売プランはリセットされます。プランを再適用しない限り、サブスクリプションのラインは単発購入になります。
交換はその場での編集ではなく、追加してから削除する処理なので、結果は新しいラインになります。新しい key が付与され、カートの末尾に配置されます。渡した key を再利用するのではなく、その後で getCart() を読み直してください。

リフレッシュ

refresh()

Shopify からカートを再取得します。SDK の外部で何かがカートを変更し、ドロワーがそれに気付かなかった場合に使います。
Aftersell はすでに Shopify の標準的なカートイベントをリッスンして自動で再取得するため、ほとんどの場合これは不要です。カスタム連携がそれらをバイパスする場合に使ってください。

visualRefresh()

Shopify からカートを再取得せずに、レンダリング変換を再実行します。必要になることはまれです。ライン変換コンパレータエンリッチャー、またはいずれかのサブスクリプションフックを登録(または登録解除)すると、自動的に実行されます。画面上のものを何も変えない 2 つのカート追加フックだけは実行しません。 変換が依存しているものが変わったのに、カート自体は変わっていないときに使ってください:

注意点とエッジケース

  • 非同期アクションは変更が確定した時点で解決されます。 await すれば、カートが実際に更新された後に処理を続けられます。
  • getCart() はコピーを返します。 書き換えても実際のカートには何も起こりません。
  • ディスカウントコード用のアクションはありません。 適用されたコードはカート(discountCodestotalDiscount)とラインごと(discountAllocations)に読み取れます。買い物客は Discount code ブロックからコードを適用します。
  • カート属性やメモ用のアクションはありません。 属性はカートオブジェクトから読み取れます。買い物客は Notes ブロックからメモを書き込みます。
  • ラインを削除せずに非表示にするにはregisterLineTransform を使ってください。削除は買い物客の合計金額を変えますが、非表示は変えません。

次のステップ