2007年07月10日

CakePHPでレイアウトファイル以外のビューファイルからページのタイトルにアクセスするには

ページのタイトルは、$title_for_layoutに格納されている。
が、この変数はレイアウトファイルからしかアクセスできない。

その他のファイルからアクセスする場合
$page_title

という変数にアクセスするとコントローラの$this->pageTitleで設定したタイトルにアクセスできるみたいだ。
タグ:cakephp ビュー
posted by asaton at 22:58| Comment(0) | TrackBack(0) | CakePHP | このブログの読者になる | 更新情報をチェックする

2007年07月09日

CakePHP:app/views/elements/配下をフォルダ分けする方法

ビューファイルのブロック描画の際、$this->renderElement()を多用するとapp/views/elements配下にファイルが多数作成され見にくくなる。

そこで、
app/views/elements/common/* 共通
app/views/elements/posts/* postsコントローラ
app/views/elements/users/* usersコントローラ

とある程度機能ごとに整理したくなる。

で、上記のようなファイル構成でrenderElementを呼び出すことが出来るか調べてみたところ意外に簡単に出来ることがわかった。
$this->renderElement('フォルダ名/エレメント');

とすればOKみたいだ。

例えば、app/views/elements/posts/element1.thtmlを描画したい場合
$this->renderElement('posts/element1');

とすれば問題なく動作する。


タグ:cakephp ビュー
posted by asaton at 23:55| Comment(0) | TrackBack(8) | CakePHP | このブログの読者になる | 更新情報をチェックする

2007年07月08日

モデルのcondition配列の展開(CakePHP)

久々に更新!!
最近、CakePHPを色々な案件で使用しているのだが、
メモしておかないと次探すのが面倒なので書く。

CakePHPでは、findAllメソッドなどの$conditionsに配列を渡せばwhere句を構築してくれる。

例えば、
$conditions = array('and' => array('Field.id = 3', 'or' => array('Field.id = 1', 'Field.id = 2')));


とした場合

WHERE (`Field`.`id` = 3) AND ((`Field`.`id` = 1) OR (`Field`.`id` = 2))


としてくれるので、自分でandでつないで次、orでつないでと文字列として作成するよりプログラムが組みやすい。

で、$model->queryでも$conditionsを配列として構築しておき、sqlを発行する直前にwhere句を構築したい。
(自前で作成してもよいのだが、修正を重ねるとwhere句の直後にandがきたりしてDBに怒られるのがうっとおしいので・・・)

CakePHPのソースを追っているとどうやら、DboSourceクラスのconditionsメソッドを呼び出せばよいというのがわかった。
(実際はconditionKeysToStringメソッドで行っている)

でコントローラクラスのアクションメソッド内で

$conditions = array('and' => array('Field.id = 3', 'or' => array('Field.id = 1', 'Field.id = 2')));
$db =& ConnectionManager::getDataSource($this->Model->useDbConfig);
$conditions = $db->conditions($conditions);


と書くことでうまくいった。
DataSourceを取得するのが面倒なので、AppModelあたりに共通化しておこう。



タグ:cakephp モデル
posted by asaton at 21:11| Comment(0) | TrackBack(1) | CakePHP | このブログの読者になる | 更新情報をチェックする

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。


×

この広告は1年以上新しい記事の投稿がないブログに表示されております。