kazpgmの日記

『プログラム自動作成@自動生成』作成の日記

TOOL更新_今日はエレメントクラス(シングルトン)

TOOL更新_今日はエレメントクラス(シングルトン)。まだ実験中なのでコーディング規約には沿っていないけど、徐々に、このページを直接直していくことにする。
・コンスタント値を配列で持つ。あとでロジックを追加(コンスタントテーブルを作ってそこから値をとってくるなど、や、プログラムからコンスタントを追加する、変更するなど)するときのためにシングルトンにした。たぶん、あとあとハンドリングしやすいと思う。

■使い方はこんな感じ

・AppSmartyPlugin.php (Smartyのプラグイン)
/**
 * -------------------------------------------------------------
 * Smarty {get_element} function plugin
 *
 * Type:     function<br>
 * Name:     get_element<br>
 * Input:<br>
 *           - elename    コード一覧(AppElements)のコード名
 *           - value      コード値
 *           - idx        elements_idx ('0':日本語、'1':英語) デフォルト='0'
 *           - tdKbn      テーブルTD区分 ('TD':テーブルTD、 以外(指定なしを含む))
 * Purpose:  AppElementsからコード値を取得しエスケープして戻します。
 * @param array
 * @param Smarty
 * @return string
 * @uses smarty_function_escape_special_chars()
 * -------------------------------------------------------------
 **/
function smarty_function_kaz_element($params, &$smarty)
{
    require_once $smarty->_get_plugin_filepath('shared','escape_special_chars'); // エスケープ処理

    $elements = AppElements::getInstance();    // コード一覧

    if( isset($params['elename']) == false){
        $smarty->trigger_error("kaz_element: missing 'elename' parameter");
        return;
    }
    if( array_key_exists('value', $params) == false){
        $smarty->trigger_error("kaz_element: missing 'value' parameter");
        return;
    }
    if( isset($params['idx']) == false){
        $params['idx'] = '0'; // 日本用
    }
    if( isset($params['tdKbn']) == false){
        $params['tdKbn'] = ''; // テーブルTD以外
    }
    if(mb_strwidth($params['elename']) == 0 || 
       mb_strwidth($params['value'])   == 0){ // パラメータに値がない場合
        $rtn = "";
    } else {
        $rtn = smarty_function_escape_special_chars(
               $elements->elements[$params['elename']][$params['value']][$params['idx']]);
    }
    if (strtoupper($params['tdKbn']) == 'TD' && 
        (is_null($rtn) || $rtn == "")){ // テーブルTDの場合かつ、値が空白のとき
        return "&nbsp;";
    }
    return nl2br($rtn);
}

・logininfoListView.html (smartyのtemplates)
  {{kaz_element elename='LOGIN_TYPE' value=$vals.login_type 
    idx=$o.c_elements_idx tdKbn='TD'}}

■エレメントクラス(シングルトン)の例はこれ。

<?php /* プルダウン・チェックボックス等で使用する要素の定義 */
//  =============================================================
//  2009 kaz PHP自動作成お助けTOOL.(http://kazpgm.ddo.jp/) Start
//  修正BSDライセンス。
//  =============================================================
class AppElements {
    public $elements = null;
    // シングルトンオブジェクトを格納する変数
    private static $_singleton = null;

    // コンストラクタをprivateにして直接newできないようにしています。
    // 「クラス名::getInstance();」を使用してください。
    // 「new クラス名();」だと「Fatal error: Call to private クラス名::__construct() ・・・」になります
    private function __construct() {
    }

    // インスタンスを生成する
    public static function getInstance() {
        if (AppElements::$_singleton == null) {
            AppElements::$_singleton = new AppElements();
            AppElements::$_singleton->initElements();
        }
        return AppElements::$_singleton;
    }

