2026/01/22更新
+ 更新した行
- 削除した行複数お届け先ごとのギフト設定機能の拡張
同一商品を複数購入した場合でも、お届け先ごとに異なるギフト設定ができるようになりました。
cart > カート画面
ec_force/shop/carts/show.html.liquid
ec_force/shop/carts/show.html+smartphone.liquid
<!-- カート内ギフト商品一覧 -->
{% if gift_order_items.size > 0 %}
{% for gift_oi in gift_order_items %}
- {% for gift_relation in gift_oi.gift_target_relations %}
+ {% for gift_relation in gift_oi.aggregated_gift_target_relations_for_cart %}
{% if forloop.index0 == 0 %}
<!-- ギフト商品画像 -->
{% if gift_oi.available_thumbnail %} <!-- ギフト対象商品 -->
{{ gift_relation.variant.name }}
- {% if gift_oi.variant.gift.noshi? == true %}
+ {% if gift_oi.gift.noshi? == true %}
<!-- 表書き -->cart > 注文情報確認画面
ec_force/shop/orders/confirm.html.liquid
ec_force/shop/orders/confirm.html+smartphone.liquid
<!-- ギフト設定情報 -->
{% if gift_order_items.size > 0 %}
{% for gift_oi in gift_order_items %}
- {% for gift_relation in gift_oi.gift_target_relations %}
- {% if forloop.index0 == 0 %}
- <!-- ギフト商品名 -->
- {{ gift_oi.name_with_tax_and_option_values_presentation }}
- {% endif %}
-
- <!-- ギフト対象商品名 -->
- {{ gift_relation.variant.name_with_option_values_presentation }}
-
- {% if gift_oi.gift.noshi? %}
- <!-- 表書き -->
- {% if gift_relation.description_part_of_noshi != blank %}
- {{ gift_relation.description_part_of_noshi }}
+ {% assign has_displayed_header = false %}
+ {% for rel in gift_oi.gift_target_relations %}
+ {% if rel.gift_quantity > 0 %}
+ {% unless has_displayed_header %}
+ <!-- ギフト商品名 -->
+ {{ gift_oi.name_with_tax_and_option_values_presentation }}
+ {% assign has_displayed_header = true %}
+ {% endunless %}
+
+ <!-- ギフト対象商品名 -->
+ {{ rel.order_item.variant.name_with_option_values_presentation }}
+
+ {% if gift_oi.gift.noshi? %}
+ <!-- 表書き -->
+ {% if rel.description_part_of_noshi != blank %}
+ 表書き:{{ rel.description_part_of_noshi }}
+ {% endif %}
+
+ <!-- 名入れ -->
+ {% if rel.name_part_of_noshi != blank %}
+ 名入れ:{{ rel.name_part_of_noshi | escape }}
+ {% endif %}
{% endif %}
- <!-- 名入れ -->
- {% if gift_relation.name_part_of_noshi != blank %}
- {{ gift_relation.name_part_of_noshi | escape }}
- {% endif %}
+ <!-- ギフト商品個数 -->
+ {{ rel.gift_quantity }} 個
{% endif %}
-
- <!-- ギフト商品個数 -->
- {{ gift_relation.gift_quantity }}
{% endfor %}
{% endfor %}
{% endif %} <!-- 商品情報 -->
{% for order_item in shipping_address.order_items_and_gift_order_items %}
-
- <!-- 商品名 -->
- {{ order_item.variant.name_with_option_values_presentation }}
-
- <!-- 商品個数 -->
- {{ order_item.id | quantity_of: shipping_address.id }} 個
-
+ {% assign is_gift_product = order_item.variant.gift? %}
+ {% assign matching_count = 0 %}
+ {% assign non_multiple_address_count = 0 %}
+ {% if order_item.gift_relations %}
+ {% for gr in order_item.gift_relations %}
+ {% assign match_by_address_id = false %}
+ {% if gr.address_id == shipping_address.id %}
+ {% assign match_by_address_id = true %}
+ {% endif %}
+ {% assign match_by_non_multiple = false %}
+ {% if gr.address_id == blank and gr.multiple_address? == false %}
+ {% assign match_by_non_multiple = true %}
+ {% endif %}
+ {% if match_by_address_id or match_by_non_multiple %}
+ {% assign matching_count = matching_count | plus: 1 %}
+ {% if match_by_non_multiple %}
+ {% assign non_multiple_address_count = non_multiple_address_count | plus: 1 %}
+ {% endif %}
+ {% endif %}
+ {% endfor %}
+ {% endif %}
+ {% assign is_non_multiple_address_gift = false %}
+ {% if matching_count > 0 and matching_count == non_multiple_address_count %}
+ {% assign is_non_multiple_address_gift = true %}
+ {% endif %}
+ {% unless is_gift_product %}
+ <!-- 商品名 -->
+ {{ order_item.variant.name_with_option_values_presentation }}
+ <!-- 商品個数 -->
+ ({{ order_item.id | quantity_of: shipping_address.id }} 個)
+
+ {% if matching_count > 0 %}
+ {% assign has_noshi_info = false %}
+ {% for gr in order_item.gift_relations %}
+ {% assign match_by_address_id = false %}
+ {% if gr.address_id == shipping_address.id %}
+ {% assign match_by_address_id = true %}
+ {% endif %}
+ {% assign match_by_non_multiple = false %}
+ {% if gr.address_id == blank and gr.multiple_address? == false %}
+ {% assign match_by_non_multiple = true %}
+ {% endif %}
+ {% if match_by_address_id or match_by_non_multiple %}
+ {% if gr.description_part_of_noshi != blank or gr.name_part_of_noshi != blank %}
+ {% assign has_noshi_info = true %}
+ {% endif %}
+ {% endif %}
+ {% endfor %}
+ {% if has_noshi_info %}
+ {% for gift_relation in order_item.gift_relations %}
+ {% assign match_by_address_id = false %}
+ {% if gift_relation.address_id == shipping_address.id %}
+ {% assign match_by_address_id = true %}
+ {% endif %}
+ {% assign match_by_non_multiple = false %}
+ {% if gift_relation.address_id == blank and gift_relation.multiple_address? == false %}
+ {% assign match_by_non_multiple = true %}
+ {% endif %}
+ {% if match_by_address_id or match_by_non_multiple %}
+ {% if is_non_multiple_address_gift %}
+ {% assign display_quantity = order_item.id | quantity_of: shipping_address.id %}
+ {% else %}
+ {% assign display_quantity = gift_relation.gift_quantity %}
+ {% endif %}
+ ギフト: {{ gift_relation.gift_order_item.variant.name_with_option_values_presentation }}({{ display_quantity }} 個)
+ {% if gift_relation.description_part_of_noshi != blank %}
+ 表書き:{{ gift_relation.description_part_of_noshi }}
+ {% endif %}
+ {% if gift_relation.name_part_of_noshi != blank %}
+ 名入れ:{{ gift_relation.name_part_of_noshi }}
+ {% endif %}
+ {% endif %}
+ {% endfor %}
+ {% else %}
+ {% assign first_gift_relation = nil %}
+ {% assign total_gift_quantity = 0 %}
+ {% for gr in order_item.gift_relations %}
+ {% assign match_by_address_id = false %}
+ {% if gr.address_id == shipping_address.id %}
+ {% assign match_by_address_id = true %}
+ {% endif %}
+ {% assign match_by_non_multiple = false %}
+ {% if gr.address_id == blank and gr.multiple_address? == false %}
+ {% assign match_by_non_multiple = true %}
+ {% endif %}
+ {% if match_by_address_id or match_by_non_multiple %}
+ {% if first_gift_relation == nil %}
+ {% assign first_gift_relation = gr %}
+ {% endif %}
+ {% assign total_gift_quantity = total_gift_quantity | plus: gr.gift_quantity %}
+ {% endif %}
+ {% endfor %}
+ {% if is_non_multiple_address_gift %}
+ {% assign total_gift_quantity = order_item.id | quantity_of: shipping_address.id %}
+ {% endif %}
+ ギフト: {{ first_gift_relation.gift_order_item.variant.name_with_option_values_presentation }}({{ total_gift_quantity }} 個)
+ {% endif %}
+ {% endif %}
+ {% endunless %}
{% endfor %}
<!-- 配送業者 -->cart > ギフト商品一覧(部分テンプレート)
ec_force/shop/carts/_view_gift.html.liquid
ec_force/shop/carts/_view_gift.html+smartphone.liquid
<!-- ギフト商品名 -->
{{ gift.name | truncate: 35 }}
+ <!-- 複数お届け先対応 -->
+ {% if gift.multiple_address %}
+ {{ 'gift.multiple_address.available' | t }}
+ {% endif %}
+
<!-- ギフト商品販売価格 -->
<span class="sales-price">{{ gift.first_price | number_to_currency }}</span>
<form action="/shop/cart/add" method="post" class="gift-form">
<input type="hidden" name="variant_id" value="{{ gift.master_id }}" class="variant-id">
<input type="hidden" name="gift_id" value="{{ gift.id }}" class="gift-id">
<input type="hidden" class="order-item-id-for-gift" name="gift[order_item_id_for_gift]" value="">
+ <input type="hidden" class="multiple-address" value="{{ gift.multiple_address }}">
<!-- ギフト商品(熨斗)の場合 -->
{% if gift.noshi? %}cart > 複数のお届け先入力フォーム(部分テンプレート)
ec_force/shop/orders/_view_multiple_shipping_information_form_data.html.liquid
ec_force/shop/orders/_view_multiple_shipping_information_form_data.html+smartphone.liquid
{% if multiple_shipping_is_available %}
<!-- 複数のお届け先フォームデータ -->
<div id="multiple-shipping-raw-form">
{% for shipping_address in order.shipping_addresses_without_deleted %}
<!-- お届け先ごとのフォームデータ枠(必須タグ) -->
- <div>
+ <div data-shipping-address-id="{{ shipping_address.id }}" data-form-index="{{ forloop.index0 }}">
{% assign index = forloop.index0 %} <!-- お届け先商品情報 -->
- {% for order_item in order_items_without_bundled_and_gift %}
- {% assign order_items_info = "" %}
- {% for oiil in shipping_address.order_items_info_list %}
- {% if oiil.order_item.id == order_item.id %}
- {% assign order_items_info = oiil %}
+ {% assign gift_sets = order.multiple_address_gift_relations_grouped %}
+ {% if order.gift_sets_for_view_by_index[index] %}
+ {% assign gift_sets = order.gift_sets_for_view_by_index[index] %}
+ {% endif %}
+ {% assign gift_target_order_item_ids = gift_sets | map: 'order_item_id' | uniq %}
+ <!-- ギフト対象商品ごとのギフト合計数量を計算 -->
+ {% assign gift_total_by_order_item = "" %}
+ {% for order_item_id in gift_target_order_item_ids %}
+ {% assign gift_total = 0 %}
+ {% for gs in gift_sets %}
+ {% if gs.order_item_id == order_item_id %}
+ {% assign gift_total = gift_total | plus: gs.gift_quantity %}
{% endif %}
{% endfor %}
-
- <label>{{ order_item.variant.name_with_option_values_presentation }}</label>
- <div class="order_items_info">
-
- <!-- お届け先商品数量の選択 -->
- <input type="hidden" class="order_items_info__order_item_id" name="order[shipping_addresses_attributes][{{ index }}][order_items_info_list_attributes][{{ forloop.index0 }}][order_item_id]" value="{{ order_item.id }}">
- <select class="order_items_info__quantity" name="order[shipping_addresses_attributes][{{ index }}][order_items_info_list_attributes][{{ forloop.index0 }}][quantity]">
- {% for i in (0..order_item.quantity) %}
- <option value="{{ i }}" {% if order_items_info.quantity == i %}selected{% endif %}>{{ i }}</option>
- {% endfor %}
- </select>
-
- </div>
+ {% capture gift_total_by_order_item %}{{ gift_total_by_order_item }}{{ order_item_id }}:{{ gift_total }};{% endcapture %}
{% endfor %}
+ {% assign gift_relation_idx = 0 %}
+ <table class="product-gift-set-table" data-index="{{ index }}">
+ <tbody>
+ {% for order_item in order_items_without_bundled_and_gift %}
+ {% assign order_items_info = "" %}
+ {% for oiil in shipping_address.order_items_info_list %}
+ {% if oiil.order_item.id == order_item.id %}
+ {% assign order_items_info = oiil %}
+ {% endif %}
+ {% endfor %}
+ {% assign is_gift_target = false %}
+ {% for gid in gift_target_order_item_ids %}
+ {% if gid == order_item.id %}
+ {% assign is_gift_target = true %}
+ {% endif %}
+ {% endfor %}
+ <!-- ギフト対象商品の場合 -->
+ {% if is_gift_target %}
+ {% assign gift_total = 0 %}
+ {% for gs in gift_sets %}
+ {% if gs.order_item_id == order_item.id %}
+ {% assign gift_total = gift_total | plus: gs.gift_quantity %}
+ {% endif %}
+ {% endfor %}
+ {% assign no_gift_max = order_item.quantity | minus: gift_total %}
+ <!-- このお届け先へのギフト付き数量を計算 -->
+ {% assign gift_quantity_for_address = 0 %}
+ {% if shipping_address.gift_relations %}
+ {% for gr in shipping_address.gift_relations %}
+ {% if gr.order_item_id == order_item.id %}
+ {% assign gift_quantity_for_address = gift_quantity_for_address | plus: gr.gift_quantity %}
+ {% endif %}
+ {% endfor %}
+ {% endif %}
+ {% assign total_quantity_for_address = order_items_info.quantity | default: 0 %}
+ {% assign no_gift_quantity_tmp = total_quantity_for_address | minus: gift_quantity_for_address %}
+ {% if no_gift_quantity_tmp < 0 %}
+ {% assign no_gift_quantity = 0 %}
+ {% else %}
+ {% assign no_gift_quantity = no_gift_quantity_tmp %}
+ {% endif %}
+ <!-- 「ギフトなし」行(ギフト数 < 商品数の場合のみ表示) -->
+ {% if no_gift_max > 0 %}
+ <tr class="order-item-row no-gift-row" data-order-item-id="{{ order_item.id }}" data-gift-total="{{ gift_total }}" data-no-gift-max="{{ no_gift_max }}">
+ <th>
+ <label>{{ order_item.variant.name_with_option_values_presentation }}(ギフトなし)</label>
+ </th>
+ <td class="order_items_info">
+ <input type="hidden" class="order_items_info__order_item_id" name="order[shipping_addresses_attributes][{{ index }}][order_items_info_list_attributes][{{ forloop.index0 }}][order_item_id]" value="{{ order_item.id }}">
+ <select class="order_items_info__no_gift_quantity" data-order-item-id="{{ order_item.id }}" data-no-gift-max="{{ no_gift_max }}">
+ {% for i in (0..no_gift_max) %}
+ <option value="{{ i }}" {% if no_gift_quantity == i %}selected{% endif %}>{{ i }} 個</option>
+ {% endfor %}
+ </select>
+ <input type="hidden" class="order_items_info__quantity_hidden" name="order[shipping_addresses_attributes][{{ index }}][order_items_info_list_attributes][{{ forloop.index0 }}][quantity]" value="{{ total_quantity_for_address }}" data-order-item-id="{{ order_item.id }}">
+ </td>
+ </tr>
+ {% else %}
+ <!-- ギフトなしの数量が0の場合(すべてギフト付き)、hidden inputのみ送信 -->
+ <tr class="order-item-row" data-order-item-id="{{ order_item.id }}" style="display:none;">
+ <th>
+ <label>{{ order_item.variant.name_with_option_values_presentation }}</label>
+ </th>
+ <td class="order_items_info">
+ <input type="hidden" class="order_items_info__order_item_id" name="order[shipping_addresses_attributes][{{ index }}][order_items_info_list_attributes][{{ forloop.index0 }}][order_item_id]" value="{{ order_item.id }}">
+ <input type="hidden" class="order_items_info__quantity_hidden" name="order[shipping_addresses_attributes][{{ index }}][order_items_info_list_attributes][{{ forloop.index0 }}][quantity]" value="{{ total_quantity_for_address }}" data-order-item-id="{{ order_item.id }}">
+ </td>
+ </tr>
+ {% endif %}
+ <!-- 「商品+ギフト」行(同じテーブル内に表示) -->
+ {% for gift_set in gift_sets %}
+ {% if gift_set.order_item_id == order_item.id %}
+ {% assign max_selectable = gift_set.gift_order_item.quantity | default: gift_set.gift_quantity %}
+ {% if gift_set.max_gift_quantity %}
+ {% assign max_selectable = gift_set.max_gift_quantity %}
+ {% endif %}
+ <!-- このお届け先に設定されたギフト数量を取得 -->
+ {% assign selected_gift_qty = 0 %}
+ {% if shipping_address.gift_relations %}
+ {% for gr in shipping_address.gift_relations %}
+ {% assign name_match = false %}
+ {% if gr.name_part_of_noshi == blank and gift_set.name_part_of_noshi == blank %}
+ {% assign name_match = true %}
+ {% elsif gr.name_part_of_noshi == gift_set.name_part_of_noshi %}
+ {% assign name_match = true %}
+ {% endif %}
+ {% assign desc_match = false %}
+ {% if gr.description_part_of_noshi == blank and gift_set.description_part_of_noshi == blank %}
+ {% assign desc_match = true %}
+ {% elsif gr.description_part_of_noshi == gift_set.description_part_of_noshi %}
+ {% assign desc_match = true %}
+ {% endif %}
+ {% if gr.order_item_id == gift_set.order_item_id and gr.gift_order_item_id == gift_set.gift_order_item_id and name_match and desc_match %}
+ {% assign selected_gift_qty = gr.gift_quantity %}
+ {% endif %}
+ {% endfor %}
+ {% endif %}
+ <tr class="product-gift-set-row" data-order-item-id="{{ gift_set.order_item_id }}" data-gift-order-item-id="{{ gift_set.gift_order_item_id }}" data-name-part-of-noshi="{{ gift_set.name_part_of_noshi }}" data-description-part-of-noshi="{{ gift_set.description_part_of_noshi }}">
+ <th>
+ {{ gift_set.order_item.variant.name_with_option_values_presentation }}
+ <br>
+ {{ gift_set.gift_order_item.variant.name_with_option_values_presentation }}
+ {% if gift_set.description_part_of_noshi != blank %}
+ <br>
+ 表書き:{{ gift_set.description_part_of_noshi }}
+ {% endif %}
+ {% if gift_set.name_part_of_noshi != blank %}
+ <br>
+ 名入れ:{{ gift_set.name_part_of_noshi }}
+ {% endif %}
+ </th>
+ <td>
+ <select class="gift-relation-quantity" data-order-item-id="{{ gift_set.order_item_id }}" data-max-quantity="{{ max_selectable }}">
+ {% for i in (0..max_selectable) %}
+ <option value="{{ i }}" {% if i == selected_gift_qty %}selected{% endif %}>{{ i }} 個</option>
+ {% endfor %}
+ </select>
+ <input type="hidden" class="gift-relation-quantity-hidden" name="order[shipping_addresses_attributes][{{ index }}][gift_relations_attributes][{{ gift_relation_idx }}][quantity]" value="{{ selected_gift_qty }}">
+ <input type="hidden" name="order[shipping_addresses_attributes][{{ index }}][gift_relations_attributes][{{ gift_relation_idx }}][order_item_id]" value="{{ gift_set.order_item_id }}">
+ <input type="hidden" name="order[shipping_addresses_attributes][{{ index }}][gift_relations_attributes][{{ gift_relation_idx }}][gift_order_item_id]" value="{{ gift_set.gift_order_item_id }}">
+ <input type="hidden" name="order[shipping_addresses_attributes][{{ index }}][gift_relations_attributes][{{ gift_relation_idx }}][name_part_of_noshi]" value="{{ gift_set.name_part_of_noshi }}">
+ {% if gift_set.description_part_of_noshi != blank %}
+ <input type="hidden" name="order[shipping_addresses_attributes][{{ index }}][gift_relations_attributes][{{ gift_relation_idx }}][description_part_of_noshi]" value="{{ gift_set.description_part_of_noshi }}">
+ {% endif %}
+ </td>
+ </tr>
+ {% assign gift_relation_idx = gift_relation_idx | plus: 1 %}
+ {% endif %}
+ {% endfor %}
+ {% else %}
+ <!-- 通常商品(ギフト対象外) -->
+ <tr class="order-item-row" data-order-item-id="{{ order_item.id }}">
+ <th>
+ <label>{{ order_item.variant.name_with_option_values_presentation }}</label>
+ </th>
+ <td class="order_items_info">
+ <input type="hidden" class="order_items_info__order_item_id" name="order[shipping_addresses_attributes][{{ index }}][order_items_info_list_attributes][{{ forloop.index0 }}][order_item_id]" value="{{ order_item.id }}">
+ <select class="order_items_info__quantity" name="order[shipping_addresses_attributes][{{ index }}][order_items_info_list_attributes][{{ forloop.index0 }}][quantity]">
+ {% for i in (0..order_item.quantity) %}
+ <option value="{{ i }}" {% if order_items_info.quantity == i %}selected{% endif %}>{{ i }}</option>
+ {% endfor %}
+ </select>
+ </td>
+ </tr>
+ {% endif %}
+ {% endfor %}
+ </tbody>
+ </table>
<!-- 配送業者情報 -->
<div style="{% unless display_shipping_carrier_view_flag %}display: none;{% endunless %}"> <!-- お届け先商品情報 -->
- {% for order_item in order_items_without_bundled_and_gift %}
- {% assign order_items_info = "" %}
- {% for oiil in shipping_address.order_items_info_list %}
- {% if oiil.order_item.id == order_item.id %}
- {% assign order_items_info = oiil %}
+ {% assign gift_sets = order.multiple_address_gift_relations_grouped %}
+ {% if order.gift_sets_for_view_by_index[index] %}
+ {% assign gift_sets = order.gift_sets_for_view_by_index[index] %}
+ {% endif %}
+ {% assign gift_target_order_item_ids = gift_sets | map: 'order_item_id' | uniq %}
+ <!-- ギフト対象商品ごとのギフト合計数量を計算 -->
+ {% assign gift_total_by_order_item = "" %}
+ {% for order_item_id in gift_target_order_item_ids %}
+ {% assign gift_total = 0 %}
+ {% for gs in gift_sets %}
+ {% if gs.order_item_id == order_item_id %}
+ {% assign gift_total = gift_total | plus: gs.gift_quantity %}
{% endif %}
{% endfor %}
-
- <label>{{ order_item.variant.name_with_option_values_presentation }}</label>
- <div class="order_items_info">
-
- <!-- お届け先商品数量の選択 -->
- <input type="hidden" class="order_items_info__order_item_id" name="order[shipping_addresses_attributes][{{ index }}][order_items_info_list_attributes][{{ forloop.index0 }}][order_item_id]" value="{{ order_item.id }}">
- <select class="order_items_info__quantity" name="order[shipping_addresses_attributes][{{ index }}][order_items_info_list_attributes][{{ forloop.index0 }}][quantity]">
- {% for i in (0..order_item.quantity) %}
- <option value="{{ i }}" {% if order_items_info.quantity == i %}selected{% endif %}>{{ i }}</option>
- {% endfor %}
- </select>
-
- </div>
+ {% capture gift_total_by_order_item %}{{ gift_total_by_order_item }}{{ order_item_id }}:{{ gift_total }};{% endcapture %}
{% endfor %}
+ {% assign gift_relation_idx = 0 %}
+ <table class="product-gift-set-table" data-index="{{ index }}">
+ <tbody>
+ {% for order_item in order_items_without_bundled_and_gift %}
+ {% assign order_items_info = "" %}
+ {% for oiil in shipping_address.order_items_info_list %}
+ {% if oiil.order_item.id == order_item.id %}
+ {% assign order_items_info = oiil %}
+ {% endif %}
+ {% endfor %}
+ {% assign is_gift_target = false %}
+ {% for gid in gift_target_order_item_ids %}
+ {% if gid == order_item.id %}
+ {% assign is_gift_target = true %}
+ {% endif %}
+ {% endfor %}
+ <!-- ギフト対象商品の場合 -->
+ {% if is_gift_target %}
+ {% assign gift_total = 0 %}
+ {% for gs in gift_sets %}
+ {% if gs.order_item_id == order_item.id %}
+ {% assign gift_total = gift_total | plus: gs.gift_quantity %}
+ {% endif %}
+ {% endfor %}
+ {% assign no_gift_max = order_item.quantity | minus: gift_total %}
+ <!-- このお届け先へのギフト付き数量を計算 -->
+ {% assign gift_quantity_for_address = 0 %}
+ {% if shipping_address.gift_relations %}
+ {% for gr in shipping_address.gift_relations %}
+ {% if gr.order_item_id == order_item.id %}
+ {% assign gift_quantity_for_address = gift_quantity_for_address | plus: gr.gift_quantity %}
+ {% endif %}
+ {% endfor %}
+ {% endif %}
+ {% assign total_quantity_for_address = order_items_info.quantity | default: 0 %}
+ {% assign no_gift_quantity_tmp = total_quantity_for_address | minus: gift_quantity_for_address %}
+ {% if no_gift_quantity_tmp < 0 %}
+ {% assign no_gift_quantity = 0 %}
+ {% else %}
+ {% assign no_gift_quantity = no_gift_quantity_tmp %}
+ {% endif %}
+ <!-- 「ギフトなし」行(ギフト数 < 商品数の場合のみ表示) -->
+ {% if no_gift_max > 0 %}
+ <tr class="order-item-row no-gift-row" data-order-item-id="{{ order_item.id }}" data-gift-total="{{ gift_total }}" data-no-gift-max="{{ no_gift_max }}">
+ <th>
+ <label>{{ order_item.variant.name_with_option_values_presentation }}(ギフトなし)</label>
+ </th>
+ <td class="order_items_info">
+ <input type="hidden" class="order_items_info__order_item_id" name="order[shipping_addresses_attributes][{{ index }}][order_items_info_list_attributes][{{ forloop.index0 }}][order_item_id]" value="{{ order_item.id }}">
+ <select class="order_items_info__no_gift_quantity" data-order-item-id="{{ order_item.id }}" data-no-gift-max="{{ no_gift_max }}">
+ {% for i in (0..no_gift_max) %}
+ <option value="{{ i }}" {% if no_gift_quantity == i %}selected{% endif %}>{{ i }} 個</option>
+ {% endfor %}
+ </select>
+ <input type="hidden" class="order_items_info__quantity_hidden" name="order[shipping_addresses_attributes][{{ index }}][order_items_info_list_attributes][{{ forloop.index0 }}][quantity]" value="{{ total_quantity_for_address }}" data-order-item-id="{{ order_item.id }}">
+ </td>
+ </tr>
+ {% else %}
+ <!--ギフトなしの数量が0の場合(すべてギフト付き)、hidden inputのみ送信 -->
+ <tr class="order-item-row" data-order-item-id="{{ order_item.id }}" style="display:none;">
+ <th>
+ <label>{{ order_item.variant.name_with_option_values_presentation }}</label>
+ </th>
+ <td class="order_items_info">
+ <input type="hidden" class="order_items_info__order_item_id" name="order[shipping_addresses_attributes][{{ index }}][order_items_info_list_attributes][{{ forloop.index0 }}][order_item_id]" value="{{ order_item.id }}">
+ <input type="hidden" class="order_items_info__quantity_hidden" name="order[shipping_addresses_attributes][{{ index }}][order_items_info_list_attributes][{{ forloop.index0 }}][quantity]" value="{{ total_quantity_for_address }}" data-order-item-id="{{ order_item.id }}">
+ </td>
+ </tr>
+ {% endif %}
+ <!-- 「商品+ギフト」行(同じテーブル内に表示) -->
+ {% for gift_set in gift_sets %}
+ {% if gift_set.order_item_id == order_item.id %}
+ {% assign max_selectable = gift_set.gift_order_item.quantity | default: gift_set.gift_quantity %}
+ {% if gift_set.max_gift_quantity %}
+ {% assign max_selectable = gift_set.max_gift_quantity %}
+ {% endif %}
+ <!-- このお届け先に設定されたギフト数量を取得 -->
+ {% assign selected_gift_qty = 0 %}
+ {% if shipping_address.gift_relations %}
+ {% for gr in shipping_address.gift_relations %}
+ {% assign name_match = false %}
+ {% if gr.name_part_of_noshi == blank and gift_set.name_part_of_noshi == blank %}
+ {% assign name_match = true %}
+ {% elsif gr.name_part_of_noshi == gift_set.name_part_of_noshi %}
+ {% assign name_match = true %}
+ {% endif %}
+ {% assign desc_match = false %}
+ {% if gr.description_part_of_noshi == blank and gift_set.description_part_of_noshi == blank %}
+ {% assign desc_match = true %}
+ {% elsif gr.description_part_of_noshi == gift_set.description_part_of_noshi %}
+ {% assign desc_match = true %}
+ {% endif %}
+ {% if gr.order_item_id == gift_set.order_item_id and gr.gift_order_item_id == gift_set.gift_order_item_id and name_match and desc_match %}
+ {% assign selected_gift_qty = gr.gift_quantity %}
+ {% endif %}
+ {% endfor %}
+ {% endif %}
+ <tr class="product-gift-set-row" data-order-item-id="{{ gift_set.order_item_id }}" data-gift-order-item-id="{{ gift_set.gift_order_item_id }}" data-name-part-of-noshi="{{ gift_set.name_part_of_noshi }}" data-description-part-of-noshi="{{ gift_set.description_part_of_noshi }}">
+ <th>
+ {{ gift_set.order_item.variant.name_with_option_values_presentation }}
+ <br>
+ {{ gift_set.gift_order_item.variant.name_with_option_values_presentation }}
+ {% if gift_set.description_part_of_noshi != blank %}
+ <br>
+ 表書き:{{ gift_set.description_part_of_noshi }}
+ {% endif %}
+ {% if gift_set.name_part_of_noshi != blank %}
+ <br>
+ 名入れ:{{ gift_set.name_part_of_noshi }}
+ {% endif %}
+ </th>
+ <td>
+ <select class="gift-relation-quantity" data-order-item-id="{{ gift_set.order_item_id }}" data-max-quantity="{{ max_selectable }}">
+ {% for i in (0..max_selectable) %}
+ <option value="{{ i }}" {% if i == selected_gift_qty %}selected{% endif %}>{{ i }} 個</option>
+ {% endfor %}
+ </select>
+ <input type="hidden" class="gift-relation-quantity-hidden" name="order[shipping_addresses_attributes][{{ index }}][gift_relations_attributes][{{ gift_relation_idx }}][quantity]" value="{{ selected_gift_qty }}">
+ <input type="hidden" name="order[shipping_addresses_attributes][{{ index }}][gift_relations_attributes][{{ gift_relation_idx }}][order_item_id]" value="{{ gift_set.order_item_id }}">
+ <input type="hidden" name="order[shipping_addresses_attributes][{{ index }}][gift_relations_attributes][{{ gift_relation_idx }}][gift_order_item_id]" value="{{ gift_set.gift_order_item_id }}">
+ <input type="hidden" name="order[shipping_addresses_attributes][{{ index }}][gift_relations_attributes][{{ gift_relation_idx }}][name_part_of_noshi]" value="{{ gift_set.name_part_of_noshi }}">
+ {% if gift_set.description_part_of_noshi != blank %}
+ <input type="hidden" name="order[shipping_addresses_attributes][{{ index }}][gift_relations_attributes][{{ gift_relation_idx }}][description_part_of_noshi]" value="{{ gift_set.description_part_of_noshi }}">
+ {% endif %}
+ </td>
+ </tr>
+ {% assign gift_relation_idx = gift_relation_idx | plus: 1 %}
+ {% endif %}
+ {% endfor %}
+ {% else %}
+ <!-- 通常商品(ギフト対象外) -->
+ <tr class="order-item-row" data-order-item-id="{{ order_item.id }}">
+ <th>
+ <label>{{ order_item.variant.name_with_option_values_presentation }}</label>
+ </th>
+ <td class="order_items_info">
+ <input type="hidden" class="order_items_info__order_item_id" name="order[shipping_addresses_attributes][{{ index }}][order_items_info_list_attributes][{{ forloop.index0 }}][order_item_id]" value="{{ order_item.id }}">
+ <select class="order_items_info__quantity" name="order[shipping_addresses_attributes][{{ index }}][order_items_info_list_attributes][{{ forloop.index0 }}][quantity]">
+ {% for i in (0..order_item.quantity) %}
+ <option value="{{ i }}" {% if order_items_info.quantity == i %}selected{% endif %}>{{ i }}</option>
+ {% endfor %}
+ </select>
+ </td>
+ </tr>
+ {% endif %}
+ {% endfor %}
+ </tbody>
+ </table>
<!-- 配送業者情報 -->mypage > 購入履歴詳細画面 お届け先情報
ec_force/shop/customer/orders/shipping_addresses/show.html.liquid
ec_force/shop/customer/orders/shipping_addresses/show.html+smartphone.liquid
<!-- 商品情報 -->
{% for order_item in shipping_address.order_items_and_gift_order_items %}
- <!-- 商品名 -->
- {{ order_item.variant.name_with_option_values_presentation }}
- (
- <!-- 商品個数 -->
- {{ order_item.id | quantity_of: shipping_address.id }} 個
- )
+ {% unless order_item.product.gift? %}
+ <!-- 商品名 -->
+ {{ order_item.variant.name_with_option_values_presentation }}
+ ({{ order_item.id | quantity_of: shipping_address.id }} 個)
+
+ {% assign matching_count = 0 %}
+ {% assign non_multiple_address_count = 0 %}
+ {% for gift_relation in order_item.gift_relations %}
+ {% assign match_by_address_id = false %}
+ {% if gift_relation.address_id == shipping_address.id %}
+ {% assign match_by_address_id = true %}
+ {% endif %}
+ {% assign match_by_non_multiple = false %}
+ {% if gift_relation.address_id == blank and gift_relation.multiple_address? == false %}
+ {% assign match_by_non_multiple = true %}
+ {% endif %}
+ {% if match_by_address_id or match_by_non_multiple %}
+ {% assign matching_count = matching_count | plus: 1 %}
+ {% if match_by_non_multiple %}
+ {% assign non_multiple_address_count = non_multiple_address_count | plus: 1 %}
+ {% endif %}
+ {% endif %}
+ {% endfor %}
+ {% assign is_non_multiple_address_gift = false %}
+ {% if matching_count > 0 and matching_count == non_multiple_address_count %}
+ {% assign is_non_multiple_address_gift = true %}
+ {% endif %}
+ {% for gift_relation in order_item.gift_relations %}
+ {% assign match_by_address_id = false %}
+ {% if gift_relation.address_id == shipping_address.id %}
+ {% assign match_by_address_id = true %}
+ {% endif %}
+ {% assign match_by_non_multiple = false %}
+ {% if gift_relation.address_id == blank and gift_relation.multiple_address? == false %}
+ {% assign match_by_non_multiple = true %}
+ {% endif %}
+ {% if match_by_address_id or match_by_non_multiple %}
+ {% if is_non_multiple_address_gift %}
+ {% assign display_quantity = order_item.id | quantity_of: shipping_address.id %}
+ {% else %}
+ {% assign display_quantity = gift_relation.gift_quantity %}
+ {% endif %}
+ └ {{ gift_relation.gift_order_item.variant.name_with_option_values_presentation }}
+ ({{ display_quantity }} 個)
+ {% if gift_relation.description_part_of_noshi != blank %}
+ / 表書き:{{ gift_relation.description_part_of_noshi }}
+ {% endif %}
+ {% if gift_relation.name_part_of_noshi != blank %}
+ / 名入れ:{{ gift_relation.name_part_of_noshi }}
+ {% endif %}
+ {% endif %}
+ {% endfor %}
+ {% endunless %}
{% endfor %}
{% if editable_shipping_address %}軽微な機能改修
検索後の画面で検索条件を保持・表示する対応をおこないました。
shared_partial > sidebar(部分テンプレート)
ec_force/shop/shared/_sidebar.html.liquid
ec_force/shop/shared/_sidebar.html+smartphone.liquid
<label>カテゴリ</label>
<select name="q[products_product_categories_product_category_id_eq]" id="q_products_product_categories_product_category_id_eq">
<option value="">選択してください</option>
+
+ {% assign selected_category_id = params["q"]["products_product_categories_product_category_id_eq"] | append: "" %}
{% for category in product_categories %}
{% if category.product_category_visibility %}
- <option value="{{ category.id }}">{{ category.name }}</option>
+ {% assign category_id_str = category.id | append: "" %}
+
+ <option value="{{ category.id }}" {% if selected_category_id == category_id_str %}selected{% endif %}>{{ category.name }}</option>
{% endif %}
{% endfor %}
</select> <label>メーカー</label>
<select name="q[maker_id_eq]" id="q_maker_id_eq">
<option value="">選択してください</option>
+
+ {% assign selected_maker_id = params["q"]["maker_id_eq"] | append: "" %}
{% for maker in makers %}
- <option value="{{ maker.id }}">{{ maker.name }}</option>
+ {% assign maker_id_str = maker.id | append: "" %}
+
+ <option value="{{ maker.id }}" {% if selected_maker_id == maker_id_str %}selected{% endif %}>{{ maker.name }}</option>
{% endfor %}
</select> <!-- ラベル -->
<label>ラベル</label>
{% for label in product_labels %}
- <input type="checkbox" name="q[labels_id_in][]" id="q_labels_id_in_{{ label.id }}" class="product-label" value="{{ label.id }}">
+ {% assign label_id_str = label.id | append: "" %}
+ {% assign is_checked = false %}
+
+ {% if params["q"]["labels_id_in"] %}
+ {% for selected_label_id in params["q"]["labels_id_in"] %}
+ {% assign selected_label_id_str = selected_label_id | append: "" %}
+ {% if label_id_str == selected_label_id_str %}
+ {% assign is_checked = true %}
+ {% endif %}
+ {% endfor %}
+ {% endif %}
+
+ <input type="checkbox" name="q[labels_id_in][]" id="q_labels_id_in_{{ label.id }}" class="product-label" value="{{ label.id }}" {% if is_checked %}checked{% endif %}>
<label for="q_labels_id_in_{{ label.id }}" class="mt10 mr10 p5"># {{ label.name }}</label>
{% endfor %}layout > 購入以外(レイアウト)
layouts/ec_force/shop.html.liquid
layouts/ec_force/shop.html+smartphone.liquid
{% include 'ec_force/shop/shared/nav.html' %}
<!-- サイドバー: shared_partial(sidebar) の読み込み (任意) -->
+ <!-- PC: sidebar.html / SP: sidebar.html+smartphone -->
{% include 'ec_force/shop/shared/sidebar.html' %}
<!-- ecforceが提供しているJavascript変数を読み込むための記述 -->
{{ include_gon }}layout > 購入
layouts/ec_force/shop/order.html.liquid
layouts/ec_force/shop/order.html+smartphone.liquid
{% include 'ec_force/shop/shared/nav.html' %}
<!-- サイドバー: shared_partial(sidebar) の読み込み (任意) -->
+ <!-- PC: sidebar.html / SP: sidebar.html+smartphone -->
{% include 'ec_force/shop/shared/sidebar.html' %}
<!-- ecforceが提供しているJavascript変数を読み込むための記述 -->
{{ include_gon }}不具合修正
サンクスオファー機能を利用している際に起こる、軽微な不具合を修正しました。
cart > サンクスオファー画面
ec_force/shop/orders/cv_upsell.liquid
ec_force/shop/orders/cv_upsell.html+smartphone.liquid
{% assign css_path = '/shop_templates/' | append: template['id'] %}
{% assign css_full_path = css_path | append: '/css.css' %}
-{{ css_full_path | stylesheet_link_tag }}
+<link rel="stylesheet" media="screen" href="{{ css_full_path }}" />
{% assign javascript_path = '/shop_templates/' | append: template['id'] %}
{% assign javascript_full_path = javascript_path | append: '/javascript.js' %}
-{{ javascript_full_path | javascript_include_tag }}
+<script src="{{ javascript_full_path }}"></script>