2013年4月12日金曜日

[CakePHP] ビューを変える

CakePHP の規約でビューファイル名はコントローラ名、アクション名に対応した名称を使用しなければならない
しかし、条件により異なる画面を表示したいことって多々ある

リダイレクトで解決できる場合もあるが、データの受け渡しがあるとリダイレクトだとめんどくさかったりする(いや、めんどくさくてもリダイレクトしなけばならないこともあるんだが)

そんなときは、Controller の render() を呼び出せばいい
 if ($condition) {
    $this->render("hoge");
 }

これで、 hoge.ctp が表示できる
パスは、このアクションの元のビューファイルと同じになるので、別のパスをしていするには

    $this->render("/hoge/hoge");

こうすれば、app/View/hoge/hoge.ctp となる

では、まとめて変えたい場合はどうしたらいいのだろう
たとえば、PC用ページとスマートフォン用ページ分けたいとき、処理は一緒でビューだけスマホ用にしたいなーとか・・・

Controller クラスを見ていたら $view というプロパティがあった
試しにこのプロパティを変えてみたら、ビューを変更できた
※このプロパティを変更していいものなのか、他に影響がないか等はきちんと調べてないので、自己責任でお願いします

たとえば、breforeFilter() とかでスマホかどうか判定して、スマホだったらView名を変更するとかってどうだろう?

 public function beforeFilter() {
     parent::beforeFilter();
     if (スマホ) {
         $this->view = $this->view . "_sp";
     }
 }

PC用とスマホ用のビューファイルを用意しておいて、こんな感じでスマホ対応できたらいいな・・・

追記
この記事を書いた後に、テーマの切り替えという機能を知ったので、こちらも参照してください

0 件のコメント:

コメントを投稿