EC・カート機能について

a-blog cms でEC・カート機能を利用するには、Shopping Cart 拡張アプリの使用を推奨しています。

Shopping Cart 拡張アプリとは

Shopping Cart 拡張アプリとは、1エントリーを1商品として扱い、カート機能や在庫管理機能、クレジットカード決済などのECサイトとしての基本的な機能を提供する拡張アプリです。

具体的には以下の機能を提供しています。

  • 1エントリーを1商品として扱うカート機能
  • 在庫管理機能
  • クレジットカード決済機能(Square)
  • 決済手数料の設定
  • 税金設定(税率、内税・外税)
  • 送料設定
  • 配送オプション(配送希望日時と追加手数料)
  • マイページ機能(閲覧ページ上でのユーザー情報の編集)

また、サンプルテーマとして EC テーマを同梱しています。カスタマイズの際はサンプルテーマを参考に実装することができます。

動作環境

  • a-blog cms: Ver. 3.0.0 ~
  • PHP: 7.4.x ~ 8.3.x
  • ブラウザ:Chrome、Firefox、Safari(>= 12)、Edge、iOS:Safari(>= 12)、Android Chrome

会員機能について

Shopping Cart拡張アプリと a-blog cms 標準の機能である会員機能は組み合わせて使用することで会員登録制のECサイトを作成することができるようになります。会員機能を有効にすることで、自由にユーザーを登録することができるようになるためです。さらに、読者権限ユーザーでユーザー登録をするように設定することで会員数が多くなっても安心の会員登録制のECサイトを構築できます。会員機能を利用するには管理画面>ご利用のコンフィグセットのコンフィグ管理 > ログイン設定 に移動し「ユーザー登録の外部申請」にチェックを入れてください。

会員機能について、詳しく知りたい方はこちらのドキュメントをお読みください。

同梱されているサンプルテーマについて

Shopping Cart 拡張アプリにはサンプルテーマとして、以下のテーマが同梱されています。ShoppingCart 拡張アプリを使用した EC サイト制作の参考にご利用ください。

  • ec
  • square@ec

まとめ

ここまで読んだあなたは、 a-blog cms で EC サイトを作るための学習をする準備が整いました。それでは実際に、Shopping Cart 拡張アプリをインストールして初期設定を行ってみましょう。

Shopping Cart 拡張アプリのインストールから基本設定までを解説したドキュメントはこちら​です。
一緒に、a-blog cms で ECサイトを作ってみましょう。

インストール方法

このエントリーでは、Shopping Cart 拡張アプリ及びサンプルテーマのインストール方法を説明します。Shopping Cart 拡張アプリのインストール方法は以下の2つの方法があります。

  • 簡単セットアップ for square@ec テーマを使用してインストールする
  • 手動でインストールして、メンテナンスページからサンプルテーマのデータをインポートする

それぞれ説明します。

簡単セットアップ for square@ec テーマを使用してインストールする

まず、簡単セットアップを使用してShopping Cart 拡張アプリ及びサンプルテーマのインストールをする方法をご紹介します。この方法が最も簡単にShopping Cart 拡張アプリ及びサンプルテーマのインストールができ、サンプルテーマのデータまで一括でインストールできるため、基本的には簡単セットアップを使用してインストールすることを推奨します。

簡単セットアップ for square@ec テーマ の使用方法

簡単セットアップ for square@ec テーマ をダウンロード

  1. 上記のボタンから簡単セットアップ for square@ec テーマ の zip ファイルをダウンロードしてください。
  2. ダウンロードした zip ファイルを解凍し、 setup.php を入手します。
  3. setup.phpをサーバーのインストールしたいディレクトリに設置します。
  4. setup.phpを設置したURLにブラウザからアクセスして、 setup.php を実行します。
  5. セットアップページが表示されたら、セットアップページのメッセージに従ってセットアップを進めてください。

手動でインストールして、メンテナンスページからサンプルテーマのデータをインポートする

次に紹介する方法は Shopping Cart 拡張アプリを手動でインストールする方法です。通常の拡張アプリを使用したことがある方や、a-blog cms に慣れている方はもしかしたらこちらの方法のほうがやりやすいかもしれません。

また、既に a-blog cms で制作しているサイトに EC 機能を追加したい場合にもこちらの方法がおすすめです。

この方法では、Shopping Cart 拡張アプリを extension/plugins/ に設置して、Shopping Cart 拡張アプリをダウンロード後、メンテナンスページのインポート機能を利用して、サンプルテーマのデータをインポートします。​

