Top > PHP > CakePHP > CakePHPで区分値の表示を簡単にするためのヘルパークラス SectionHelper

RIGHT:&tag(CakePHP,Helper);
#contentsx

* CakePHPで区分値の表示を簡単にするためのヘルパークラス [#lbd8b564]
* CakePHPで区分値の表示を簡単にするためのヘルパークラス SectionHelper [#lbd8b564]
区分値とは、データベースで区分(フラグ)のような項目の事です。

例えば、User(会員)モデルに、status(状態)とsex(性別)、メルマガ配信(magazine)というフィールドがある場合を想定します。
statusが、0の場合は入会、1の場合は退会、
sexが、0の場合は男性、1の場合は女性
magazineが、1の場合は希望する、0の場合は希望しない
という設計が考えられます。
この時、"User/status"の値が1の場合は、画面上に"退会"と表示したいと思います。
もちろん、データベースにマスターとして登録する方法がありますが、全ての区分値をマスターで管理するのがベストではないかもしれません。
そこで、モデルクラスに予め、区分値と名称のペアを連想配列としてセットしておきます。

 class User extends AppModel
 {
   var $name = 'User';
 
   var $sections = array(
     'status' => array(
       '0' => '入会',
       '1' => '退会',
     ),
     'sex' => array(
       '0' => '男性',
       '1' => '女性',
     ),
     'magazine' => array(
       '0' => '希望しない',
       '1' => '希望する',
     ),
   );
 }

そして、app/app_model.php に下記のメソッドを作っておいてください。

 class AppModel extends Model
 {
   function sectionItems($name) {
     return $this->sections[$name];
 }

これで準備は、完了です。
コントローラで、このヘルパーが使えるようにします。
 var $helpers = array('Section');
全てのコントローラで使いたい場合は、app_controller.phpに設定するのも良いでしょう。

ビューのテンプレート上から、セレクトボックスやラジオボタンに区分値を表示することができます。

** セレクトボックスの場合 [#gb2da2f1]
 <?php echo $section->selectTag('User/status', null, null, null, null, false); ?>
と記述します。これは、標準のHtmlヘルパーのselectTagメソッドと同じ仕様です。
-2番目の引数にnullをセットすると、自動的に区分値の値をモデルから取得します。
-3番目の引数にnullをセットすると、ビューのデータに格納されている値を使用します。

** ラジオボタンの場合 [#h23e8833]
 <?php echo $section->radio('User/sex', null, null, null, false); ?>
と記述します。これも、標準のHtmlヘルパーのradioメソッドと同じ仕様です。
-2番目の引数にnullをセットすると、自動的に区分値の値をモデルから取得します。

** チェックボックスの場合、 [#gc001e7b]
 <?php echo $section->checkbox('User/magazine', null, null, false); ?>
と記述します。これも、標準のHtmlヘルパーのcheckboxメソッドと同じ仕様です。
但し、labelタグを横に表示して区分値の名称を表示します。
チェックボックスでは、$sectionsで設定する区分値が'0'のものをチェックOFF状態として扱います。
** 区分値の表示 [#ac02b7aa]
そして、もう1つの使い方があります。
それは、区分値を表示するだけの場合です。
例えば、bake.phpで作られたindex.thmtl(一覧表示)、view.thtml(詳細表示)では、値を表示するだけです。
データベースに格納されている値をそのまま(0とか1とか)表示しても意味がわかりませんので、
ビューのテンプレートで下記のように記述します。
 <?php echo $section->sectionName('User/status', $item['User']['status']) ?>
これで、statusの値が"1"の場合は、"退会"と表示されるようになります。

** 注意 [#j558d41d]
このヘルパークラスは、Htmlヘルパークラスに委譲することで、同様のメソッドを拡張しています。

** ダウンロード [#fef5d747]
#ref(Section.php)
をダウンロードして、app/views/helpers フォルダにコピーしてください。

** 関連ページ [#wcc4093e]
#lsx

#newpage_subdir()

** コメント [#x63b52ff]
#comment

    ホーム 一覧 単語検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS