Posts tagged helper
CakePHP html ヘルパーでラジオボタンを表示する
0htmlヘルパーで radio ボタンを表示させるには下記のようにします。
下記の例では3つのラジオボタンを表示しています。
<?php echo $html->radio('Model/field', array('1'=>'option1','2'=>'option2', '3'=>'option3'), ' | ', array('onchange'=>'alert(this.value)'), false); ?>
表示される HTML は下記のようになります。
(実際には1行で出力されますが改行を入れています)
<input type="radio" name="data[Model][field]" id="field_1" onchange="alert(this.value)" value="1" />option1 | <input type="radio" name="data[Model][field]" id="field_2" onchange="alert(this.value)" value="2" />option2 | <input type="radio" name="data[Model][field]" id="field_3" onchange="alert(this.value)" value="3" />option3 |
radio メソッド
string radio(string $fieldName, arrray $options [,string $inbetween=null [,array $htmlAttributes=array() [,bool $return=false ]]])
- $fieldName
- name属性の値
- $option
- array(‘value’=>’表示名’);
value は value=”value” になり、表示名はラジオボタンの後ろに表示される文字名 - $inbetween
- ラジオボタンの間に表示される文字列
- $htmlAttributes
- html の属性 array(‘属性名’=>’値’)で指定する
- $return
- ヘルパーの自動出力を抑止する(参考:ヘルパーの出力を echo を使わずに出力する方法)
CakePHP ヘルパーの出力を echo を使わずに出力する方法
2※この投稿の方法はバージョン1.1 までしか使用できないようです。1.2 のソースを確認したところ、$html->input の$return パラメータはなくなっていました。/app/config/core.php に AUTO_OUTPUT という定数もなくなっていました。ご注意ください。
Cakephp のヘルパーを使用していて
<?php echo $html->input('Model/filed', array()); ?>
と書くところを
<?php $html->input('Model/field', array()); ?>
と echo を使用せずに出力するには
/app/config/core.php
AUTO_OUTPUT = true;
にすれば、自動的に出力するようになります。
私はつい echo を書き忘れてしまうので助かります。
ヘルパーのメソッドの $return パラメータを true にするとこの AUTO_OUTPUT を無効にすることもできます。
ただ、各メソッドによって、$return パラメータの位置がバラバラなので、書くときにはヘルパーのソースを確認する必要があるかと思います。
ちなにみに input の場合は
<?php $html->input('Model/field', array(), true); ?>
とすると自動出力を抑止できますので、上記は何も表示されなくなります。
CakePHP 日本語マニュアル
10章 ヘルパー
CakePHP HtmlHelper::tagValue のHTMLエスケープ処理
1view でモデルの値などを出力する際に
$html->tagValue("Model/hoge");
とすれと、HTMLエスケープ処理をしてくれるので便利です。
ただ、
CakePHP 1.1.15.5144以降はHtmlHelper#tagValueに注意 | Shin x blog
に書かれているように、CakePHP のバージョン1.1.15.5144 からエスケープするかのフラグが追加されたようです。
以前はエスケープしないを選択できなかったので、それはそれで不便な点もありました。
MOONGIFT ブログ ? CakePHP覚書(HTML Helpler)
しかし今回の変更で注意しなければいけないのは、デフォルトでエスケープされていたのがデフォルトでエスケープ処理されなくなったことです。
cake/libs/view/helpers/html.php
function tagValue($fieldName, $escape = false)
以前のようにエスケープ処理させるには
$html->tagValue("Model/hoge", true);
とする必要があります。
また、
ちなみに1.2.0.5147ではtagValueがdeprecatedになっており、代わりにvalueメソッドを使うようになるようです。
ということになるようです。
CakePHP ヘルパーからコンポーネントへのアクセス方法
1ヘルパーからコンポーネントへのアクセス方法が分からず
教えていただいたのでメモ。
例えば HogeComponent にアクセスしたいヘルパーに
$this->view->controller->HogeComponent->method();
というように書けば、HogeComponent の method にアクセスできる。
これで、ヘルパーがかなり使いやすくなりました。
CakePHP HTMLヘルパーで select タグを表示する
2HTML ヘルパーで select タグを表示したかったが、
マニュアルを見ても書かれていなかったので、調べたメモ
/cake/libs/view/helpers/html.php
を見ると selectTag というメソッドがり、
/** * Returns a formatted SELECT element. * * @param string $fieldName Name attribute of the SELECT * @param array $optionElements Array of the OPTION elements (as 'value'=>'Text' pairs) to be used in the SELECT element * @param mixed $selected Selected option * @param array $selectAttr Array of HTML options for the opening SELECT element * @param array $optionAttr Array of HTML options for the enclosed OPTION elements * @param boolean $show_empty If true, the empty select option is shown * @param boolean $return Whether this method should return a value * @return string Formatted SELECT element * @access public */ function selectTag($fieldName, $optionElements, $selected = null, $selectAttr = array(), $optionAttr = null, $showEmpty = true, $return = false) {
と定義されている。
よく指定しそうな引数は
- $fileName にフィールド名
- $optionElements に option タグに表示するもの配列
- $selected にデフォルトで選択状態にする $optionElements のキー
- $showEmpty は一番最初の option タグを空 <option value=”"> </option> で表示するか
コントローラで
$this->set('questions', array( '卒業した学校名', '好きなチーム名', 'ペットの名前', '両親の旧姓', '免許証の下4桁', '好きな映画の題名', ) );
として
<?php echo $html->selectTag('Post/question', $questions, null, null, null); ?>
とすればOK.
よく「選択してください」などの文言が option タグの先頭にある場合があるが、
そのように表示したい場合は
array( '選択してください', '卒業した学校名', '好きなチーム名', 'ペットの名前', '両親の旧姓', '免許証の下4桁', '好きな映画の題名', )
として、$html->selectTag の6番目の引数に false を指定すれば空の option タグが表示されなくなる。
必須選択にしたい場合は「選択してください」の値が0なので、0以外の数字でバリデーションチェックすればいい。