FROM CACHE - jp_header
このコミュニティはピアツーピアサポートに移行しました。Shopify サポートは今後、このコミュニティへのサービスを提供いたしません。これからもぜひ、他のマーチャントやパートナーとつながり、サポートし合い、経験を共有してください。 当社の行動規範に違反する行動や削除を希望するコンテンツがありましたら、引き続きご報告ください

dawnでのバリエーション毎の在庫表示について

解決済

dawnでのバリエーション毎の在庫表示について

Tomonyan
観光客
6 0 1

dawnにて販売ページを使用していますが、バリエーション毎の在庫の有無がバリエーションを切り替えなければ表示できず、非常にストレスがあります

下記のカスタムLiquidで表示させることはできたのですがプルダウンと合わせて表示したりわかりやすくする方法はありますか?

 

{%- for variant in product.variants -%}
<div>
{%- assign is_in_stock = false -%}
{%- if 0 < variant.inventory_quantity -%}{%- assign is_in_stock = true -%}{%- endif -%}

{{ variant.title | escape }} -

{%- if is_in_stock -%}
在庫あり
{%- elsif is_in_stock == false and variant.inventory_policy == 'continue' -%}
在庫なし 販売を続ける
{%- elsif is_in_stock == false and variant.incoming -%}
在庫なし 再入荷待ち 入荷予定日:{%- if variant.next_incoming_date -%}{{ variant.next_incoming_date | date:"%Y/%m/%d" }}{%- else -%}未定{%- endif -%}
{%- elsif is_in_stock == false -%}
在庫なし
{%- endif -%}
</div>
{%- endfor -%}

1 件の受理された解決策
Qcoltd
Shopify Partner
1215 486 465

成功

@Tomonyan 様

 

失礼しました。

下記の在庫状況の文字列の定義位置がよくありませんでした。

{%- assign variantOptionInventoryStatus = '在庫なし' -%}

また、不要な"}"が紛れ込んでいたので合わせて修正しました。

改善版

               <variant-selects class="no-js-hidden" data-section="{{ section.id }}" data-url="{{ product.url }}" {{ block.shopify_attributes }}>
                  {%- for option in product.options_with_values -%}
                    <div class="product-form__input product-form__input--dropdown">
                      <label class="form__label" for="Option-{{ section.id }}-{{ forloop.index0 }}">
                        {{ option.name }}
                      </label>
                      <div class="select">
                        <select id="Option-{{ section.id }}-{{ forloop.index0 }}"
                          class="select__select"
                          name="options[{{ option.name | escape }}]"
                          form="{{ product_form_id }}"
                        >
                          {%- for value in option.values -%}
                          {%- assign variantOptionInventoryStatus = '在庫なし' -%}
                            {%- for variant in product.variants -%}
                              {%- for variantOption in variant.options -%}
                                {%- if variantOption == value -%}
                                  {% if variant.inventory_quantity > 0 %}
                                    {%- assign variantOptionInventoryStatus = '在庫あり' -%}
                                  {% endif %}                                  
                                {%- endif -%}
                              {%- endfor -%}
                            {%- endfor -%}
                            <option value="{{ value | escape }}" {% if option.selected_value == value %}selected="selected"{% endif %}>
                              {{ value }} - {{ variantOptionInventoryStatus  }}
                            </option>
                          {%- endfor -%}
                        </select>
                        {% render 'icon-caret' %}
                      </div>
                    </div>
                  {%- endfor -%}

                  <script type="application/json">
                    {{ product.variants | json }}
                  </script>
                </variant-selects>

 

なお、

異なるoptionのvalueに同一の値が入るとうまく動作しないです。

例えば、アパレルを例にとると、

かなり特殊な状況ですが、色もサイズも数字で表すというようなことをされているとうまく動作しません。

 

[例]

色: 1,2,3

サイズ: 1,2,3

 

エッジケースですので、この点の改良については、必要とされている方がいらっしゃれば考えてみます。

 

ご参考まで。

(キュー田辺)

株式会社Q (キュー)
グラフィックデザイン、アパレル事業、Web制作など色々やっている渋谷区代々木の会社です。ShopifyでのECサイトの運営・開発も行なっています。
私たちについて: https://web.q-co.jp/ テックブログ: https://techlab.q-co.jp/

元の投稿で解決策を見る

3件の返信3

Qcoltd
Shopify Partner
1215 486 465

variantのoptionが2つ以上ある場合を考慮しますと、

質問者様に記載いただいているような、「入荷待ち」のような情報まで、

ドロップダウンに記載するのは難しいかもしれません。

 

例えば、商材がアパレルだったとします。

optionとして、サイズと色の2種類があったとします。

この時、ある商品に下記のように4種類のvariantが存在したとします。

 

1. WHITE / S

2. WHITE / M

3. BLACK / S

4. BLACK / M

 

WHITE / Sが入荷待ちで、WHITE / Mが入荷予定がなかったとします。

 

この時、「色」を選択するドロップダウン中の、

WHITEという選択肢において、入荷待ちなのか入荷予定がないのかを、

一意に決定することができません。

 

どこまでできるか考えてみたのですが、

在庫の有無くらいは、ドロップダウンに追加できそうです。

 

Dawnをお使いとのことで、

セクション(sections) > main-product.liquidのドロップダウンを出力する箇所を下記のように変更することでできそうです。

(十分な検証はできていないので、うまく動作しないパターンがあるかもしれません。)

 

