ルーティング | ec_client_ship |
引数 | 無し |
例 | {{path(“ec_client_ship”)}} |
配送先は前述の、app.security.token.user「1. はじめに / (1) 共通タグ / Ⅳ セッション / イ app.security.token.userを使用して配送先の一覧を取得します。
配送先住所には、会員情報としての住所と、配送先としての住所の2通りがあります。
前者は必須であり、どの顧客も登録してある情報です。
これは必ずループの0番目に存在しています
後者は任意で配送先を登録できる機能で、複数登録が可能です。
実際の利用方法としてこの画面は、顧客がどの住所に商品を発送して欲しいかを選ぶ画面なので、住所の一覧を表示して選ばせるというフォームを出力する必要があります。
以下はラジオボタンでの例です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
{% set addresses = app.security.token.user.getAddress%} <table> {% for address in addresses %} <tr> <td> <input type="radio" name="consumer_address_id" name="consumer_address_id" id="ad-{{ key+1 }}" value="{{address.id}}" {% if (key == 0) %}checked="checked"{% endif %}> </td> <td> {{ address.getLastName~" "~address.getFirstName }} </td> <td> 〒{{ address.getZipcode }}<br>{{ address.getAddress(overseas_shipment_use_flg)}} </td> </tr> {% endfor %} <table> |
nameはconsumer_address_idとし、valueはaddress.idを指定します。
上記とは別で、複数配送先という選択肢を追加することができます。
これは、1回の注文で商品を3つ購入し、住所A、B、Cにそれぞれ1つずつ送りたいという時に使う機能です。
その時は以下のような選択肢を1つ追加します。
1 2 3 4 5 6 7 8 9 10 |
{% if ((addresses|length > 1) and (cart_api.hasProductRegular == false) ) %} <table> <tr> <td> <input type="radio" name="consumer_address_id" id="ad-multi" value="multi"> </td> <td>お届け先を複数指定</td> </tr> </table> {% endif %} |
addresses|length > 1は、住所が2つ以上ある場合、cart_api.hasProductRegular == falseは、定期購入が含まれていない場合です。定期購入の商品がカートに含まれていた場合は、複数配送に対応できません。
まとめると、
- 会員登録住所(0番目)
- お届先登録住所(0〜複数登録可能)
- 複数配送先
の3通りの配送先から選択させる必要があります。
また、この画面で登録住所の編集をさせることもできます。
その場合は、以下のようなリンクを貼ります。
1 |
<a href="{{ path("ec_client_consumer_address_edit", {"id":address.id})}}">編集</a> |
同じく削除をさせることもできます。
1 |
<a href="{{ path("ec_client_consumer_address_delete", {"id":address.id})}}" onclick="if ( confirm('本当に削除してよろしいですか?') ){return true;}else{return false;}" >削除</a> |
お届先を新規作成したい場合は、
1 |
<a href="{{ path("ec_client_consumer_address_add")}}">お届先の追加</a></p> |
と記述します。編集と削除は、会員登録住所とは別の画面になりますので、0番目のアドレスではないことを確認する必要があります。上記をまとめると以下のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
<table class="addressTable"> <tr> <th class="select">選択</th> <th class="name">宛名</th> <th class="address">お届け先</th> <th class="tel">連絡先</th> <th class="action">変更/削除</th> </tr> {% set addresses = app.security.token.user.getAddress%} {% for key,address in addresses %} <tr> <td class="select"> <input type="radio" name="consumer_address_id" value="{{address.id}}" {% if (key == 0) %}checked="checked"{% endif %}> </td> <td class="name">{{ address.getLastName~" "~address.getFirstName }}</td> <td class="address"> 〒{{ address.getZipcode }}<br> {{ address.getAddress(overseas_shipment_use_flg)}} </td> <td class="tel">{{address.getTel}}</td> <td class="action"> {% if (key == 0) %} 会員登録住所 {% else %} <a href="{{ path("ec_client_consumer_address_edit", {"id":address.id})}}">編集</a> <a href="{{ path("ec_client_consumer_address_delete", {"id":address.id})}}" onclick="if ( confirm('本当に削除してよろしいですか?') ){return true;}else{return false;}">削除</a> {% endif %} </td> </tr> {% endfor %} </table> |
1 2 3 4 5 6 7 8 9 10 |
{% if ((addresses|length > 1) and (cart_api.hasProductRegular == false) ) %} <table class="addressTable"> <tr> <td class="select"> <input type="radio" name="consumer_address_id" id="ad-multi" value="multi"> </td> <td>お届け先を複数指定</td> </tr> </table> {% endif %} |
以下は送信データのまとめです。
キー名 | 説明 | 必須 |
consumer_address_id | お届先ID 0:会員登録住所 1以上:登録済みお届先住所 multi:複数お届先 |
必須 |