Shopping Cart 拡張アプリをダウンロード

  1. 上記のボタンからShopping Cart 拡張アプリ の zip ファイルをダウンロードしてください。
  2. ダウンロードした zip ファイルを解凍し、 plugins ディレクトリから、ShoppingCart 拡張アプリを入手します。
  3. 入手した ShoppingCart 拡張アプリを extension/plugins に設置してください。
  4. config.server.php で HOOK_ENABLE を有効化してください
  5. 管理画面 > 拡張アプリ から「インストール」ボタンをクリックして、インストールを行います。インストール後は拡張アプリが有効化された状態になります。
  6. ShoppingCart 拡張アプリのインストール時に themes ディレクトリに サンプルテーマがない場合、サンプルテーマがダウンロードされます。
  7. a-blog cms 設置ディレクトリ直下の setup_xxxx ディレクトリ(存在しない場合はご利用のa-blog cmsと同じバージョンをダウンロードし、パッケージ内にある setup ディレクトリを設置してください)内の bin ディレクトリ直下に ダウンロードしたファイル内のbinディレクトリから、利用したいテーマ名の フォルダ(例:square@ec)を設置します
  8. https://ドメイン/setup_xxxx/index.php にアクセスします。
  9. メンテナンスページのガイドに従ってサンプルテーマのデータをインポートします。(メンテナンスページのインポート手順に関してはこちらのドキュメントを参考にしてください)

まとめ

ここまでで、Shopping Cart 拡張アプリ のインストール方法について学びました。ここまでの内容を理解することができたら、次は Shopping Cart 拡張アプリの基本設定を学ぶと良いでしょう。Shopping Cart 拡張アプリの基本設定についてはこちらのエントリーで解説しています。

リファレンス

Shopping Cart 拡張アプリで提供している機能についてのリファレンスです。

GETモジュール

Shopping Cart 拡張アプリで提供している GET モジュールについてのリファレンスです。

ショッピングカートサマリー
ShoppingCart_Summary
カート内エントリー(商品)の一覧を表示
ショッピングカートセッティングス
ShoppingCart_Settings
ShoppingCart拡張アプリの設定を表示
オーダーサマリー
Order_Summary
注文情報を表示
ショッピングカート
ShoppingCart
カートへの追加・削除・更新などの処理を行った結果を表示
シッピンググループアドミンセレクト
ShippingGroup_AdminSelect
Ver. 2.1.0〜
エントリー編集画面で選択可能な配送グループを表示
ペイメントセレクト
Payment_Select
Ver. 2.1.0〜
決済フォームで選択可能な決済方法を表示
アディションセレクト
Addition_Select
Ver. 2.1.0〜
決済フォームで選択可能な追加手数料を表示
ショッピングフォーム
ShoppingForm
決済フォームの表示
ショッピングフォーム ナウ
ShoppingForm_Now
今すぐ決済フォームの表示

ShoppingCart_Summary

カート内エントリー(商品)の一覧を表示できます。モジュールID設定 > 条件設定 > 引数 でブログIDを指定することで、指定したブログのカート内容を表示できます。

Order_Summary

カートの注文内容(注文商品、決済方法、追加手数料、注文金額)を表示します。POSTリクエスト(ShoppingForm_XXXモジュールでの送信)に配送地域、決済方法、追加手数料のデータをカスタムフィールド形式で送信した場合、配送料、決済手数料、追加手数料の金額も表示できます。

また、モジュールID設定 > 条件設定 > 引数のエントリーIDを指定することで、商品(エントリー)1つの注文内容を表示できます。(Ver. 2.1.0より、エントリーIDを指定しなくても、商品(エントリー)1つの注文内容を表示できるようになりました。)今すぐ購入フォームを実装する場合に利用できます。

タッチモジュール

Shopping Cart 拡張アプリで提供しているタッチモジュールについてのリファレンスです。

Touch_CartItem カートに商品が存在するときのみ表示する ソース
<!-- BEGIN_MODULE Touch_CartItem -->
<!-- END_MODULE Touch_CartItem -->
Touch_NotCartItem カートに商品が存在しないときのみ表示する ソース
<!-- BEGIN_MODULE Touch_NotCartItem -->
<!-- END_MODULE Touch_NotCartItem -->

POST モジュール

Shopping Cart 拡張アプリで提供している POST モジュールについてのリファレンスです。



