第三回でまとめてconfigファイルを書きましたが、
あとからormパッケージを入れるかもしれません。
リアルタイムで書いてるとこういうことが起こる(´@ω@`)
Controller_Templateの実装に入っていきます。
前回までのおさらいはこちら
Controller_Templateとは
第四回でも書いたとおり、ビューテンプレートを利用することのできるコントローラークラスです。
HTMLの<head>部分や<body>内の<header><footer>などを複数作成せず、
その内側のcontent部分だけを動的に差し替えて表示することができます。
実装
実際の書き方の基本はこう。
<html>
<head>
<title><?php echo $title ?></title>
</head>
<body>
<?php echo $content ?>
</body>
</html>
$titleと$contentが動的に変更される部分です。
コントローラー側からは
public function action_index()
{
$this->template->title="ようこそ";
$this->template->content = View::forge('welcome/index');
}
のように記述します。
例えば「メール送信画面からメール送信後、特に動作はないが送信完了画面を出したい」という
ことを実装しようとした場合は以下
if(メール送信完了){
$this->template->title="送信完了";
$this->template->content = View::forge('mail/complate');
return;
}
$this->template->title="ようこそ";
$this->template->content = View::forge('mail/delivery');
ビューだけ切り替えてやればリダイレクト等書かなくて済みますし、
例えば送信先アドレスや送信内容の表示も引数の受け渡しなしで行えます。
レイアウトの読み込み
デフォルトではtemplate.phpの名前で書くテンプレートですが、
別名で作ることもできます。例えばuser.phpとadmin.phpとか。
その場合はviews/layoutsの下にファイルを設置し、コントローラー側で
class Controller_User extends Controller_Template
{
public $template = 'layouts/user';
...
}
この形で指定してあげれば表示されます。
注意点
CakePHPではできることですが、FuelPHPではメソッド毎のレイアウト切り替えができません。
できないってことはないだろうと思っていろいろ試したのですが、どうやら本当にできません。
adminコントローラー内のログイン前とログイン後でレイアウト変えたかったのに(´@ω@`)
追記
コメント欄にてご指摘を頂きました!
メソッド事のレイアウト切り替え、できるそうです!
上司にできないって言ってしまった……orz
メソッド毎のレイアウト切り替えの方法は以下にあります。
ご指摘ありがとうございました(´@ω@`)