元のコード

                <variant-selects class="no-js-hidden" data-section="{{ section.id }}" data-url="{{ product.url }}" {{ block.shopify_attributes }}>
                  {%- for option in product.options_with_values -%}
                    <div class="product-form__input product-form__input--dropdown">
                      <label class="form__label" for="Option-{{ section.id }}-{{ forloop.index0 }}">
                        {{ option.name }}
                      </label>
                      <div class="select">
                        <select id="Option-{{ section.id }}-{{ forloop.index0 }}"
                          class="select__select"
                          name="options[{{ option.name | escape }}]"
                          form="{{ product_form_id }}"
                        >
                            <option value="{{ value | escape }}" {% if option.selected_value == value %}selected="selected"{% endif %}>
                              {{ value }}
                            </option>
                          {%- endfor -%}
                        </select>
                        {% render 'icon-caret' %}
                      </div>
                    </div>
                  {%- endfor -%}

                  <script type="application/json">
                    {{ product.variants | json }}
                  </script>
                </variant-selects>

 

変更後のコード

                <variant-selects class="no-js-hidden" data-section="{{ section.id }}" data-url="{{ product.url }}" {{ block.shopify_attributes }}>
                  {%- for option in product.options_with_values -%}
                    <div class="product-form__input product-form__input--dropdown">
                      <label class="form__label" for="Option-{{ section.id }}-{{ forloop.index0 }}">
                        {{ option.name }}
                      </label>
                      <div class="select">
                        <select id="Option-{{ section.id }}-{{ forloop.index0 }}"
                          class="select__select"
                          name="options[{{ option.name | escape }}]"
                          form="{{ product_form_id }}"
                        >
                          {%- assign variantOptionInventoryStatus = '在庫なし' -%}
                          {%- for value in option.values -%}
                            {%- for variant in product.variants -%}
                              {%- for variantOption in variant.options -%}}
                                {%- if variantOption == value -%}
                                  {% if variant.inventory_quantity > 0 %}
                                    {%- assign variantOptionInventoryStatus = '在庫あり' -%}
                                  {% endif %}                                  
                                {%- endif -%}}
                              {%- endfor -%}
                            {%- endfor -%}
                            <option value="{{ value | escape }}" {% if option.selected_value == value %}selected="selected"{% endif %}>
                              {{ value }} - {{ variantOptionInventoryStatus  }}
                            </option>
                          {%- endfor -%}
                        </select>
                        {% render 'icon-caret' %}
                      </div>
                    </div>
                  {%- endfor -%}

                  <script type="application/json">
                    {{ product.variants | json }}
                  </script>
                </variant-selects>

 

ご要望通りの回答ではなく恐縮ですが、

何かの参考になれば幸いです。

(キュー田辺)

株式会社Q (キュー)
グラフィックデザイン、アパレル事業、Web制作など色々やっている渋谷区代々木の会社です。ShopifyでのECサイトの運営・開発も行なっています。
私たちについて: https://web.q-co.jp/ テックブログ: https://techlab.q-co.jp/
Tomonyan
観光客
6 0 1

ご回答ありがとうございます。

提案いただいた通りバリエーション毎に在庫のあり、なしがドロップダウンに追加されるだけで

とてもありがたいです。

記載いただいたコードを試したところ在庫のないバリエーションも全て「在庫あり」で表示されてしまいます。

上手く作動させることはできそうでしょうか?

Qcoltd
Shopify Partner
1215 486 465

成功

@Tomonyan 様

 

失礼しました。

下記の在庫状況の文字列の定義位置がよくありませんでした。

{%- assign variantOptionInventoryStatus = '在庫なし' -%}

また、不要な"}"が紛れ込んでいたので合わせて修正しました。

改善版

               <variant-selects class="no-js-hidden" data-section="{{ section.id }}" data-url="{{ product.url }}" {{ block.shopify_attributes }}>
                  {%- for option in product.options_with_values -%}
                    <div class="product-form__input product-form__input--dropdown">
                      <label class="form__label" for="Option-{{ section.id }}-{{ forloop.index0 }}">
                        {{ option.name }}
                      </label>
                      <div class="select">
                        <select id="Option-{{ section.id }}-{{ forloop.index0 }}"
                          class="select__select"
                          name="options[{{ option.name | escape }}]"
                          form="{{ product_form_id }}"
                        >
                          {%- for value in option.values -%}
                          {%- assign variantOptionInventoryStatus = '在庫なし' -%}
                            {%- for variant in product.variants -%}
                              {%- for variantOption in variant.options -%}
                                {%- if variantOption == value -%}
                                  {% if variant.inventory_quantity > 0 %}
                                    {%- assign variantOptionInventoryStatus = '在庫あり' -%}
                                  {% endif %}                                  
                                {%- endif -%}
                              {%- endfor -%}
                            {%- endfor -%}
                            <option value="{{ value | escape }}" {% if option.selected_value == value %}selected="selected"{% endif %}>
                              {{ value }} - {{ variantOptionInventoryStatus  }}
                            </option>
                          {%- endfor -%}
                        </select>
                        {% render 'icon-caret' %}
                      </div>
                    </div>
                  {%- endfor -%}

                  <script type="application/json">
                    {{ product.variants | json }}
                  </script>
                </variant-selects>

 

なお、

異なるoptionのvalueに同一の値が入るとうまく動作しないです。

例えば、アパレルを例にとると、

かなり特殊な状況ですが、色もサイズも数字で表すというようなことをされているとうまく動作しません。

 

[例]

色: 1,2,3

サイズ: 1,2,3

 

エッジケースですので、この点の改良については、必要とされている方がいらっしゃれば考えてみます。

 

ご参考まで。

(キュー田辺)

株式会社Q (キュー)
グラフィックデザイン、アパレル事業、Web制作など色々やっている渋谷区代々木の会社です。ShopifyでのECサイトの運営・開発も行なっています。
私たちについて: https://web.q-co.jp/ テックブログ: https://techlab.q-co.jp/