モジュール名 概要
ShoppingCart_AddItem カートに商品を追加・更新します。
ShoppingCart_RemoveItem カートから商品を削除します。
ShoppingCart_Update_Quantity カートアイテムの数量を更新します。
ShoppingForm_Confirm 購入フォームを別のステップに遷移します。
ShoppingFrom_Submit 購入フォームを送信します。標準のFrom_Submitモジュールの機能に加えて、在庫管理や決済処理を行います。
ShoppingForm_ConfirmNow 今すぐ購入フォームを別のステップに遷移します。
ShoppingFrom_SubmitNow 今すぐ購入フォームを送信します。標準のFrom_Submitモジュールの機能に加えて、在庫管理や決済処理を行います。

ShoppingCart_AddItem

ShoppingCart_AddItem モジュールは、カートに商品を追加・更新するためのモジュールです。

フィールド

以下のフィールドを指定して実行できます。



フィールド 概要 備考
eid カートに追加するエントリー(商品)のエントリーID 必須
quantity カートに追加する数量を数値で指定 必須, 数値

カートアイテムには、上記の項目に加えて独自のデータをカスタムフィールドの形式で追加することができます。以下のソースコードは、カラーとサイズの項目をカートのカスタムフィールドとして追加する際のテンプレート例です。

<!-- BEGIN_MODULE ShoppingCart -->
<!-- BEGIN add -->
<!-- BEGIN_IF [{status}/eq/success] -->
<p class="acms-alert acms-alert-success">カートに商品を追加しました。</p>
<!-- ELSE -->
<p class="acms-alert acms-alert-danger">カートに商品を追加できませんでした。</p>
<!-- END_IF -->

<form action="" method="post" enctype="multipart/form-data">
    <div class="entry-price-bottom-box">
      <table class="entry-item-select-table">
        <tr>
          <th>色選択</th>
          <td>
            <select name="item_color">
              <option value="">選択してください</option>
              <option value="赤">赤色</option>
              <option value="黄">黄色</option>
            </select>
            <input type="hidden" name="field[]" value="item_color" />
          </td>
        </tr>
        <tr>
          <th>サイズ</th>
          <td>
            <select name="item_size">
              <option value="">選択してください</option>
              <option value="S">S</option>
              <option value="M">M</option>
              <option value="L">L</option>
            </select>
            <input type="hidden" name="field[]" value="item_size" />
          </td>
        </tr>
        <tr>
          <th>個数</th>
          <td>
            <select name="quantity" class="acms-admin-form-width-full">
              <option value="1">1</option>
              <option value="2">2</option>
              <option value="3">3</option>
              <option value="4">4</option>
              <option value="5">5</option>
              <option value="6">6</option>
              <option value="7">7</option>
              <option value="8">8</option>
              <option value="9">9</option>
              <option value="10">10</option>
            </select>
            <input type="hidden" name="cart[]" value="quantity">
            <div role="alert" aria-live="assertive">
              <div
                data-validator-label="quantity-v-required"
                class="validator-result-{quantity:validator#required}"
              >
               <p class="form-error-text">数量を選択してください。</p>
              </div>
            </div>
            <div role="alert" aria-live="assertive">
              <div
                data-validator-label="quantity-v-regex"
                class="validator-result-{quantity:validator#regex}"
              >
               <p class="form-error-text">数量の形式が間違っています。</p>
              </div>
            </div>
            <div role="alert" aria-live="assertive">
              <div
                data-validator-label="quantity-v-min"
                class="validator-result-{quantity:validator#min}"
              >
               <p class="form-error-text">1未満の数量は選択できません。</p>
              </div>
            </div>
            <div role="alert" aria-live="assertive">
              <div
                data-validator-label="quantity-v-stock"
                class="validator-result-{quantity:validator#stock}"
              >
               <p class="form-error-text">注文可能な数量を超えています。</p>
              </div>
            </div>
          </td>
        </tr>
      </table>
    </div>
    <button class="btn is-width-full" type="submit" name="ACMS_POST_ShoppingCart_AddItem">
      <span>カートに入れる</span>
    </button>
    <input type="hidden" name="eid" value="%{EID}">
    <input type="hidden" name="cart[]" value="eid">
</form>
<!-- END add -->
<!-- END_MODULE ShoppingCart -->

エラー時の表示

ShoppingCart_AddItem モジュール実行時に何らかのエラーが起きた場合には以下のフィールド(項目)がバリデーションエラーとして表示されます。



フィールド(項目)名 オプション名 概要
eid required カートに追加したい商品のエントリーIDが指定されていなかった場合に発生します。
quantity required カート追加したい数量が指定されていなかった場合に発生します。
quantity regex 数量の形式が符号なし整数でない場合に発生します。
quantity min 1未満の数量を指定した場合に発生します。
quantity stock 商品の在庫数を超えた数量を選択した場合に発生します。

