経過年数を動的生成(Smarty版)

Smartylogoorange
blogやウェブサイトにSmartyというテンプレートエンジンを使ってる方も多いと思います。あれは便利ですね。
慣れると元には戻れません。
特に変化のあまり必要ない静的なコンテンツや最初に表示する内容が決まっているページは、毎回コンパイルしないでキャッシュした方のファイルを使うこともできるので、とても快適です。特に後者でデータべースから内容を拾って表示するような場合は、手にとるように速くなったのが分かります。
でもいくら静的だったりデフォルト表示でも、ここは変えたいなあと思う場所があります。
blogみたいに執筆日時が明確だと特に気にならないのですが、TIPSとかアーカイブとか、資料のようにして展開しているページの場合、ついうっかり○年前と書くと、年が変わったときに整合がとれなくなってしまいます。
そんなとき、Smartyは任意の場所のみ、キャッシュファイルを使わず常にリアルタイムに動的生成してくれるという機能を補完しています。
すごい!
なので、その機能を使って、常に整合のとれた経過年数を返してくれる簡単な関数をつくってみました(キャッシュを使わなくても有効です)。
■ロジックファイル側:
// 現在の年から当時の年をひいて、相対経過年数を動的に返す
function insert_relativeYear( $value ) {
$relativeYear = (int)( date(“Y”) – $value[‘when’] );

if ( ! $value[‘intFlg’] ) {
if ( $relativeYear === 0 ) {
$relativeYear = “今年”;
} elseif ( substr( $relativeYear, 0, 1 ) === “-” ) {
switch( substr( $relativeYear, 1 ) ) {
case “1”:
$relativeYear = “来年”;
break;
case “2”:
$relativeYear = “再来年”;
break;
default:
$relativeYear = mb_convert_kana( substr( $relativeYear, 1 ), “N” ) . “年後”;
}
} else {
switch( $relativeYear ) {
case “1”:
$relativeYear = “去年”;
break;
case “2”:
$relativeYear = “一昨年”;
break;
default:
$relativeYear = mb_convert_kana( $relativeYear, “N” ) . “年前”;
}
}
}
return $relativeYear;
}
?>
■テンプレートファイル側:
{insert name=”relativeYear” when=半角で西暦年 [ intFlg=真偽 ]}
■使用例:
今年が2008年の場合――
{insert name=”relativeYear” when=2006}
返り値: 一昨年 (全角string)
{insert name=”relativeYear” when=2005}
返り値: 3年前 (全角string)
{insert name=”relativeYear” when=2007 intFlg=true}
返り値: -1 (半角integer)
{insert name=”relativeYear” when=2010 intFlg=true}
返り値: 2 (半角integer)
まーーー実に些細なことなんですが、書き換えなくて済むのはよいですね。以前は年を越えるたびに直してました。
もちろんはじめから西暦表示していればこんなの必要ないじゃんという話なのですが、ここらへんはそのサイトの性格とかになってきます。やっぱり口語的に「去年」とか書きたいひとにはよいのではないでしょうか。
経過時間を年ではなく、月とか日にち単位で表示する関数も、こんなノリでできちゃいますね。

2件のコメント

  1. さくり

    何新年から呪文唱えているのですか?
    さくりには呪文としか見れません(泣)
    何かおもろい事書いて~☆
    笑いたい。
    あ、人任せはいけませんね(泣)
    妄想して空見上げて笑います♪

  2. そーるわん

    呪文だぜ。メガンテ系。俺も瀕死です。

Comments are closed.