読者です 読者をやめる 読者になる 読者になる

毎日がひとりオフ

ネットの話題とITと音楽。

再構築時、一定日数内のエントリーに対して「New」アイコンを出力させるMTモジュール

よくWebサイトで見かける、記事一覧上の「NEW」というアイコンを出すアレ。
へいへいおじょうさんよく来たねちょいとこの記事みてくれよ的な注目を引くために設置するアレ。

Movable Typeの案件で、お客さんにうっかり「*日以内のみNewとか出来るっすよ」と軽ーく回答してしまったのだけれども、なんとMTDateやMTEntryDateなどの日付に関するタグにおいては、MTIfによる評価や、MTSetVarのopモディファイアによる操作が出来ないらしい。
色々書籍やサイトを回ってみたものの、どうも他の人もこの点には苦労しているらしく、MTからJavaScriptのソースを吐き出して、クライアント側で処理させるといった方法を取っているケースが何件か。

ただ当然そのやり方だと、JS切っていれば表示できないわけで、しかもJSファイルをわざわざ準備しないといけなかったりで、あまりスマートなやり方に思えない。
というわけで、鼻水たらしながら、ごり押しで「*日のみNewアイコンを表示させるモジュール」を書いてみた。
やり方としては、

  • 再構築日・エントリーの公開日それぞれを日付フォーマットから数値に変換
  • 数値変換したエントリー公開日に+x
  • 数値変換した再構築日・エントリー公開日を比較して、再構築日のほうが小さければ出力

という方法を取った。
ただし面倒くさかったため、うるう年には対応していないのでご容赦を。

<mt:ignore><!-- ################################################################
modImageEntryNew
新着記事へのNewアイコン表示モジュール 0.1
################################################################ --></mt:ignore>

<mt:templateNote value="NEWアイコンを表示させる日数の範囲" />
<mt:setVar name="numVisibleIconDay" value="20" />


<mt:templateNote value="変数の初期化" />
<mt:setVar name="numRebuildDate" value="" />
<mt:setVar name="numRebuildDateYear" value="" />
<mt:setVar name="numRebuildDateCount" value="" />
<mt:setVar name="numPostDate" value="" />
<mt:setVar name="numPostDateYear" value="" />
<mt:setVar name="numPostDateCount" value="" />


<mt:templateNote value="再構築日取得" />
<mt:setVarBlock name="numRebuildDate"><mt:date format="%j" /></mt:setVarBlock>
<mt:setVarBlock name="numRebuildDateYear"><mt:date format="%Y" /></mt:setVarBlock>

<mt:templateNote value="再構築日の数値変換" />
<mt:setVar name="numRebuildDateCount" value="$numRebuildDateYear" />
<mt:setVar name="numRebuildDateCount" value="365" op="*" />
<mt:setVar name="numRebuildDateCount" value="$numRebuildDate" op="+" />

<mt:templateNote value="post日の取得" />
<mt:setVarBlock name="numPostDate"><mt:entryDate format="%j" /></mt:setVarBlock>
<mt:setVarBlock name="numPostDateYear"><mt:entryDate format="%Y" /></mt:setVarBlock>

<mt:templateNote value="post日の数値変換" />
<mt:setVar name="numPostDateCount" value="$numPostDateYear" />
<mt:setVar name="numPostDateCount" value="365" op="*" />
<mt:setVar name="numPostDateCount" value="$numPostDate" op="+" />

<mt:templateNote value="エントリー投稿日にアイコン表示日数を加算" />
<mt:setVar name="numPostDateCount" value="$numVisibleIconDay" op="+" />

<mt:templateNote value="newアイコンの出力処理" />
<mt:if name="numRebuildDateCount" le="$numPostDateCount">
	<img src="icon_new.gif" alt="新着ニュース" />
</mt:if>

こいつをモジュールとして保存し、MTEntries内で呼び出してやればOK。

モジュールを書いた感想

余計なソースを吐かなくなったものの、なんかサーバー負荷上がってる気がしなくもない。
ていうかPerl覚えてプラグイン作ったほうがきっと簡単だよ!><