ShoppingCart_RemoveItem

ShoppingCart_RemoveItem モジュールは、カートから商品を削除するためのモジュールです。

フィールド

以下のフィールドを指定して実行できます。



フィールド 概要 備考
eid カートから削除するエントリー(商品)のエントリーID 必須

以下はカートからエントリー(商品)を削除するサンプルコードです。

<!-- BEGIN_MODULE ShoppingCart -->
<!-- BEGIN remove -->
<!-- BEGIN_IF [{status}/eq/success] -->
<p class="acms-alert acms-alert-success">カートから商品を削除しました。</p>
<!-- ELSE -->
<p class="acms-alert acms-alert-danger">カートから商品を削除できませんでした。</p>
<!-- END_IF -->
<form action="" method="post" enctype="multipart/form-data"">
    <button class="btn" type="submit" name="ACMS_POST_ShoppingCart_RemoveItem">
      <span>カートから削除する</span>
    </button>
    <input type="hidden" name="eid" value="%{EID}">
    <input type="hidden" name="cart[]" value="eid">
</form>
<!-- END remove -->
<!-- END_MODULE ShoppingCart -->

エラー時の表示

ShoppingCart_RemoveItem モジュール実行時に何らかのエラーが起きた場合には以下のフィールド(項目)がバリデーションエラーとして表示されます。



フィールド(項目)名 オプション名 概要
eid required カートから削除したい商品のエントリーIDが指定されていなかった場合に発生します。

ShoppingCart_Update_Quantity

ShoppingCart_Update_Quantity モジュールは、カートアイテムの数量を更新するためのモジュールです。

フィールド

以下のフィールドを指定して実行できます。



フィールド 概要 備考
eid 数量を更新するカートアイテムのエントリーID 必須
quantity 更新する数量 必須, 数値

以下はカート内エントリー(商品)の数量を更新するサンプルコードです。

<!-- BEGIN_MODULE ShoppingCart -->
<!-- BEGIN update.quantity -->
<!-- BEGIN_IF [{status}/eq/success] -->
<p class="acms-alert acms-alert-success">カート内商品の数量を更新しました。</p>
<!-- ELSE -->
<p class="acms-alert acms-alert-danger">カート内商品の数量を更新できませんでした。</p>
<!-- END_IF -->

<form action="" method="post" enctype="multipart/form-data">
    <input  type="number" name="quantity" min="1" value="" >
    <input type="hidden" name="cart[]" value="quantity" >
    <div role="alert" aria-live="assertive">
      <div
        data-validator-label="quantity-v-required"
        class="validator-result-{quantity:validator#required}"
      >
        <p class="form-error-text">数量を入力してください。</p>
      </div>
    </div>
    <div role="alert" aria-live="assertive">
      <div
        data-validator-label="quantity-v-regex"
        class="validator-result-{quantity:validator#regex}"
      >
        <p class="form-error-text">数量の形式が間違っています。</p>
      </div>
    </div>
    <div role="alert" aria-live="assertive">
      <div
        data-validator-label="quantity-v-min"
        class="validator-result-{quantity:validator#min}"
      >
        <p class="form-error-text">1未満の数量は選択できません。</p>
      </div>
    </div>
    <div role="alert" aria-live="assertive">
      <div
        data-validator-label="quantity-v-stock"
        class="validator-result-{quantity:validator#stock}"
      >
        <p class="form-error-text">注文可能な数量を超えています。</p>
      </div>
    </div>
    <button class="btn" type="submit" name="ACMS_POST_ShoppingCart_Update_Quantity">
      <span>数量を更新する</span>
    </button>
    <input type="hidden" name="eid" value="%{EID}">
    <input type="hidden" name="cart[]" value="eid">
</form>
<!-- END update.quantity -->
<!-- END_MODULE ShoppingCart -->

エラー時の表示

ShoppingCart_Update_Quantity モジュール実行時に何らかのエラーが起きた場合には以下のフィールド(項目)がバリデーションエラーとして表示されます。



フィールド(項目)名 オプション名 概要
eid required 数量を更新したいカート内商品のエントリーIDが指定されていなかった場合に発生します。
quantity required 数量が指定されていなかった場合に発生します。
quantity regex 数量の形式が符号なし整数でない場合に発生します。
quantity min 1未満の数量を指定した場合に発生します。
quantity stock 商品の在庫数を超えた数量を選択した場合に発生します。

