ヘッダ、フッタやサイドメニューなど共通部品をテンプレート化するため、FuelPHPのTemplateコントローラを導入してみます。
CMSでサイトを構築する場合に、各ページのヘッダ、フッタなどの共通部分については一元管理したいですよね。
FuelPHPでその方法を探していました。
View部分の機能で実現すると思い込み、ドキュメントを読んでいたのですが、出てきたキーワードが「ビューの入れ子」。
その名と通り、Viewの中でさらにViewを読み込むということですが、何だかスマートじゃない。。。
その他をいろいろと調べていたら「Templateコントローラ」という機能を見つけました。
FuelPHPではコントローラでレイアウトのテンプレートを定義するのですね。
さて、以下、導入方法です。
ちなみに今回確認したのは「FuelPHP 1.7.3」です
コントローラの設定
例えばコントローラ「sample.php」でTemplateコントローラを使用する場合にはクラス「Controller_Template」を継承します。
class Controller_Sample extends Controller_Template{ public function before(){ parent::before(); } public function after($response){ $response = parent::after($response); return $response; } public function action_index(){ $data = array(); $this->template->title = 'サンプルタイトル'; $this->template->content = View::forge('sample/index', $data); } }
公式サイトにもあるベースとなるサンプルコードです。
Template コントローラ – 概要 – FuelPHP ドキュメント
beforeとafterはおまじない程度に設置します。これがないとテンプレートが読み込まれない程度に覚えておけばよいでしょう。
「$this->template」ではテンプレートにあてる変数、「$data = array()」には各ビューにあてる変数をセットします。
最後に、「$this->template->content」に各アクションに対するビューをセットします。
デフォルトテンプレート
上記のコントローラのように設定した場合、「fuel/app/views/template.php」がデフォルトのテンプレートとして読み込まれます。
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title><?php echo $title; ?></title> </head> <body> <div id="wrapper"> <h1><?php echo $title; ?></h1> <div id="content"> <?php echo $content; ?> </div> </div> </body> </html>
これを共通部分としてヘッダ、フッタなどのソースを埋め込みます。
「$content」部分に、先ほどコントローラでセットしたビュー「fuel/app/views/sample/index.php」が組み込まれるわけですね。
これで一安心。
コメントする