これは Craft CMS Advent Calendar 2020 2日目の記事です。
Craft CMS では、エレメントクエリの id
パラメータに複数の ID をセットすることで、目的のエレメントだけを取得できます。
このとき、デフォルトの出力結果は エレメントの投稿日順
となるため、ID の指定順
で取得する方法をご紹介します。
はじめに
Craft CMS でエントリを取得するには、次のようなコードを定義します。
{% set newsEntries = craft.entries.section('news').all() %}
ここではセクションハンドル news
に投稿されたエントリを取得し、変数 newsEntries
にセットしています。
.all()
の時点でクエリを実行するため、絞り込みなどの条件はそれより前に追加していきます。例えば 最新5件だけ取得
するため limit
パラメータを付加する場合、次のようになります。
{% set newsEntries = craft.entries.section('news').limit(5).all() %}
指定 ID のエントリを取得する
では、任意の ID を指定して、それに該当するエントリだけを取得してみましょう。
{% set specifiedEntries = craft.entries.id([7,1,5,3]).all() %}
ID を複数指定するには id([7,1,5,3])
のように配列でセットします。ただし、このままだと ID の指定順
はなく 投稿日順
になるため、次のように fixedOrder
を追加します。
{% set specifiedEntries = craft.entries.id([7,1,5,3]).fixedOrder().all() %}
これで期待通り ID の指定順
になります。
id と ids の違い
それぞれ、次のような違いがありますので打ち間違いに注意してください。
id
は取得するエレメントの指定(limit
などと同様、絞り込み条件を追加)ids
はクエリを実行して ID だけを取得(all
などと同様、クエリを実行)
まとめ
利用頻度は高くないかもしれませんが、ID の指定順
通りにエントリを取得する方法について解説してみました。
「いくつかのセクションをあらかじめ別々に検索し、それぞれで取得した ID をマージしつつ元の検索結果のスコア順で出力する」といった用途にも使えますので、頭の片隅にでも入れておいてください。