PowerCMS X ブログ
2023-12-06
SplitPageプラグインは記事などの一覧ページを指定件数で分割するオプションプラグインです。
このプラグインを使うと件数の多いページを指定件数で分割するだけでなく、ページネーションを表示させることもできて便利ですが、件数が多くなると再構築の負荷が高くなります。日付アーカイブ(月別)などと比較して効率が悪いことに留意してください。
そこで、件数が多い場合、最新の一定の件数分を取得して、それを対象に分割したいケースに対応する方法について紹介します。例として、公開日順に最新100件を対象にページ分割するビューの書き方を考えてみます。
思いつくのはループタグに limit(lastn)を指定することですが、SplitPageプラグインは条件に合致するものすべてを対象に分割するため、この指定は効きません。
そこで、conditions属性を指定して101件目の公開日を取得し、その日付以降のものをフィルタリングします。
conditions属性には「カラム名=フィルタ条件,フィルタの値」という形式でハッシュ変数を生成して渡します。
フィルタ | 説明 |
---|---|
ct (like) | Contains (含む) |
nc | Not Contains (含まない) |
gt | Greater Than (より大きい) |
lt | Less Than (より小さい) |
ge | Greater than or Equal (以上) |
le | Less than or Equal (以下) |
eq | Equal (等しい) |
ne | Not Equal (等しくない) |
bw | Begin with (から始まる) |
ew | End with (で終わる) |
<mt:setvar name="last_update" value="2020-01-01 00:00:00" note="件数に満たなかった時の初期値">
<mt:entries cols="published_on" sort_by="published_on" sort_order="descend" offset="100" limit="1" ignore_filter="1">
<mt:ignore>日付順で101番目に新しい記事の公開日を取得</mt:ignore>
<mt:entrydate setvar="last_update">
</mt:entries>
<mt:ignore>gt=より新しい</mt:ignore>
<mt:sethashvars name="conditions">
published_on=gt,<mt:var name="last_update">
</mt:sethashvars>
<mt:entries conditions="$conditions" _split="1" sort_by="published_on" sort_order="descend">
...
</mt:entries>
この方法では、101件目の記事と全く同じ公開日時の記事があった時に件数が合わない(件数が不足する)可能性があります(published_onではなくidを利用すればそのようなことはなくなります)。確実に100件を取得するには「gt」の代わりに「ge(以上)」を指定すると良いでしょう(逆に多くマッチする可能性があります。)。
<mt:setvar name="last_update" value="2020-01-01 00:00:00" note="件数に満たなかった時の初期値">
<mt:entries cols="published_on" sort_by="published_on" sort_order="descend" offset="99" limit="1" ignore_filter="1">
<mt:ignore>日付順で100番目に新しい記事の公開日を取得</mt:ignore>
<mt:entrydate setvar="last_update">
</mt:entries>
<mt:ignore>ge=同じか、より新しい</mt:ignore>
<mt:sethashvars name="conditions">
published_on=ge,<mt:var name="last_update">
</mt:sethashvars>
<mt:entries conditions="$conditions" _split="1" sort_by="published_on" sort_order="descend">
...
</mt:entries>
(2024年9月2日修正) サンプルコードに「ignore_filter="1"」を追記しました。
カテゴリー:テンプレート作成Tips | プラグイン | 技術情報
投稿者:Junnama Noda