ShoppingCart モジュール

ShoppingCart モジュール は カートへの追加・削除・更新などのPOST処理を行った結果を表示する GET モジュールです。表示できる変数やブロックについては拡張アプリ管理画面から変数表を確認してください。

ShoppingForm_Confirm

ShoppingForm_Confirm モジュールは、Form_Confirm モジュールを継承して作成されたモジュールです。Form_Confirm モジュールの機能に加えて以下のことを行っています。

  • カートに在庫数を購入数が超過したアイテムが存在する場合、shoppingError ステップに遷移する

ShoppingForm_Submit

ShoppingForm_Submit モジュールは、Form_Submit モジュールを継承して作成されたモジュールです。Form_Submit モジュールの機能に加えて以下のことを行っています。

  • カートに在庫数を購入数が超過したアイテムが存在する場合、shoppingError ステップに遷移する
  • 決済処理
  • 在庫管理(注文数分の在庫数を減らす)
  • 購入フォームの送信が成功した場合、カート内商品の削除

ShoppingForm_ConfirmNow

ShoppingForm_ConfirmNow モジュールは 今すぐ決済フォームを実装するためのPOSTモジュールです。今すぐ決済フォームを実装することでカートを経由することなく、商品を購入できます。

ShoppingForm_SubmitNow

ShoppingForm_SubmitNow モジュールは 今すぐ決済フォームを実装するためのPOSTモジュールです。今すぐ決済フォームを実装することでカートを経由することなく、商品を購入できます。

グローバル変数

Shopping Cart 拡張アプリで提供しているグローバル変数についてのリファレンスです。



%{PAYMENT_SERVICE} Shopping Cart 設定 > 基本設定 > 決済サービス設定で設定した決済サービス(square)を表示
%{SQUARE_JS} square を利用した決済を行う場合に必要な JavaScript のURL
%{TAX_EXPRESSION_FORMAT} Shopping Cart 設定 > 基本設定 > 税金設定で設定した消費税区分(intax | extax)
%{TAX_CALC_METHOD} Shopping Cart 設定 > 基本設定 > 税金設定で設定した税計算方式(rebate | pileup)
%{TAX_ROUNDING_METHOD} Shopping Cart 設定 > 基本設定 > 税金設定で設定した税計算端数処理方式(floor | round | ceil)
%{INVOICE_NUMBER} Shopping Cart 設定 > 基本設定 > 適格請求書発行事業者の設定で設定した登録番号
%{INVOICE_NAME} Shopping Cart 設定 > 基本設定 > 適格請求書発行事業者の設定で設定した氏名または名称
%{SHIPPING_DATE_FROM} Shopping Cart 設定 > 注文画面設定 > 配送設定で設定した配送希望日の選択肢(開始)
%{SHIPPING_DATE_TO} Shopping Cart 設定 > 注文画面設定 > 配送設定で設定した配送希望日の選択肢(終了)
%{SHIPPING_FREE_SUBTOTAL} Shopping Cart 設定 > 注文画面設定 > 送料設定で設定した送料無料のしきい値(小計)
%{SHIPPING_FREE_SUBTOTAL_FORMATTED}
Ver. 2.1.0〜
%{SHIPPING_FREE_SUBTOTAL} をフォーマットした文字列
%{SHIPPING_CALC_METHOD} Shopping Cart 設定 > 送料設定で設定した送料の計算方法(sum | max)

校正オプション

Shopping Cart 拡張アプリで提供している校正オプションについてのリファレンスです。



convertToIncludingTax 税抜き価格を税込価格にします。適応する変数の価格は税抜きである必要があります。。
例:{price}[convertToIncludingTax('{tax}') | number_format]
priceが1000、taxが0.1のとき、1,100に校正されます。
convertToTotalPrice 単価 × 個数を計算します。第一引数に個数、第二引数に税率(省略可)を指定できます。
例:{price}[convertToTotalPrice('{quantity}', '{tax}') | number_format]
priceが1000、quantityが3、taxが0.1のとき、3,300に校正されます。
convertToTax 単価に対する消費税を計算します。
例:{price}[convertToTax('{tax}') | number_format]
priceが1000、taxが0.1 の場合、消費税区分が外税のとき、100に校正され、内税のとき、91に校正されます。
shippingGroupName 配送グループID から 配送グループ名を表示します。
例: {item_shipping_group_id}[shippingGroupName]

商品データ(エントリー)を登録する

