再構築を軽くするための小ネタ。 今回のケースは、記事の出力を複数の条件で絞り込む場合です。
条件の組み合わせによっては、<mt:Entries>だけで済むのですが、
複数のカスタムフィールドで絞り込むなどの場合は、どうしても<mt:If>を使用しなくてはいけません。
その場合、出力件数を大きくしなくてはいけなくなり、再構築の時間が増えてしまいます。
記事の詳細ページに、関連記事を表示するという例で2パターンつくってみて
再構築にかかった時間を比較してみたいと思います。
全記事を対象に、条件に合うものだけ表示するようにしています。
対象記事数が増えると再構築の時間がどんどん増えていきます。
今回は使えませんが、カスタムフィールドの値が一つ(完全一致)であれば「field:~」を使えます。
orやandのような複雑な絞り込みはできません。
<$mt:SetVar name="display_count" value="0"$> <$mt:EntryID setvar="SET_entID"$> <mt:Entries lastn="0" include_blogs="xxx"> <mt:If name="display_count" ge="2"> <mt:If tag="select_entry" like="$SET_entID"> (出力内容) <$mt:SetVar name="display_count" op="++"$> </mt:If> </mt:If> </mt:Entries>
<mt:SearchEntryField>タグは、PowerCMSで使えるタグです。
先ほどできなかったカスタムフィールドの複数の値に対応できます。
ちなみに、operator モディファイアには like, notlike , notnull , not, >, >=, <, <=, != などいろいろ指定できます。
<$mt:EntryID setvar="SET_entID"$> <mt:SearchEntryField field="select_entry" query="$SET_entID" operator="like" lastn="2" include_blogs="xxx"> (出力内容) </mt:SearchEntryField>
先ほどのmt:Ifの例と比べるとソースがだいぶスッキリしましたね。
記事が1000件ほどあった場合の再構築にかかった時間を計測してみました。
サーバーのスペック、カスタムフィールドの数などいろいろな条件により時間は変わるのでご参考程度に。
→ 約5.9126秒
→ 約0.002123秒
全記事をなめない分、<mt:SearchEntryField>~</mt:SearchEntryField>で絞り込んだほうが圧倒的い早いですね。
記事が増えてくるとどうしても再構築が重くなってくるので
積極的にPowerCMS特有の機能を使っていきましょう。