ルーティング | ec_client_cart_list |
引数 | 無し |
例 | {{ path(“ec_client_cart_list”)}} |
カート一覧のテンプレートです。
Ⅰ エラー
カートでは3つの形式に別れてエラーが出力されます。
error_msg | 在庫切れなどでカートに入れられなかった商品名の一覧 |
paymentErrorMsg | 同時に購入できない商品の組合せの場合のエラーメッセージ |
changeErrMsg | 数量変更時に不備があった場合のエラーメッセージ |
error_msgは例えば
1 2 3 |
{% for productName in error_msg %} <li>{{ productName }}</li> {% endfor %} |
のように使用します。
paymentErrorMsg、changeErrMsgは例えば、
1 2 3 |
{% if (paymentErrorMsg != “”) %} {{ paymentErrorMsg }} {% endif %} |
のように使用します。
Ⅱ カートの中身
カートの中身は上述のcart_api 「1. はじめに / (1) 共通タグ / Ⅳ セッション / ア cart_api」を使います。
例として、商品情報は以下のようにして取得できます。
1 2 3 4 5 |
{% set cart = cart_api.objects %} {% for cart_object in cart %} {% set productsku = get_entity_manager().find("EcCoreBundle:ProductSku", cart_object.getProductSkuId)%} {{productsku.getPrice|number_format}}円 <!-- 価格 --> {{productsku.getProduct.getName}} <!-- 商品名 --> |
カートの中身の情報を扱う際は、get_entity_manager()を使用して常に最新情報を取得し、在庫切れなどのトラブルを防いでください。
Ⅲ カートの中身を変更する
カート情報を変更するためのページは、以下になります。
ルーティング | ec_client_cart_change |
引数 | 無し |
例 | {{ path(“ec_client_cart_change”) }} |
送信するデータは以下の1つだけです。
キー名 | 説明 | 必須 |
quantity[SKUID] | 数量 | 1以上の数値でない場合は無視 |
具体的には以下のように、カートの一覧を取得しながら変更用のテキストボックスを表示していきます。
1 2 3 4 5 6 |
{% set cart = cart_api.objects %} {% for cart_object in cart %} {% set productsku = get_entity_manager().find("EcCoreBundle:ProductSku", cart_object.getProductSkuId)%} {{productsku.getProduct.getName}} <!-- 商品名 --> <input name="quantity[{{ productsku.getId }}]" type="text" value="{{ cart_object.getCount }}"> <!-- 数量 --> {% endfor %} |
以下はオプション商品の数量変更の方法です。
cart_object.getAdditionsでオプション商品があるかを確認
get_entity_manager()で最新のオプション商品情報を取得
という処理をしています。
1 2 3 4 5 6 7 8 |
{% if (cart_object.getAdditions|length > 0) %} {% for addition_object in cart_object.getAdditions %} {%set addition = get_entity_manager().find("EcCoreBundle:Addition", addition_object.getAdditionId)%} {{ addition.title }} <!-- オプション商品名 --> {{addition.getPrice|number_format}}円 <!-- 価格 --> <input name="addition_quantity[{{ productsku.id~"_"~addition.id }}]" type="text" value="{{ addition_object.getCount }}"> {% endfor %} {% endif %} |
送信するデータは以下の1つだけですが、どのオプション商品がどの商品に紐付いたものなのかを判断するために、SKUIDとオプション商品のIDを組み合わせたキーを使います。
キー名 | 説明 | 必須 |
addition_quantity[SKUID_オプション商品ID] | 数量 | 1以上の数値でない場合は無視 |
1 |
<a href="{{ path("ec_client_cart_delete_addition", {"sku":productsku.id, "addition":addition.id}) }}">削除</a> |
Ⅳ カート内商品の削除
具体的には以下のように、カート一覧を取得しながら削除用リンクを表示していきます
1 2 3 4 5 |
{% set cart = cart_api.objects %} {% for cart_object in cart %} {% set productsku = get_entity_manager().find("EcCoreBundle:ProductSku", cart_object.getProductSkuId)%} <a href="{{ path("ec_client_cart_delete", {"sku":productsku.id}) }}">削除</a> {% endfor %} |
以下はカート内オプション商品の削除方法です。
ルーティング | {{ path(“ec_client_cart_delete_addition”, {“sku”:productsku.id, “addition”:1}) }} |
引数 | SKUID, オプション商品ID |
例 | {{ path(“ec_client_cart_delete_addition”, {“sku”:1, “addition”:1}) }} |
どの商品に紐付いたオプション商品を削除するかを判断するため、SKUIDとオプション商品のIDを組み合わせたキーを使います。
1 2 3 4 5 6 |
{% if (cart_object.getAdditions|length > 0) %} {% for addition_object in cart_object.getAdditions %} {%set addition = get_entity_manager().find("EcCoreBundle:Addition", addition_object.getAdditionId)%} <a href="{{ path("ec_client_cart_delete_addition", {"sku":productsku.id, "addition":addition.id}) }}">削除</a> {% endfor %} {% endif %} |