Shopping Cart 拡張アプリでは1エントリーを1商品として扱います。そのため、商品データをサイトに追加したい時は、Shopping Cart 拡張アプリのルールに従ってエントリーを作成する必要があります。安心してください。難しいことは何もありません。Shopping Cart 拡張アプリを使用したECサイトで商品を登録する方法を学習しましょう。

商品を登録する手順は以下になります。

  • 商品管理に必要なエントリーのカスタムフィールドを追加する
  • 配送グループを選択するカスタムフィールドを追加する

商品管理に必要なエントリーのカスタムフィールドを追加する

Shopping Cart 拡張アプリを使用した、ECサイト構築ではエントリーを商品データとして扱うために必要なカスタムフィールドがいくつか設定されています。



フィールド 概要
item_price 商品の販売価格を設定するためのカスタムフィールドです。 1000
item_stock 商品の在庫数を設定するためのカスタムフィールドです。このフィールドの値が空文字の場合、その商品(エントリー)について在庫管理をしないことになります。 100
item_tax 商品の消費税率を設定するためのカスタムフィールドです。 0.1
item_shipping_group_id 商品の配送グループを設定するためのカスタムフィールドです。 Shopping Cart 設定で設定した配送グループの id の値を設定します。 group_default

※ Shopping Cart拡張アプリに同梱しているサンプルテーマでは、「商品を探す(products)」カテゴリーでエントリーを作成すると、上記の商品データ用のカスタムフィールドが設置された状態でエントリーを作成できるようになっています。

配送グループを選択するカスタムフィールドを追加する

エントリーのカスタムフィールドで Shopping Cart 拡張アプリ設定で設定した配送グループを設定できるようにするには、ShippingGroup_AdminSelect モジュール を使用して以下のように記述する必要があります。

ShippingGroup_AdminSelect モジュール を利用することで、自動的に配送グループのステータスを考慮した選択肢を表示することができます。

