Liquid、JavaScriptなどに関する質問
order prinerを使用し、領収書を作成しています。
入力されている商品項目(上記写真の2,3列目、今回は2列)+何も入力されていない余白の列(tr)を追加し10列にしたいと考えています。
for文を使い、上から入力されている商品項目の入力が完了した後、余白のtrを出力し、limitで10回繰り返し、合計10列にしたいのですが、入力されている商品項目分2回で終了してしまいます。(※一枚目写真)
このfor,if文が動かない理由をご教授頂きたいです。
また、根本的にもっと良いやり方があればご教授いただけると幸いです。
解決済! ベストソリューションを見る。
成功
ループが2回で終了している理由は、line_itemsのlengthが2だからです。
for文は指定した配列の要素数分しか回りません。
今回のように10回固定でループを回したい場合は、Rangeを指定するやり方があります。
参考: https://shopify.dev/docs/api/liquid/tags/for#for-range
下記に例を記載します。
このように記載することで、line_itemsの数によらず、10回のループがまわり、かつ1つずつline_itemを処理することができます。
(line_itemsの数よりも多い順目では、line_itemになにも入っていないことに注意してください)
{% for i in (0..9) -%}
{%- assign line_item = line_items[i] -%}
{{ line_item.title }}
{%- endfor %}
以上、参考になりましたら幸いです。
成功
ループが2回で終了している理由は、line_itemsのlengthが2だからです。
for文は指定した配列の要素数分しか回りません。
今回のように10回固定でループを回したい場合は、Rangeを指定するやり方があります。
参考: https://shopify.dev/docs/api/liquid/tags/for#for-range
下記に例を記載します。
このように記載することで、line_itemsの数によらず、10回のループがまわり、かつ1つずつline_itemを処理することができます。
(line_itemsの数よりも多い順目では、line_itemになにも入っていないことに注意してください)
{% for i in (0..9) -%}
{%- assign line_item = line_items[i] -%}
{{ line_item.title }}
{%- endfor %}
以上、参考になりましたら幸いです。
ご返信ありがとうございます。
Rangeを指定する、指定するとline_itemsの数によらず、10回のループがまわる事、理解しました。ありがとうございます。
このように書いてみましたが、二回で止まってしまいます。
単純にif文が間違っているのでしょうか?
何度も申し訳ありません、よろしくお願いいたします。
単純にif文が間違っています。
上述しているように、line_itemsの個数以上の順目の場合(今回の場合では3回目以降)、line_itemは何も入っていない nil です。
したがって3回目以降は、if文のelse内で処理されています。
例を記載しますので、適当に読み替えてください。
{% for i in (0..9) -%}
{%- assign line_item = line_items[i] -%}
{%- unless line_item == nil -%}
{{ line_item.title }}
{%- else -%}
{% echo "test" %}
{%- endunless -%}
{%- endfor %}
ご返信ありがとうございます!
おかげさまで解決いたしました、ありがとうございました!
いつもShopifyをご利用いただき、ありがとうございます。 Shopifyは、皆様の日本語での利用体験の向上に努めております。さらなる改善のために皆様のご意見をお寄せい...
By JasonH May 9, 2025Shopify アカデミーの学習パスと認定スキルバッジExpanding Your Shopify Business Internationallyを活用して、国際的にビジネ...
By Shopify Feb 7, 2025Shopify アカデミーの学習パスB2B on Shopify:立ち上げとカスタマイズで卸売販売に進出しましょう。これら3つの無料コースは、ShopifyストアでB2B機能...
By Shopify Jan 31, 2025