top

Smartyによる新着表示

新着エントリーなどに一定期間newマークをつけるカスタマイズはいろいろありますが、よく使われるのがjavascriptですね。が、javascriptは環境依存になることがあるので、PHPなどを使ってどの環境でも確実に表示出来るようにしたいという考え方もあると思います。
拡張子をphpにしてPHPコードを入れる方法は検索すればいろいろ見つかると思いますが、ここではダイナミック・パブリッシングでSmartyを使う方法を思いついたので覚え書きしてみました。書き方はいろいろあると思いますが、今回はMTタグと同様の書き方をしてみたので、PHPやプログラムが分からない人でも理解しやすいのではと思います。

  • ダイナミック・パブリッシングが動くどのバージョンでも使えます。
  • PHPで動かしているので、環境に依存することなく表示出来ます。
  • 拡張子は.htmlのままで動きます(.phpに変更する必要はありません)。

1.新着表示を使いたいテンプレートをダイナミック・パブリッシングにします。

2.記述例:最近のエントリー一覧に新着マークを付ける
赤字の部分で過去何日分newマークをつけるか調整します。1日なら24、2日間なら48、3日間なら72、1週間なら168にします。
青字の部分がnewマークになります。画像にする場合はnewの部分を<img src="画像のアドレス" />に変えます。

{{capture name="oldday"}}{{$smarty.now-24*60*60|date_format:"%Y%m%d%H"}}{{/capture}}
<ul>
<MTEntries lastn="10">
{{capture name="newday"}}<$MTEntryDate format="%Y%m%d%H"$>{{/capture}}
<li>
<a href="<$MTEntryPermalink$>"><$MTEntryTitle$></a>
{{if $smarty.capture.newday gt $smarty.capture.oldday}}new{{/if}}
</li>
</MTEntries>
</ul>

説明とか:
最初のcapture nameで1日前の日時を取得してます。captureはMTタグのMTSetVarBlockと同じ使い方が出来ます。
同様にエントリーの投稿日時を求め、{{if}}で1日前の日時と比較し、投稿日時が1日前の日時より大きければnewを表示するようにしています。Smartyの{{if}}も<MTIf>と同じに使えます。ダイナミックなのでリアルタイムに動きます。

例は「最近のエントリー」ですが、カテゴリやコメントなどいろいろなところに応用できると思います。

*モジュールやウィジェット内で使っていて動的ファイルにだけ適用したい場合は、<MTIfDynamic>~</MTIfDynamic>で囲めばいいと思います。

関連エントリ
javascript版:新着エントリ・カテゴリ等に一定期間new表示をする
MTタグのみ版:一定期間new表示をする(MTタグ版)