<select name="item_shipping_group_id">
  <!-- BEGIN_MODULE ShippingGroup_AdminSelect -->
    <!-- BEGIN shippingGroup:loop -->
    <option value="{id}" \{item_shipping_group_id:selected#{id}\}>{name}</option>
    <!-- END shippingGroup:loop -->
  <!-- END_MODULE ShippingGroup_AdminSelect -->
  </select>
<input type="hidden" name="field[]" value="item_shipping_group_id" />

【Tips】エントリー(商品)で在庫管理を行うかどうかを判定する

エントリーにおいて、在庫管理が有効かどうかは、エントリーのカスタムフィールド item_stock の値が空文字であるかどうかによって決まります。そのため、エントリーを表示するときに以下のようなIFブロックを記述することで、そのエントリーで在庫管理を行うかどうかを判定することができます。在庫管理を行うかどうかによってテンプレートを分岐させたい場合に活用できます。

<!-- BEGIN_IF [{item_stock}/isset] -->
在庫管理が有効な場合
<!-- ELSE -->
在庫管理が無効な場合
<!-- END_IF -->

まとめ

これで、ECサイトに商品データ(エントリー)を登録できるようになりました。商品データを登録できるようにはなりましたが、商品を購入できるようにするにはどうしたら良いのでしょうか?ユーザーが商品を購入するためには以下の2つのステップが必要になります。

  1. カート機能(カートへの商品の追加・削除)機能の実装
  2. 決済用フォームの実装

カートへの商品の追加・削除の実装方法ついてはリファレンスにて説明しています。また、決済用のフォームの作成についてはこちらのエントリーで説明しています。さぁ、ECサイトの構築完成まであと少しです!この調子で制作を進めていきましょう。

購入フォームを作成する

このエントリーでは、Shopping Cart 拡張アプリを使用して、購入フォームを作成する手順を説明します。購入フォームは以下の手順で作成できます。

  1. 決済フォーム用のGETモジュールを設定する
  2. 決済フォーム用のPOSTモジュールを設定する
  3. 決済方法の選択肢を実装する
  4. 追加手数料の選択肢を実装する

決済フォーム用のGETモジュールを設定する

a-blog cms でフォームを設置する場合は、Form モジュールをつかってフォームを作成しますが、決済フォームでは Shopping Cart 拡張アプリで提供している ShoppingForm モジュールを使用します。

基本的には、Form モジュールを設置していたところを ShoppingForm モジュールに置き換えていただくことで動作いたします。また、標準の Form モジュールを継承しているため、バリデーターやステップフォームの機能も備えています。

<!-- BEGIN_MODULE ShoppingForm -->

<!-- BEGIN step-->
<!-- 新規 -->
<!-- END step -->

<!-- BEGIN step#reapply -->
<!-- 修正 -->
<!-- END step#reapply -->

<!-- BEGIN step#confirm -->
<!-- 確認 -->
<!-- END step#confirm -->

<!-- BEGIN step#result -->
<!-- 完了 -->
<!-- END step#result -->

<!-- END_MODULE ShoppingForm -->

また、ShoppingForm モジュールでは、決済フォームで選択した決済方法や追加手数料を以下の変数とブロックで表示することが可能です。

Ver. 2.1.0 より、Order_Summary モジュールを利用して、決済フォームで選択した決済方法や追加手数料を表示できるようになりました。そのため、Ver. 2.1.0 以降では Order_Summary モジュールを利用して注文情報を表示することを推奨します。

Order_Summary モジュールで利用できる変数については、ShoppingCart 拡張アプリの管理画面内にある変数表からご確認ください。



変数名 概要
paymentMethodBlock 選択された決済方法のブロック
paymentMethodName 選択された決済方法の名前
paymentMethodCommissionPaid 選択された決済方法の決済手数料
paymentMethodDescription 選択された決済方法の説明テキスト
paymentMethodMailMessage 選択された決済方法のメール用テキスト


変数名 概要
additionId 選択された追加手数料のID
additionName 選択された追加手数料の名前
additionFee 選択された追加手数料の手数料

追加手数料を表示する変数は additionGroup:loop ブロック内で表示できます。

<h3 class="form-table-title">追加手数料</h3>
<table class="form-table">
  <!-- BEGIN additionGroup:loop -->
  <tr>
    <th></th>
    <td>
      {additionId} {additionName}(¥{additionFee}[number_format])
    </td>
  </tr>
  <!-- END additionGroup:loop -->
</table>

決済フォーム用のPOSTモジュールを設定する

a-blog cms でフォームを送信する場合は、Form_Confirm モジュールや Form_Submit モジュールを利用してフォームの確認ステップやエラーステップに遷移しますが、決済フォームでは Shopping Cart 拡張アプリで提供している ShoppingForm_Confirm モジュール及び、ShoppingForm_Submit モジュールを使用します。

利用方法は普段、Form_Confirm モジュールを使用しているところで ShoppingForm_Confirm モジュールを使用し、Form_Submit モジュールを使用しているところで、ShoppingForm_Submit モジュールを使用してフォーム送信を行うようにテンプレートを記述します。具体的なサンプルコードは以下になります。

ShoppingForm_Confirm モジュールを使用するサンプルコード

<form action="" method="post" class="js-unload_alert" enctype="multipart/form-data">
  <div class="form-btn-wrap">
    <input
      type="submit"
      name="ACMS_POST_ShoppingForm_Confirm"
      value="入力内容の確認へ"
    />
  </div>
  <input type="hidden" name="takeover" value="{takeover}" />
  <input type="hidden" name="step" value="confirm" />
  <input type="hidden" name="error" value="reapply" />
  <input type="hidden" name="id" value="shoppingForm" />
</form>

ShoppingForm_Submit モジュールを使用するサンプルコード

<form action="" method="post" class="js-unload_alert" enctype="multipart/form-data">
  <div class="form-btn-wrap">
    <input
      type="submit"
      name="ACMS_POST_ShoppingForm_Submit"
      value="注文を確定する"
    />
  </div>
  <input type="hidden" name="takeover" value="{takeover}" />
  <input type="hidden" name="step" value="result" />
  <input type="hidden" name="error" value="confirm" />
  <input type="hidden" name="id" value="shoppingForm" />
</form>

これで「決済フォーム用のPOSTモジュールを設定する」のステップは完了です。ShoppingForm_Confirm 及び、ShoppingForm_Submit モジュールが具体的に何をやっているかについてはリファレンスを参照してください。

決済方法を指定するカスタムフィールドを実装する

Shopping Cart 設定で設定した決済方法を指定するカスタムフィールドを作成します。フィールド名は payment-method である必要があります。以下は Payment_Select モジュールを使用して実装したサンプルコードになります。

Payment_Select モジュールを利用することで、自動的に決済方法のステータスを考慮した選択肢を表示することができます。

        <!-- BEGIN_MODULE Payment_Select -->
        <ul>
          <!-- BEGIN payment:loop -->
          <li>
            <div
              class="acms-form-radio"
            >
              <input
                id="input-radio-payment-method-{block}"
                type="radio"
                name="payment-method"
                value="{block}"
                \{payment-method:checked#{block}\}
                <!-- BEGIN_IF [\{payment-method\}/em/_and_/{payment.i}/eq/1] -->
                checked="checked"
                <!-- END_IF -->
                data-validator="payment-method"
              />
              <label for="input-radio-payment-method-{block}">
                <i class="acms-ico-radio"></i>{name}<!-- BEGIN_IF [{commissionPaid}/gt/0] -->:手数料 ¥{commissionPaid}[number_format]<!-- END_IF -->
              </label>
              <!-- BEGIN description:veil -->
              <div>
                <!-- BEGIN_IF [{description}[delnl]/nem] -->
                <div>{description}[nl2br]</div>
                <!-- END_IF -->
                <!-- BEGIN_IF [{image@path}/nem] -->
                <img
                  src="%{MEDIA_ARCHIVES_DIR}{image@path}"
                  class="acms-img-responsive"
                  alt="{image@alt}"
                  width="{image@width}"
                  height="{image@height}"
                >
                <!-- END_IF -->
              </div>
              <!-- END description:veil -->
            </div>
          </li>
          <!-- END payment:loop -->
        </ul>
        <!-- END_MODULE Payment_Select -->
        <input type="hidden" name="field[]" value="payment-method" />
        <input type="hidden" name="payment-method:v#required" id="payment-method-v-required" />
        <div role="alert" aria-live="assertive">
          <div data-validator-label="payment-method-v-required" class="validator-result-\{payment-method:v#required\}">
            <p class="form-error-text">決済方法を選択してください</p>
          </div>
        </div>

追加手数料を指定するカスタムフィールドを実装する

Shopping Cart 設定で設定した追加手数料を指定するカスタムフィールドを作成します。フィールド名は additionである必要があります。追加手数料は複数の値を指定して送信することが可能です。複数の値を指定してフォームを送信した場合、追加手数料は各手数料を合計した金額になります。以下は Addition_Select モジュールを使用して実装したサンプルコードになります。

Addition_Select モジュールを利用することで、自動的に決済方法のステータスを考慮した選択肢を表示することができます。

<!-- BEGIN_MODULE Addition_Select -->
<!-- BEGIN addition:veil -->
<h3>追加手数料</h3>
<table>
  <tbody>
    <tr>
      <th></th>
      <td>
        <ul>
          <!-- BEGIN addition:loop -->
          <li>
            <div class="acms-form-checkbox">
              <input type="checkbox" name="addition[]" value="{id}" \{addition:checked#{id}\} id="input-checkbox-addition-{id}" />
              <label for="input-checkbox-addition-{id}">
                <i class="acms-ico-checkbox"></i>{name}(¥{fee}[number_format])</label>
            </div>
          </li>
          <!-- END addition:loop -->
        </ul>
        <input type="hidden" name="field[]" value="addition" />
      </td>
    </tr>
  </tbody>
</table>
<!-- END addition:veil -->
<!-- END_MODULE Addition_Select -->

配送地域を指定するカスタムフィールドを実装する

決済フォームでは、配送先を送信することで、ShoppingCart設定 で配送グループごとに設定した送料設定に従って送料を計算します。送料を指定するフィールド名は deliver-area である必要があります。以下はサンプルコードになります。サンプルコードでは1つ前のステップで送信したカスタムフィールド deliver-pref の値を指定しています。

<input
  type="hidden"
  name="deliver-area"
  value="{deliver-pref}"
/>
<input type="hidden" name="field[]" value="deliver-area" />

購入エラー時のステップを追加する

購入フォームでは、購入時にエラーが発生した場合に表示する shoppingError ステップが標準で用意されています。

shoppingError ステップは購入処理中の商品に在庫切れの商品が存在する場合などに表示されます。

<!-- BEGIN_MODULE ShoppingForm -->

<!-- BEGIN step#shoppingError -->
<section>
  <h2>購入エラーが発生しました。</h2>
  <p class="message">購入手続き中の商品に問題がある可能性があります。お手数ですが、はじめからやり直して下さい。</p>
  <div class="form-btn-wrap">
    <a href="%{BASE_URL}cart/" class="btn">購入フォームに戻る</a>
  </div>
</section>
<!-- END step#shoppingError -->

<!-- END_MODULE ShoppingForm -->

まとめ

このエントリーでは、購入フォームを作成する方法を学びました。購入フォームのカスタマイズができるようになれば基本的なECサイトの構築についてはバッチリです。しかし、このままではサイト内で決済をすることができません。決済サービスと連携して、オンライン上で決済ができるECサイトを制作したい場合はこちらのドキュメントも合わせてご覧ください。