« 2007年12月 | トップページ | 2008年4月 »

2008年1月20日 (日)

友達は宇宙人

昔、友達とやんちゃ帰りに車に乗ってたときのことだ。
もう夜も遅くて、ヘロヘロながら、ふと車の外を見たら、遠く方の方になんか変なのがあって、なにあれ?UFO?て流れになって、運転してるその友達に「車をとめて」と頼んだら、怒られた。
「UFOなんかいねえーよ」って怒られた。なんか強い感じだったので、その場はもうなし崩しに「そうだよ。。あれはUFOじゃないよ。。UFOなんていないよ。。ごめんなさい。。」みたいになって車内の雰囲気は元栓が抜けたみたいになった。もうそれ以降なんとなく誰もそのことは口にしなかった。

別の席で、ふとしたはずみで当時の話になって、なんであんときあんなに怒ってたの?ということになった。いくらなんでもあんなに怒らなくてもいいじゃん。
なんか怪しいよね、という声まであがった。

あげたのは僕だ。あげざるを得ない。

別の友達は、一緒に電車に乗っていたら、その彼が見知らぬひとと、急に分かり合った話をしてどっかの駅で降りていったと言う。そんな話まであった。


なので思い切って、本人にどうしてあの車の帰り道、あんなに怒ってたのか聞いてみた。

全然覚えてなかった。
なにそれ?おもしろいねーと言って笑ってた。

でも最後に、最近おれ宇宙に興味あるよ、と言っていた。

なにそれ。

あやしい。


「最近おれ宇宙に興味あるよ」が、ずっと頭に残っている。

| | コメント (4) | トラックバック (0)

2008年1月 6日 (日)

経過年数を動的生成(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) | トラックバック (0)

« 2007年12月 | トップページ | 2008年4月 »