Posts tagged PHP

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

CakePHP のエレメント

2

違うレイアウトでも同じデザインの部品を使用することがありますが、その場合に使用するといいのがエレメントです。

エレメントを使用するには

/app/views/elements/

の中に拡張子「.thtml」をつけたファイルを作成します。

エレメントを使用するレイアウト内で

<?php echo $this->renderElement('hoge'); ?>

と書くとエレメントが表示されます。

例えば、ログインフォーム用のエレメントを

/app/views/elements/login.thtml

と作成した場合は

<?php echo $this->renderElement('login'); ?>

と書きます。

また、エレメント内ではそのままではデータにアクセスできないため、
エレメント内でデータを参照したい場合はエレメンにデータを渡さないといけません。

<?php echo
$this->renderElement('login', array("user" => $user));
?>

と、データ配列を渡してエレメントを呼ぶことによりエレメント内で

<?php echo $user; ?>

のようにアクセスできます。

下記の記事が参考になります。
CakePHP の view の elements がアクセスできる変数
cakePHPのマニュアル 8.1.2 エレメント

CakePHP でレイアウトを変更する

1

レイアウトを変更するには

/app/views/layouts/default.thtml

を変更すればOK。

コントローラ毎などにレイアウトを変更したいときは

/app/views/layouts/hoge.thtml

などとレイアウトを作成して、コントローラで

var $layout = "hoge.thtml";

とレイアウトを指定する。

このレイアウトの中でタイトルタグを

<title><?php echo $title_for_layout?></title>

としていれば、

$this->pageTitle('このページのタイトル');

とコントローラで指定すれば、アクション毎にタイトルを変更できる。

Go to Top