見出し画像

Liquid-チートシート ②タグ

反復タグ

翻訳
反復タグは、コードのブロックを繰り返し実行するために使用されます。

反復タグには6種類あります。

① {% for %}
② {% else %}
③ {% break %}
④ {% continue %}
⑤ {% cycle %}
⑥ {% tablerow %}

※① {% for %} ② {% else %}は何度も使って理解しているので省略


③ {% break %}

翻訳
ループがbreakタグに遭遇したときにループの反復を停止させます。
◆例コード
{% for i in (1..5) %}
 {% if i == 4 %}
  {% break %}
 {% else %}
  {{ i }}
 {% endif %}
{% endfor %}

出力結果
1 2 3

・i が 4 になればループを停止させる
 それまではループを続ける(1 2 3まではループする)


④ {% continue %}

翻訳
ループがcontinueタグに遭遇したときに、現在の反復をスキップするようにします。
◆例コード
{% for i in (1..5) %}
 {% if i == 4 %}
  {% continue %}
 {% else %}
  {{ i }}
 {% endif %}
{% endfor %}

出力結果
1 2 3 5

・i が4になれば 4を除いて出力する


⑤ {% cycle %}

翻訳
文字列群をループさせて、パラメータとして渡された順に出力します。
cycleが呼ばれるたびに、パラメータとして渡された次の文字列が出力されます。
◆例コード
{% cycle 'one', 'two', 'three' %}
{% cycle 'one', 'two', 'three' %}
{% cycle 'one', 'two', 'three' %}
{% cycle 'one', 'two', 'three' %}

出力結果
one
two
three
one

・これはテーマのどのような場面で使うのか?
 トップページのヒーローイメージ(メインビジュアル)で使われている
 ヒーローイメージが設定されていないときに表示させる画像で
 使われていました。
 そのコードは、hero.liquidにcycleを発見できました。

{% capture current %}{% cycle 1,2 %}{% endcapture %}
{{ 'lifestyle-' | append: current | placeholder_svg_tag: 'placeholder-svg' }}

◆考えらえるcycleの役割 変数 current に「1」と「2」が入っている
ヒーローイメージ1枚目 → lifestyle-1
ヒーローイメージ2枚目 → lifestyle-2
ヒーローイメージ3枚目 → lifestyle-1
ヒーローイメージ4枚目 → lifestyle-2

Shopifyのデフォルトで用意しているnoimgのときの画像(SVG)の種類

プレースホルダ―

https://shopify.dev/api/liquid/filters/additional-filters


⑥ {% tablerow %}

翻訳
HTMLの<table>を生成します。
<table>と</table>のHTMLタグで包まれている必要があります。
◆例コード
<table>
 {% tablerow product in collection.products %}
  {{ product.title }}
 {% endtablerow %}
</table>
出力結果
<table>
 <tr class="row1">
  <td class="col1">
   Cool Shirt
  </td>
  <td class="col2">
   Alien Poster
  </td>
  <td class="col3">
   Batman Poster
  </td>
 </tr>
</table>

・コレクションの商品名をtableで出力している


テーマタグ

翻訳
テーマタグには、テンプレート固有のHTMLマークアップを出力したり、使用するレイアウトやスニペットをテーマに指示したり、返された配列を複数のページに分割したりするなど、さまざまな機能があります。

テーマタグができること
・変数や配列の文字列などを表示する
・HTMLのタグをLiquidで出力する
・セクションやスニペットファイルを読み込む など

テーマタグは10種類
① {% comment %}
② {% echo %}
③ {% include %}
④ {% form %}
⑤ {% liquid %}
⑥ {% paginate %}
⑦ {% raw %}
⑧ {% render %}
⑨ {% section %}
⑩ {% style %}


① {% comment %}

翻訳
Liquidテンプレートの中にレンダリングされないコードを残すことができます。開口部と閉口部のコメントブロック内のテキストは出力されず、Liquidのコードが実行されることもありません。
◆例コード
My name is {% comment %}super{% endcomment %} Shopify.

出力結果
My name is Shopify.

制作者用のタグでコメントしたいときに使うタグです。

・HTMLでコメントするときは <!-- コメント内容 -->
・CSSでコメントするときは /* コメント内容 */
・Liquidでコメントするときは
  {% comment %} コメント内容 {% endcomment %}


