liquidにはランダム関数がない
ちょっとびっくりしたんですが、ないらしいです。ランダムフィルターみたいなものもない。
では、巷ではどのようにliquidでランダムを実現しているのか??
方法1. Github上のLiquidのみで配列をシャッフルするコードを使用する
勇敢な戦士が、liquidの”配列”の並び順をランダムで変更してくれるsnippetを公開してくれております。
使用方法は、
以下のコードを”random.liquid”というファイル名でsnippetフォルダに作成し、
このように使用したいsection内などで、関数を使うかの如くこう書く。
{%- include 'random' with 'a,b,c,d,e' -%}
表示結果↓
a,c,b,e,d
ページをリロードするたびに並び順がランダムで変わる!
方法2. Liquidのdateフィルターで”秒”を取得して使う!
実は上記のGithubのコードでもいえるが、疑似的に乱数を発生させて利用することができる。
例えば、以下のようなコード。
{%- assign min = 0 -%}
{%- assign max = 9 -%}
{%- assign diff = max | minus: min -%}
{%- assign random_number = "now" | date: "%N" | modulo: diff | plus: min -%}
{{ random_number }}
なかなかシンプルにいかないLiquid。。
別のページでも書きましたが、liquidは四則演算もフィルターという「出力形式」を利用して行うので、
プログラミング言語としてなかなかクセがあります。。
余談ですが、単純に配列の変数を宣言するだけでも以下のようなコード。
<!--▼配列を宣言-->
{% assign parts_tags = "t-shirts, tanktop, long-t-shirts, jacket, shorts, pants, socks, mask, pack, tops, bottoms, accessary" | split: ", " %}
<!--▲配列を宣言-->
<h2>before</h2>
<!--▼もとの配列を出力(出力するためにjoinフィルターで一度テキストに整形)-->
{% assign parts_tags_array = parts_tags | join: ', ' %}
{{ parts_tags_array }}
<h2>after</h2>
<!--▼シャッフルした配列をGithubのsnioppetで出力(こちらは出力までやってくれる)-->
{%- include 'random' with parts_tags_array -%}
下手か!w