(3) 決済-配送先(複数)
| ルーティング | ec_client_ship_select |
| 引数 | 無し |
| 例 | {{path(“ec_client_ship_select”)}} |
※ec_client_ship_selectは、リンク元からpostで移動する必要があります。
その際、name=”consumer_address_id”を渡す必要があります。
name=”consumer_address_id”の、valueが”multi”であった時のみ決済-配送先(複数)へ遷移します。
name=”consumer_address_id”において、valueがお届先ID単体で指定された場合は、単一の配送先に送ることが前提となり、「(5) 決済-配送先(配送時間指定)」に遷移します。
基本的には、1回の注文で複数の配送先に送付する場合の、商品と配送先の紐付けを設定する画面です。
配送は、住所と配送方法によって分けられます。
例えばAという、冷凍便で配送すべき商品を2個、Bという、普通便で配送すべき商品を2個購入し、
東京と大阪にそれぞれAを1つ、Bを1つずつ送りたい場合、AとBは同梱できませんので、合計で4回配送しなければなりません。
よって、配送は配送先と配送方法の2次元で分岐されます。
そのため、テンプレートで受け取るデータは住所と配送の2つにわかれています。
Ⅰ 住所一覧
配送先はログインしている顧客であればどのページでも共通で使用できる、
app.security.token.user.getAddress
を使用して配送先の一覧を取得します。
| app.security.token.user.getAddress | |||
| app.security.token.user.getAddress[i] | 住所一覧のi番目の配列 | ||
| id | 顧客id | ||
| lastName | 姓 | ||
| firstName | 名 | ||
| lastNameKana | セイ | ||
| firstNameKana | メイ | ||
| country | 国名 | ||
| district | 都道府県名 | ||
| locality | 市区町村名 | ||
| street | その他住所 | ||
| getAddress | district〜streetを結合した住所 | ||
| tel | 電話番号 | ||
| zipcode | 郵便番号 |
Ⅱ 配送一覧
カートに入れられた商品に紐づく配送方法の一覧です。
| deliveries[] | |||||
| deliveries[i] | 配送一覧のi番目の配列 | ||||
| id | 配送id | ||||
| name | 配送名 | ||||
| serviceName | 配送業者名 | ||||
| remark | 備考 | ||||
| times[] | 指定可能な配送時間の一覧 | ||||
| times[i] | 配送時間のi番目の配列 | ||||
| time | 指定可能な配送時間 | ||||
| fees[] | 都道府県ごとの送料の一覧 | ||||
| fees[i] | 送料のi番目の配列 | ||||
| pref | 都道府県の英語表記 | ||||
| prefTitle | 都道府県の日本語表記 | ||||
| fee | 都道府県ごとの送料 |
Ⅲ 商品SKU一覧
カート内の商品SKUの一覧です。
配送方法ごとに出し分けるため、products[delivery.id]のように、delivery.idをキーにして情報を取りに行きます。
| products[delivery.id] | |||||
| products[delivery.id][i] | delivery.idに紐づく商品SKU情報のi番目の配列 | ||||
| skuDetail1 | 指定されたSKU分類 | ||||
| sku | skuDetail1のSKU(親) | ||||
| name | skuのsku名 | ||||
| id | skuDetail1のid | ||||
| title | skuDetail1の名称 | ||||
| rank | skuDetail1の並び順 | ||||
| skuDetail2 | 指定されたSKU分類 | ||||
| sku | skuDetail2のSKU(親) | ||||
| name | skuのsku名 | ||||
| title | skuDetail2のid | ||||
| rank | skuDetail2の名称 | ||||
| productCode | skuDetail2の並び順 | ||||
| stock | 在庫数 | ||||
| stockUnlimited | 1:無制限、0無制限ではない | ||||
| price | 価格 | ||||
| pointRate | ポイント率(整数%) | ||||
| weight | 重さ | ||||
| product | 商品情報の構造体 |
Ⅳ 配送個数
配送個数を入力するテキストボックスです。
前述の通り、配送は住所と配送先により分けられるため、「お届先ID_配送ID」の形式でグループ分けし、その中にそれぞれの商品IDを入れていきます。
| キー名 | 説明 | 必須 |
| multi_お届先ID_配送ID[SKUID] | 数量 | 必須 |
具体的には、以下のように記述します。
|
1 |
<input type="text" name="multi_{{ address.id }}_{{ delivery.id }}[{{ productsku.id }}]" value="> |
実際には、Ⅰ〜Ⅲを使って以下のように記述します。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
{% set addresses = app.security.token.user.getAddress%} {% for key,address in addresses %} {% for delivery in deliveries %} {{ address.getLastName~" "~address.getFirstName }} <!-- 配送先氏名 --> 〒{{ address.getZipcode }}<br>{{ address.getAddress }} <!-- 配送先住所 --> {{address.getTel}} <!-- 配送先電話番号 --> {% for productsku in products[delivery.id] %} <!-- 商品のループ --> {{ delivery.id }} <!-- 配送ID --> {{productsku.getProductName}} <!-- 商品名 --> {{productsku.getPrice|number_format}}円 <!-- 商品価格 --> <input type="text" name="multi_{{ address.id }}_{{ delivery.id }}[{{ productsku.id }}]" value="1"> <!-- 配送個数 --> {% endfor %} {% endfor %} {% endfor %} |