Single Article

新着エントリーやカテゴリーにNewマークを付ける

mtcategory.gif
MTの最近のエントリー、カテゴリー、トラックバックなどに’New!’マークを付ける方法を、PHPで考えてみた。

Javascriptで表示する手もあるが、PHPを使う理由は、(1)スクリプトが簡単であること、(2)Javascriptの場合はクライアントマシンの時間との比較になるので、例えば海外などでは表示時間が長くなるなどの問題(?)があるから。

まずスクリプトの設置方法を説明し、あとから解説する。

私はウィジェットを利用しているので、まず最近のエントリーウィジェットを編集する。赤と緑が追加する部分。 緑字の「3」はエントリーから「3日」以内を表し、後の「images/new.gif」は表示する画像(文字でもいいけど)のパス。

「widget: 最近のエントリー」

<div class=”module-archives module”>
<h2 class=”module-header”>最近のエントリー</h2>
<div class=”module-content”>
<ul class=”module-list”>
<MTEntries lastn=”10″>
<li class=”module-list-item”><a href=”<$MTEntryPermalink$>”><$MTEntryTitle$></a><?php if((floatval(date(”Ymd.His”)) - floatval(”<$MTEntryDate language=’en’ format=’%Y%m%d.%H%M%S’$>”)) <3) print “<img src=\”<$MTBlogURL$>images/new.gif\”>”;?></li>
</MTEntries>
</ul>
</div>
</div>

カテゴリーに関しても上記と同じ。ただし緑字の部分を追加している。

「widget: カテゴリー」

<MTIfArchiveTypeEnabled archive_type=”Category”>
<div class=”module-categories module”>
<h2 class=”module-header”>カテゴリー</h2>
<div class=”module-content”>
<MTTopLevelCategories><MTSubCatIsFirst>
<ul class=”module-list”></MTSubCatIsFirst>
<MTIfNonZero tag=”MTCategoryCount”>
<li class=”module-list-item”><a href=”<$MTCategoryArchiveLink$>” title=”<$MTCategoryDescription$>”><MTCategoryLabel>(<$MTCategoryCount$>)</a>
<?php if((floatval(date(”Ymd.His”)) - floatval(”<MTEntries lastn=”1″><$MTEntryDate language=’en’ format=’%Y%m%d.%H%M%S’$></MTEntries>“)) < 3) print “<img src=\”<$MTBlogURL$>images/new.gif\”>”;?>
<MTElse>
<li class=”module-list-item”><MTCategoryLabel>
</MTElse>
</MTIfNonZero>
<MTSubCatsRecurse>
</li>
<MTSubCatIsLast></ul></MTSubCatIsLast>
</MTTopLevelCategories>
</div>
</div>
</MTIfArchiveTypeEnabled>

他も基本的に上記のスクリプトと同様、<$MTEntryDate>の代わりに<$MTCommentDate>を使うだけなので、省略する。下記に最近のコメントの場合の追加する行だけ載せておく。

<?php if((floatval(date(”Ymd.His”)) - floatval(”<$MTCommentDatelanguage=’en’ format=’%Y%m%d.%H%M%S’$>”)) < 3) print “<img src=\”<$MTBlogURL$>images/new.gif\”>”;?>

ちなみにトラックバックの場合は<$MTPingDate>を使う。

さて、スクリプトの解説だが、基本的にPHPのスクリプトは1行だけである(以下)。

01 <?php
02 if( (floatval(date(”Ymd.His”))
03 - floatval(”<$MTEntryDate format=’%Y%m%d.%H%M%S’$>”)) < 3)
04 print “<img src=\”<$MTBlogURL$>images/new.gif\”>”;
05 ?>

02:
date()関数は(サーバの)現在時刻をフォーマットして返す。これを浮動小数点の形にして例えば「20070117.232400」の様に表現する。なぜ「20070117232400」のような整数にしないかは、PHPの動いているサーバが32bitコンピュータの場合の整数の範囲を超えるからである。

03:
同様にMTEntryDateのエントリー日時をformatを利用して同じ形にし、浮動小数点の形に変換した上で、現在時刻と比較、3(=3日)より少なければ、次の行を実行。
なお、MTの日付フォーマットについては以下を参照。
Movable Type 3.3 マニュアル: 日付フォーマット・アトリビュート

04:
imgタグでgifイメージを表示させるHTMLを出力。

以上である。比較的分かり易いと思うので、例えばエントリーのフッター部分のコメント数のところにNewマークを出したり、いろいろ応用できるのではないか。
PHPで他のちょっとしたカスタマイズをしていこうと思う。

Related Posts

Trackback URL

Post a Comment

Your email is never published nor shared.