Posts tagged helper

CakePHP html ヘルパーでラジオボタンを表示する

0

htmlヘルパーで 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エスケープ処理

1

view でモデルの値などを出力する際に
$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 タグを表示する

2

HTML ヘルパーで 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以外の数字でバリデーションチェックすればいい。

Go to Top