(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 %} |