② {% echo %}

翻訳
liquidタグ内で動作し、レンダリングされたHTML内に式(Liquidオブジェクト)を出力します。
echoタグを使った式にもフィルタを適用することができます。

・liquidタグ内で動作とは?→⑤ {% liquid %}へ
・式(expression)とは?
 式(expression)と文(statement)のプログラムの概念
 文には代入文、if文、for文、if文の中の判定条件は式
 文と式の最大の違いは、値を返すのが式で、返さないのが文

◆例コード
{% liquid
if product.featured_image
  echo product.featured_image | img_tag
else
  echo 'product-1' | placeholder_svg_tag
endif %}


出力結果
<img src="//cdn.shopify.com/s/files/1/0159/3350/products/red_shirt_small.jpg?v=1398706734" alt="Red Shirt Small" />


③ {% include %}

翻訳
テーマのsnippetsフォルダからスニペットを挿入します。

※現在 {% include %} は非推奨になっています。
 スニペットを読み込むときは、⑧ {% render %}を使うことが推奨
 理由は、スニペット内のコードが親テンプレート内の変数の値を
 書きかえることができるため


④ {% form %}

翻訳
フォームを正常に送信するために必要なすべての属性(action、idなど)と<input>を持つHTMLの<form>要素を作成します。


⑤ {% liquid %}

翻訳
1つのデリミタで複数のタグを書くことができます。これにより、変数や条件を作成したり、コードブロックを実行したりする際に、複数のデリミタを開閉する必要がなくなります。
◆例コード
{% liquid
case section.blocks.size
when 1
 assign column_size = ''
when 2
 assign column_size = 'one-half'
when 3
 assign column_size = 'one-third'
else
 assign column_size = 'one-quarter'
endcase %}

Liquidコードをつづけて書くためのコード
コード閉じタグを記載する必要がなくなるメリットがある
Liquidの上級者が使いそうな書き方である

デリミタとは?→これのことか? {% %}

デリミタとは、区切り文字のことです。{% %}や{{ }}のことです。

taichi fukumotoさんの記事が参考になります。


⑥ {% paginate %}

翻訳
paginateタグは、forタグと連動して、コンテンツを多数のページに分割します。このタグは、配列をループするforタグのブロックを包む必要があります。


⑦ {% raw %}

翻訳
解析されずにページ上にLiquidコードを出力することができます。
◆例コード
{% raw %}{{ 5 | plus: 6 }}{% endraw %} is equal to 11.

出力結果
{{ 5 | plus: 6 }} is equal to 11.

Liquidをブラウザに表示したいときに使うコードです。


⑧ {% render %}

翻訳
テーマのsnippetsフォルダからスニペットをレンダリングします。

スニペットがレンダリングされると、スニペット内のコードは、親テンプレート内で割り当てられた変数にアクセスできません。
同様に、スニペット内で割り当てられた変数は、スニペットの外側のコードからはアクセスできません。
このカプセル化により、パフォーマンスが向上し、テーマコードの理解とメンテナンスが容易になります。
◆例コード
{% render 'snippet-name' %}

.liquid拡張子は不要
翻訳の説明ではわかりにくい

スニペットを読み込むのに {% include %} よりも
{% render %} を使う方が良い。

なぜ?{% include %}との違いは?

{% include %}では、スニペット内のコードが
親テンプレート内の変数の値を書きかえることができる

{% render %}では
スニペットがレンダリングされるとき、
レンダリングした親ファイル(セクションやテンプレート等)と
スニペットで同じ変数を使用していても
親の変数の値は自動的に代入されない。
スニペットで定義された変数は、スニペット外のコードからは
変数にアクセスできない。

スニペットを読み込むには{% render %}を使うこと


⑨ {% section %}

翻訳
テーマのsectionフォルダからセクションを挿入します。
◆例コード
{% section 'footer' %}


⑩ {% style %}

翻訳
Liquid {% style %}タグは、Shopifyデータ属性を持つHTML <style>タグをレンダリングします。
◆例コード
{% style %}
 .section-header {
  color: #dddddd;
 }
{% endstyle %}


出力結果
<style data-shopify>
 .section-header {
  color: #dddddd;
 }
</style>

HTMLにCSSコードを出力できます。

この記事が気に入ったらサポートをしてみませんか?