Skip to main content
Custom codeブロックは、独自のHTMLまたはReactをカートに追加します。ドロワーの任意のセクションに配置するか、Cart items内にサブブロックとしてネストして、各ラインごとに繰り返し表示させることができます。他のブロックとは異なり、Content設定もDesignセクションもありません。ブロック自体がコード_そのもの_なので、作業はすべて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モードでは、少数のトークンがマークアップに置き換えられます。静的またはトークン駆動のコンテンツ向けであり、ロジックの実行には向いていません。
  • インラインの<script>タグは実行されず、HTMLモードはSDKやwindowにアクセスできません。
  • ロジックが必要な場合は、Reactモード、またはCart SDKと組み合わせたカスタムスクリプトを使用してください。

トークン

トークンの値は、そのままマークアップに使えるフォーマット済みの文字列(ショップの通貨形式、%付きのパーセンテージ、または数量)です。

Reactモード

Reactモードはコンポーネントをコンパイルし、カートデータとadd-to-cartアクションを渡します。
  • エディターはラッパーをfunction CustomCode(props: CustomCodeProps) { … }に固定しており、それらの行の間の本体のみを編集します。
  • ブロックが表示される前に、Compileをクリックしてから、**「Use custom template」**をオンにする必要があります。
  • コンポーネントではuseStateuseEffectuseMemouseRefuseCallbackを使用できます。
  • HTMLモードと異なり、Reactはページコンテキストで実行されるため、利用可能であればwindowCart SDKを呼び出せます。
  • コンポーネントが実行時にエラーをスローした場合、ブロックは何もレンダリングせず、カートの他の部分は動作し続けます。

Props

合計や節約額は、その通貨の補助単位(USDならセント)での整数値です。つまり$12.501250であり、12.50ではありません。HTMLトークンのようなフォーマット済み金額文字列ではありません。

カートとラインの構造

cartlineは、SDKが他のあらゆる場所で公開しているのと同じオブジェクトです。そのため、**カートオブジェクトリファレンス**にまとめてドキュメント化されています。カート、ライン、バンドルのすべてのフィールドが記載されています。 最もよく使うのは、cart.itemscart.itemCountcart.totalPriceline.titleline.quantityline.finalLinePriceです。 このブロックに固有の3つのポイント:
  • lineはCart itemsのサブブロックでのみ設定され、コンポーネントはラインごとに1回レンダリングされます。セクションとして配置した場合、linenullになるため、代わりにcart.itemsを読み取ります。
  • バンドルの子はcart.itemsに含まれません。 ラインがバンドルにグループ化されている場合、アンカーラインのみが表示され、子はline.bundle.childrenに含まれます。
  • ライントランスフォームによって非表示にされたラインも含まれませんが、それらは引き続きcart.totalPriceにカウントされます。

商品数を表示する:
Cart itemsのサブブロックとしては、props.lineを使って商品ごとのコンテンツを表示します。ブロックはラインごとに1回レンダリングされ、そのラインの商品とバリエーションがタグ付けされます。

エンリッチメントメタデータの読み取り

cart.itemsの各アイテムにはmetadataフィールドがあります。カートエンリッチャーがデータを設定するまでは空のオブジェクト{}です。設定されると、エンリッチャーのidをキーとして、そのラインの商品またはバリエーションのStorefrontデータが含まれます。
metadataは常に存在し、エンリッチャーの非同期フェッチが完了するまでは空のオブジェクト{}がデフォルトです(「まだエンリッチされていない」かどうかのテストはObject.keys(item.metadata).length === 0です)。特定のエンリッチャーのキーを読み取る際は、エンリッチメントが完了するまでそのキーが存在しないため、オプショナルチェーン(item.metadata?.enricherId)を使用してください。

ディスカウントコードとラインディスカウントの読み取り

cart.discountCodesにはカートに適用されているディスカウントコードが一覧され、各ラインのdiscountAllocationsにはそのラインに適用されているディスカウントが一覧されます。

配置と制限

  • 領域: 任意(上部、本体、下部)。Cart itemsのサブブロックとしても利用可能です。
  • 最大数: 無制限。
  • 状態: 商品が入ったカートと空のカート(セクションブロックとして)。Cart itemsのサブブロックとしては、カートにラインがある場合のみ、ラインごとに1インスタンスがレンダリングされます。
  • ロックされていないため、削除や非表示が可能です。
  • ブロック単位のDesignセクションはありません。独自のマークアップ、カスタムCSS、およびグローバルのデザイン設定でスタイルを設定してください。

カスタムコードブロック、カスタムテンプレート、カスタムスクリプトの使い分け