CMS構築を目的にPHPをベースとしたWordPress、CakePHPやPEARなどオープンソースを中心に解説しています

ヘッダ、フッタやサイドメニューなど共通部品をテンプレート化するため、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」が組み込まれるわけですね。

これで一安心。

このエントリーをはてなブックマークに追加

Monthly Archives

Search