CONTAINSは、配列の要素のどれかと完全一致する要素を指す時に使われると思われがちですが、実は「文字列の部分一致」にも使われます。
今日はShopify Liquidでテンプレートを組んでいる最中、恥ずかしながら、思わぬ発見がありました。
Liquidの「contains」は、配列内の完全一致チェックと文字列中の部分一致確認という2通りの使い方があるのです。
これまで「contains」の使い方について何の疑問も持っていなかった私、ちょっぴり衝撃でした。この記事では「contains」の使い方2つについてシンプルに解説していきます。
「CONTAINS」とは
「CONTAINS」とは、英単語をそのまま翻訳すると「〇〇を含む」もしくは「〇〇が含まれる」という意味を持っています。
ShopifyのLiquidでも、ほぼその意味での役割を果たしており、主に「商品や記事のタグに〇〇が含まれていると」という条件分岐に使用される事が多いです。
例えば、
{% if product.tags contains '女性用' %}
<p>女性用です</p>
{% endif %}
というふうに使われております。
「CONTAINS」は配列要素を完全一致だけに使われる?
そのため、「tags」が持つ複数(配列)の要素のどれかと完全一致する要素を指す時に使われると思われがちですが、実は「文字列の部分一致」にも使われます。
以下のタグを見てみましょう。
{% if product.tags contains '子供用' %} //①要素と完全一致
{% for tag in product.tags %}
{% if tag contains '_入学準備用' %}
<p>{{ tag | remove:'_入学準備用' }}入学おめでとうございます!</p> //②文字列の部分一致
{% endif %}
{% endfor %}
{% endif %}
例えな、「子供用」と「小学生_入学準備用」というタグを持つ商品だとしましょう。
{% if product.tags contains '子供用' %}
は、商品が持つタグ要素のどれかと完全一致を条件とする構文です。
一方、{% if tag contains '_入学準備用' %}
は、タグの文字列の部分一致を条件とする構文になります。
こんな応用も可能
「文字列の部分一致」で条件分岐ができる!ならば、以下のような応用も可能です。
①商品のタイトルの「〇〇〇(文字列)」が入っているなら → {% if product.title contains ‘〇〇〇’ %}
②ブログ記事の本文に「〇〇〇(文字列)」が入っているなら → {% if article.content contains ‘〇〇〇’%}
以上、「CONTAINS」の使い方の紹介でした。もちろん、ある程度Liquidに触れている方なら、大した常識ではないかもしれませんが、鵜呑みでLiquidを学習してきたので、反省を兼ねてブログを作成しました。まだわからなかったという方なら、ぜひご活用してみてください。