MT記事の更新表示をphpで付ける

例えば、Movable Typeの新着記事リスト中や、カテゴリ一覧内でどのカテゴリに新着記事があるのかなど、phpを利用して一定期間「update」と自動的に表示させる方法。

  • 参考 : PHPで新規エントリに「NEW」イメージを期間表示させる - Movable Type 備忘録 (サイト閉鎖)

表示したい頁の拡張子がhtmlやhtmではなく、「php」であることが前提となる。

1. htmlソースの<head>~</head>の間に記述

日数(例では50日間)や文字表記や色(update)は適宜変更。print以下でタグを記述する際、「"」の前に「\」マーク(エスケープ)を付けないとエラーになる。尚、「update」の後に空白を入れている。

<?php
function print_new($entry_date,$days=50)
{
$result=date("Ymd", mktime( 0,0,0,date("m") ,date("d") - $days, date("Y")));
if ( $entry_date >= $result ) print "<span style=\"color:#ff0000;\">update</span> ";
}
?>

尚、解説サイトの通り <head>~</head>の間、としたが、表示させたい箇所の前ならば何処でも動く。

2. 「update」と表示させたい箇所に記述

Movable Type利用の場合、記事の更新日を「20100303」という形式のタグで書き出し、その50日後まで「update」を表示。

<?php print_new("<mt:EntryDate format='%Y%m%d'>",50); ?>

テンプレートだと、例えばこんな感じ。新着記事は

<ul><mt:Entries  lastn="5">
<li><?php print_new("<mt:EntryDate format='%Y%m%d'>",50); ?><a href="<mt:EntryPermalink>"><mt:EntryTitle></a></li></mt:Entries>
</ul>

カテゴリ一覧の場合

<ul><mt:TopLevelCategories>
<li><a href="<mt:CategoryArchiveLink>"><mt:CategoryLabel> (<mt:CategoryCount>)</a><?php print_new("<mt:Entries lastn="1"><mt:EntryDate format='%Y%m%d'></mt:Entries>",50); ?></li></mt:TopLevelCategories>
</ul>

ブラウザではこのように表示される。

8276.gif

htmlソースには現れないが組み込まれた関数により、50日が経過すると「update」が表示されなくなる。ページの再構築は不要。