PowerCMS X ブログ

2023-12-14

複数の条件でオブジェクト一覧をソートする

ビューでオブジェクトをループ出力する際に複数のソート条件でソートする方法をご紹介します。

※この機能は PowerCMS X ver.3.23 / 2.723 以降のバージョンで利用することができます。(リリースノート

ソートの基本

例えば「記事」を「公開日」の「降順」でソートする場合は、下記のように記述します。

<mt:entries sort_by="published_on" sort_order="descend">
[<mt:entrydate />] <mt:entrytitle />
</mt:entries>

モデルのカラム名をタグ属性「sort_by」で指定することでカラムの値を使ってソートを行います。
タグ属性「sort_order」は順序(ascend=昇順、descend=降順)を指定します。

複数の条件でソートする

オブジェクトをループ出力するタグ(例 mt:entries)のタグ属性「sort_by」「sort_order」 は同時に複数の値を指定をすることが可能です。
例えば「記事」を

  1. 第1ソート条件「公開日」の「降順
  2. 第2ソート条件「タイトル」の「昇順」

でソートする場合は下記のように記述します。

<mt:entries sort_by="'published_on','title'" sort_order="'descend','ascend'">
[<mt:entrydate />] <mt:entrytitle />
</mt:entries>

下記のように配列を指定することも可能です。

<mt:setvar name="array_sort_by" function="push" value="published_on" />
<mt:setvar name="array_sort_by" function="push" value="title" />
<mt:setvar name="array_sort_order" function="push" value="descend" />
<mt:setvar name="array_sort_order" function="push" value="ascend" />
<mt:entries sort_by="$array_sort_by" sort_order="$array_sort_order">
[<mt:entrydate />] <mt:entrytitle />
</mt:entries>

複数条件でソートする場合は sort_by と sort_order が対になるように指定してください。
複数のソート条件で出力順が同じ場合は sort_by は1つでも機能します。
その場合は下記のように記述してください。

<mt:entries sort_by="'published_on','title'" sort_order="descend">
[<mt:entrydate />] <mt:entrytitle />
</mt:entries>

関連情報

カテゴリー:テンプレート作成Tips

投稿者:fujimoto

ブログ内検索

アーカイブ