2011年8月29日月曜日

CakePHP ラジオボタンやセレクタが未選択の場合のバリデーションエラー表示


formヘルパーで生成したセレクタが必須項目であった場合、テキストボックスなどと同様にエラー表示がされるのかと思いきやエラー表示がなされない。ラジオボタンでも同様。
selectの場合、これを表示するには、viewファイルに次のように記述する。

<?php
echo $form->error('selectid','エラーメッセージ');
?>


例)都道府県を選択する
■Viewファイル
<?php
echo $form->select('prefid',$pref), null, array('empty' => '選択してください'));
echo $form->error('prefid','メッセージ');
?>
$prefidには各都道府県のリストが配列で格納されているものとする

■modelファイル
var $validate = array(
'prefid' => 'notEmpty',
);


あるいは


var $validate = array(
'prefid' => array( 
'rule' => array('notEmpty'),
)
);

2011年8月25日木曜日

CakePHP 携帯などでviewとlayoutを切り替える

アクセス元の端末によって表示ファイルを変更したい場合、該当するコントローラファイルで、render()を利用して変更する。

■viewファイルを変更する

$this->render('view');

viewには表示させたいテンプレートファイル名を指定。拡張子は不要。

例)index_mob.ctpを表示させたい場合
$this->render('index_mob');

■layoutファイルを変更する
$this->layoutに指定する。

例)レイアウトファイルをlogin.ctpで表示させたい場合

$this->layout = 'login';



■view、layoutファイルを両方変更する
layoutファイル名をrender()の第二引数にファイル名を指定する。

$this->render('view','layout');

viewには表示させたいテンプレートファイル名、layoutには表示させたいレイアウトファイル名を指定。拡張子は不要。

例)index_mob.ctpをdefault_mob.cptで表示させたい場合
$this->render('index_mob','default_mob');

携帯用、PC用など、常に決まったレイアウトファイルを利用する場合は、毎回記述するのは面倒なので、別の方法で実装するほうが良さげ。
実装したら追記。

2011年8月23日火曜日

CakePHP それぞれのページにlinkタグでCSSを追加する

CakePHPでは、全てのページに読み込むCSSファイルはdefault.ctpファイルに記述すれば良いが、各ページ毎に別指定したCSSファイルを読み込む場合は次のようにする。

default.ctp

hoge.ctp
css('hogehoge', null, array('inline' => false)); ?>

以上で読み込まれるCSSにhogehoge.cssが追加される。

CSSは app/webroot/css/ 内を読み込むので、hogehoge.cssは、 app/webroot/css/hogehoge.css とする必要がある。

2011年8月22日月曜日

CakePHP URLに含まれるパラメータの受け取り方

CakePHPで生成されるURLは、

http://ドメイン.com/コントローラ名/ファンクション名/パラメータ1/パラメータ2・・・

となる。
URLに含まれるパラメータを取得するには、$this->params['pass']とする。

例)
URL
http://hanage.com/hoge/fugo/100/200

hoge_Controller.php
var_dump($this->params['pass']);

結果
array(2) { [0]=> string(3) "100" [1]=> string(3) "200" }

2011年8月10日水曜日

メニューなどのブロックを読み込む Element

CakePHPでテンプレート内にグローバルメニューやヘッダ、フッタといったパーツを読み込む場合は、elementを利用する。
テンプレートファイルに読み込むブロックを指定し、読み込まれるファイルをelementsディレクトリ内に配置する。

ctpファイル(呼び出し元のテンプレート)
<?php echo $this->element('menu'); ?>

ctpファイル(呼び出されるブロック:/app/views/elements/)
menu.ctp

呼び出される側は、コンテンツ部分のhtmlソースだけ記述。

タイトルの表示 CakePHP1.3x

CakePHP1.3xでは1.2xまでとは、表示の方法が変更になっている。

1.Controll側で記述する方法

■controllerソース
$this->set('title_for_layout', 'タイトル');

■ctpソース(/apps/views/layouts/default.ctpなど)
<?php echo $title_for_layout; ?>

同様にして、コントローラからビューにデータを受け渡すことができる。

2.Viewで記述する方法
■ctpソース
<?php
$this->set('title_for_layout', 'タイトル');
?>

エラーページなどのタイトルや、管理運用をHTMLコーダーが担当する場合は、Viewで記載する方法が簡単ですね。