●年●月●日以前のブログ記事だけ表示させるテンプレートコード《Movable Type》


  • 公開:
  • 更新:
  • 編集:
概要 ▶ 標準のテンプレートタグだけで作成。ブログ記事の日付を比較する部分がキモです。

今回はMovable Typeのコミュニティで質問されていた「●●以前のエントリー記事だけ表示させる」テンプレートコードの紹介です。


実際の質問はこちら。

■要件

記事一覧があるページというと、
通常、最新記事から古い記事を順に表示していくと思うのですが、
たとえば[2007年度以前]の記事だけを表示させることは可能でしょうか。

くわしい説明はこちらに図にしております。

20150314-MovableTypeで2007年度以前の記事を表示-01
http://pppearl.jp/data/mt/zu3.jpg

記事一覧で〇〇年以前の記事だけを表示させることは可能でしょうか。 - MTQ | Movable Type ユーザーコミュニティ


回答に「プラグインを使えばできますよ」というものがあって、それで解決しているのですが、何でもかんでもプラグインというのは問題では…と思っているので、標準のテンプレートタグだけで何とかしてみます。

●2007年度以前のエントリー記事だけを出力するコード

テンプレートコードはこちら。

<mt:Entries lastn="0">
    <$mt:EntryDate format="%Y%m%d" setvar="contents_time_ymd"$>
    <mt:If name="contents_time_ymd" lt="20080401">
        <$mt:EntryDate format="%Y.%m.%d"$> <$mt:EntryTitle$>
    </mt:If>
</mt:Entries>


1行目のモディファイア「lastn="0"」はすべての記事の出力をするという意味です。「lastn」は「最新の記事●件」を表すもので、通常は値に1以上を入れるので、特殊な書き方ですね。

2行目で記事毎の作成日時を「%Y%m%d」の形式、つまり「20150314」の様な「年4桁+月2桁+日2桁」の形式を変数に入れます。

3行目で変数が「20080401」より小さいかどうかを判定します。「20080401」は2008年度の最初の日である「2008年4月1日」を表しています。「20080401」より小さければ2007年度以前であると言えます。

4行目で要件のように出力します。…って要件の図だと月が1桁だったり2桁だったり不安定ですね…。今回は月日は2桁に固定しました。


3行目の判定では「lt」ではなく「gt」「eq」などを使用することができるので、2007年度より後の記事の出力や、2008年度が始まった日の記事の出力もできますね。



●問題点と対策

このテンプレートコードは、すべてのエントリー記事を読み出すので、記事数が多いと再構築の時間が掛かる(負荷が高くなる)可能性があります。いわゆる力業というものですね。


今回の要件を考えてみると、特性として2007年度の記事一覧は更新されることは基本的にはないので、この部分はモジュールとして別にしておき、モジュールのキャッシュを設定しておくと、無用な再構築が行われなくて良いと考えます。

ウェブサイトの設定のモジュール設定で「モジュールのキャッシュ」にチェックをつけて、モジュールのページで有効期限を長めに設定(99日とか)にしておけば良いでしょう。

また、サーバーサイドインクルードも「PHPのインクルード」か「ApacheのSSI」などにしておき、サーバーサイドインクルードされるようにモジュールを設定しておけば、更に負荷が下がると考えます。

20150314-MovableTypeで2007年度以前の記事を表示-02

20150314-MovableTypeで2007年度以前の記事を表示-03


それでは、よいMovable Typeライフを。



●関連ページ

カテゴリー:

このページをぜひシェアしてください