    private function initElements(){
        $this->elements = array(
            // ログイン権限
            'LOGIN_TYPE' => array(
                '1'  => array('Super管理者','SuperAdmin'),
                '2'  => array('管理者','Admin'),
            ),
            // 有効フラグ
            'YUKO_FLG' => array(
                '1'  => array('無効','Invalid'),
                '2'  => array('有効','Effect'),
            ),
            // 有効/無効データ
            'DELDT_FLG' => array(
                '1'  => array('無効のみ',''),
                '2'  => array('有効のみ',''),
            ),
            // 公開区分
            'OPN_KBN' => array(
                '1'  => array('公開','open'),
                '2'  => array('非公開','closed'),
            ),
            // 都道府県
            'CITY' => array(
                '1'  => array('北海道',''),
                '2'  => array('青森県',''),
                '3'  => array('岩手県',''),
                '4'  => array('宮城県',''),
                '5'  => array('秋田県',''),
                '6'  => array('山形県',''),
                '7'  => array('福島県',''),
                '8'  => array('茨城県',''),
                '9'  => array('栃木県',''),
                '10'  => array('群馬県',''),
                '11'  => array('埼玉県',''),
                '12'  => array('千葉県',''),
                '13'  => array('東京都',''),
                '14'  => array('神奈川県',''),
                '15'  => array('新潟県',''),
                '16'  => array('富山県',''),
                '17'  => array('石川県',''),
                '18'  => array('福井県',''),
                '19'  => array('山梨県',''),
                '20'  => array('長野県',''),
                '21'  => array('岐阜県',''),
                '22'  => array('静岡県',''),
                '23'  => array('愛知県',''),
                '24'  => array('三重県',''),
                '25'  => array('滋賀県',''),
                '26'  => array('京都府',''),
                '27'  => array('大阪府',''),
                '28'  => array('兵庫県',''),
                '29'  => array('奈良県',''),
                '30'  => array('和歌山県',''),
                '31'  => array('鳥取県',''),
                '32'  => array('島根県',''),
                '33'  => array('岡山県',''),
                '34'  => array('広島県',''),
                '35'  => array('山口県',''),
                '36'  => array('徳島県',''),
                '37'  => array('香川県',''),
                '38'  => array('愛媛県',''),
                '39'  => array('高知県',''),
                '40'  => array('福岡県',''),
                '41'  => array('佐賀県',''),
                '42'  => array('長崎県',''),
                '43'  => array('熊本県',''),
                '44'  => array('大分県',''),
                '45'  => array('宮崎県',''),
                '46'  => array('鹿児島県',''),
                '47'  => array('沖縄県',''),
            ),
            // ソート順
            'sort_order' => array(
                'ASC'  => array('昇順','ASC'),
                'DESC' => array('降順','DESC')
            ),
        );

        // 「年」のプルダウン
        $this->elements['years'] = array();
        foreach(range(2007, date('Y')+1) as $y) {
            $this->elements['years'][$y] = array($y, $y);
        }

        // 「月」のプルダウン
        $this->elements['months'] = array();
        foreach(range(1, 12) as $m) {
            $this->elements['months'][$m] = array(sprintf('%02d', $m), sprintf('%02d', $m));
        }

        // 「日」のプルダウン
        $this->elements['days'] = array();
        foreach(range(1, 31) as $d) {
            $this->elements['days'][$d] = array(sprintf('%02d', $d), sprintf('%02d', $d));
        }
    }
}
//  =============================================================
//  2009 kaz PHP自動作成お助けTOOL.(http://kazpgm.ddo.jp/) End
//  修正BSDライセンス。
//  =============================================================

その他:AppHtmlUtilクラスは自作のHtmlラジオボタン、リストボックス作成クラス。後でのせよう。
エレメント[0]は日本語、エレメント[1]は英語を登録している。使うときは'0'、'1'を切り替えて日本語、英語を切り分けている。

http://kazpgm.ddo.jp/

2010/01/20 23:00-01:30
6/10 20:00-20:30 viewをsmartyにした。