FuelPHP の Theme クラスの chrome の使い方

Theme クラスの chrome の使い方です。

設定ファイル app/config/theme.php

<?php

return array(
	/**
	 * The active theme to use.  This can also be set in code using Theme::active('foo');
	 */
	'active' => 'default',

	/**
	 * The fallback theme to use.  If a view is not found in the active theme, this theme
	 * is used as a fallback.  This can also be set in code using Theme::fallback('foo');
	 */
	'fallback' => 'default',

	/**
	 * The theme search paths.  They are searched in the order given.  You can add paths
	 * on the fly via Theme::add_path($path) or Theme::add_paths(array($path1, $path2));
	 */
	'paths' => array(
		APPPATH.'views/themes',
	),

	/**
	 * The folder inside the theme to be used to store assets.  This is relative to the
	 * theme's path.
	 */
	'assets_folder' => 'assets',

	/**
	 * The extension for theme view files.
	 */
	'view_ext' => '.php',

	/**
	 * Whether to require a theme info file
	 */
	'require_info_file' => false,

	/**
	 * The theme info file name
	 */
	'info_file_name' => 'themeinfo.php',
);


コントローラ app/classes/controller/theme.php

<?php

class Controller_Theme extends Controller
{
	public function before()
	{
		$this->theme = Theme::instance();
		$this->theme->set_template('template')->set('title', 'Themeクラスのサンプル');
	}

	public function action_index()
	{
		$this->theme->set_chrome('header', 'chrome/blue', 'content');
		$this->theme->set_partial('header', 'header')->set('var', '変数');
		
		$this->theme->set_chrome('footer', 'chrome/red', 'content');
		$this->theme->set_partial('footer', 'footer')->set(array(
			'var1' => '変数1',
			'var2' => '変数2',
		));
	}

	public function after($response)
	{
		if (empty($response) or ! $response instanceof Response)
		{
			$response = Response::forge($this->theme->render());
		}
		return parent::after($response);
	}
}


ビューのテンプレート views/themes/default/template.php

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title><?php echo $title; ?></title>
</head>
<body>

<div id="header">
<?php echo $partials['header']; ?>
</div>

<div id="content">
コンテンツ
</div>

<div id="footer">
<?php echo $partials['footer']; ?>
</div>

</body>
</html>


ビューのヘッダ views/themes/default/header.php

ヘッダ<br />
<?php echo $var; ?><br />


ビューのフッタ views/themes/default/footer.php

フッタ<br />
<?php echo $var1; ?><br />
<?php echo $var2; ?><br />


ローム blue views/themes/default/chrome/blue.php

<!-- begin chrome/blue -->
<div style="border: 5px #0000c0 solid;">
<?php echo $content; ?>
</div>
<!-- end chrome/blue -->


ローム red views/themes/default/chrome/red.php

<!-- begin chrome/red -->
<div style="border: 5px #c00000 solid;">
<?php echo $content; ?>
</div>
<!-- end chrome/red -->


で、上記のコードでコントローラを実行すると以下のようになります。

で、HTML はこんな感じ。

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Themeクラスのサンプル</title>
</head>
<body>

<div id="header">
<!-- begin chrome/blue -->
<div style="border: 5px #0000c0 solid;">
ヘッダ<br />
変数<br />
</div>
<!-- end chrome/blue -->
</div>

<div id="content">
コンテンツ
</div>

<div id="footer">
<!-- begin chrome/red -->
<div style="border: 5px #c00000 solid;">
フッタ<br />
変数1<br />
変数2<br />
</div>
<!-- end chrome/red -->
</div>

</body>
</html>

あ、ちなみに 1.3/develop の最新でないと動きません。