先日 @tamshow_ さんが、こんなツイートをされていました。
Craft CMS こんな感じでデータとれるの素敵
— たむしょう@はらへり (@tamshow_) 2017年9月8日
{% set entries = craft.entries.section(['sec_hoge', 'sec_fuga']).lightswitch_hoge(1).text_fuga.limit(20) %}
言われてみれば、ランダムなデータ取得も便利だと感じていたので、2つの方法をご紹介します。
MySQL の RAND() を利用する
ランダムにデータを取得する際、 order('RAND()')
を利用する方法があります。
下記のサンプルでは、ハンドル名 products
セクションに含まれる公開されているエントリをランダムに5件取得します。
{% set entries = craft.entries.section(['products']).order('RAND()').limit(5) %}
Craft CMS の shuffle() を利用する
ランダムなデータを取得する方法として、Craft CMS で用意されている shuffle()
を利用することもできます。
{% set entries = shuffle(craft.entries.section(['products']).limit(5)) %}
なお、 shuffle()
は引数にセットされた配列をシャッフルするため、Craft CMS のオブジェクトだけでなくテンプレートで独自に追加した配列を処理することも可能です。
参考:Functions | Templating Reference | Craft CMS
https://craftcms.com/docs/templating/functions#shuffle
まとめ
データを取得する際のフィルタ条件をテンプレートで柔軟に設定できるのも、Craft CMS の魅力の1つですね。
ここではエントリを例に挙げましたが、Matrix フィールドやカテゴリ、アセットなどでも同様に定義できますので、試してみてください。
参考:How can I return data from a Matrix field in random order? - Craft CMS Stack Exchange
https://craftcms.stackexchange.com/questions/92/how-can-i-return-data-from-a-matrix-field-in-random-order