この流れで、具体的にいろいろ CFormatter を拡張したものを作ってみたいと思います。まずは簡単に文字を太くするだけのものを作成。 次に CGridView と CDetailView でも使えるようなので CDetailView で試してみます。適当にデータベーステーブルを作って Gii でモデルと CRUD を作ります (コントローラの accessRules() は今はいらないので削除) 。
続いて CDateFormatter::formatDatetime() を使って、数値型 (int) で保存し create_time カラムを独自の日本語表記で表示してみたいと思います。
1334755524 を 2012年04月18日(水) 22時25分 で表記したいとします。
とりあえず、まず CDateFormatter::formatDatetime() がどんな風に日付を表示するかチェックします。以下は、日本語、英語、中国語でのいつくかの表記パターン。
国によって表記が全く違うのがわかります。あと Yii のバージョンが 1.1.10 時点では日本語表記部分で、日付と時間がくっ付いているバグもいくつかあります (1.1.11 以降では日本語表記のバグは修正される模様です) 。とりあえず、デフォルトでは 2012年04月18日(水) 22時25分 と表記できないようなので、コアの i18n の日本語ファイルを上書きする形で、上記の日付のような表記にしてみたいと思います。
やり方の順序
- framework/i18n/data/ja.php と ja_jp.php を /protected/i18n/data 下にコピペ
- en 関係と、その他、国際化するであろう、ファイルもコピペ
- /protected/main/config.php に 'localeDataPath' => 'protected/i18n/data/' と書く
コメントアウトしてあるものはデフォルトの値です。これで
echo Yii::app()->dateFormatter->formatDatetime($time, 'full', 'short');
と書いている箇所は 2012年04月18日(水) 22時25分 と表示されるはずです。
最後に目的を達成した日付表示を MyFormatter に付け足すと CGridView や CDetailView でも使えるようになるので、便利です!また CGridView や CDetailView ではなく直接表示したい場合は記述が長くなるので Yii Wiki: Use shortcut functions to reduce typing を使って短く記述できるようにすればOKかなと思います。
0 件のコメント:
コメントを投稿