smartyでよく使いそうな自作プラグイン2-カテゴリ・ジャンルにかかわる常套手段

| | コメント(0) | トラックバック(0)
自作していて、よく使うsmartyプラグインの第2弾。
今回は、カテゴリ・ジャンルのような、たいがいのサイトで存在する概念で、よく検索の条件の一つになったりする要素をテーマにしてみる。
こういうのは、まず、コード化されることがほとんどで、view側でselectボックスしたかったり、model側でエンコード・デコードしたかったりといろんなところに出てくるケースが多い。
そんなときに僕がよく使う自分の中での常套手段。こういうの「常套」って使うのかわかんないけど。




 余談ですけど、チーム開発でよくありがちなのが、コードマスタ的な定数クラスが複数できてたり、コードマスタをDBからとってくるのがめんどくさかったのかデコード処理をべた書きしてたりという惨状。マスタを書き換えても反映されない箇所とかあったりしてね。
ちなみに、こういうのは起きるのが普通で、起きないのはリーダークラスが優秀なチームと思っていいと思う。
「そんなのあたりまえだろ」という人、僕もそう思いますが最近の"普通"はそのレベルに達してないように思います。
「んなことねーよ。リーダーが管理できねーか ら、俺がカバーしてるんだよ」という人、それはあなたがリーダーです。
「その割りには給料が少ねーよ」という人、それはシラネーヨ。

さて、話を戻して今回は、クイズのジャンルを例にしてみる。
また、とーぜんのようにZend Frameworkを使ってる前提。たぶん関係ないけど。

簡単に構成を話すと、コードマスタを定数クラスにまとめて、smartyのプラグインでは、それを元にセレクトボックスなりラジオボタンなりを作る処理を書きましょうという感じ。
ということで、定数クラスであるところのConst.phpとsmartyプラグインであるところのfunction.html_genre.phpが今回の登場人物。

Const.php
    public static function getGenreArray(){
        return array(
            '1' => array('ja' => 'スポーツ', 'en' => 'sports'),
            '2' => array('ja' => '歴史', 'en' => 'History'),
            '3' => array('ja' => 'アニメ&ゲーム', 'en' => 'animation & games'),
            '4' => array('ja' => 芸能', 'en' => 'Entertainment'),
            '5' => array('ja' => '雑学', 'en' => 'General knowledge')
        );
    }

こんな感じで配列にしておく。なぜか多言語対応を意識。
この配列のようなデータはDBに格納したい、という人は、DBにしまっておいて、ここでは、DBから取り出してキャッシュするような処理を書いておけばいいと思う。
そのうちそういう処理を書くことになるので、書いたらまたアップします。

そして、検索で使用するときにselectタグのoptionタグ生成をするsmartyプラグイン
function.html_genre.php
<?php
function smarty_function_html_genre($params, &$smarty){
    $selected = $params['selected'];
    $locale = $params['locale'];
    if(!$locale){
        $locale = 'ja';
    }
    require_once dirname(__FILE__).'/../models/Const.php';
     $array = Const::getGenreArray();
   
    $_output = '';
   
    foreach($array as $key => $value){
        $_output .= '<option value="'.$key.'"';
        if($key == $selected){
            $_output .= '  selected="selected"';
        }
       
        $_output .= '>'.$value[$locale]."</option>\n";
    }
    return $_output;
}

こんな感じでviewに組み込む。
hoge.tpl
<select name="genre" id="genre" size="1"><option value="" ></option><{html_genre selected=$p.genre}></select>

もしかしたら、viewでデコードだけしたこともあるかもしれない。入力画面→確認画面のときとかに。
そういう場合はmodifierを作る。
modifier.genre.php
<?php
function smarty_modifier_genre($code, $locale = 'ja')
{
    require_once dirname(__FILE__).'/../models/Const.php';
     $array = Const::getGenreArray();
     $text = $array[$code];
     return $text[$locale];
}

<{$code|genre}>みたいにして使う。

こんな感じで、特にコード値との対応をとるようなものは上記の応用で手軽にviewとの連携ができるのと、DBなりConstのハッシュなりのマスタの一元化が保てるので、最近はこの組み合わせをよく使っている。
普通はどうしてるのかな。




トラックバック(0)

このブログ記事を参照しているブログ一覧: smartyでよく使いそうな自作プラグイン2-カテゴリ・ジャンルにかかわる常套手段

このブログ記事に対するトラックバックURL: http://hirop0164.s326.xrea.com/mt/mt-tb.cgi/250

コメントする


画像の中に見える文字を入力してください。

ブックマーク

はてなブックマークに追加 Yahoo!ブックマークに登録 del.icio.us に登録 ライブドアクリップに追加 Google Bookmarks に追加

Ajax: 2009年5月: 月別アーカイブ

このブログ記事について

このページは、ぴろしが2009年1月30日 20:11に書いたブログ記事です。

ひとつ前のブログ記事は「smartyでよく使いそうな自作プラグイン1-指定文字数を超えたら...」です。

次のブログ記事は「Zend Frmaeworkで携帯サイトを作る(PCサイトを作った後で)」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。