【CakePHP】レイアウト(Layouts)の使い方

2019年7月29日

バージョン:CakePHP 2.x

レイアウトにはヘッダーやフッターなど、全てのビューで表示される部分を記述していきます。
デフォルトのレイアウトファイルは下記になります。

app/View/default.ctp

<?php
/**
 *
 * PHP 5
 *
 * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
 * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
 *
 * Licensed under The MIT License
 * For full copyright and license information, please see the LICENSE.txt
 * Redistributions of files must retain the above copyright notice.
 *
 * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
 * @link          http://cakephp.org CakePHP(tm) Project
 * @package       app.View.Layouts
 * @since         CakePHP(tm) v 0.10.0.1076
 * @license       http://www.opensource.org/licenses/mit-license.php MIT License
 */
$cakeDescription = __d('cake_dev', 'CakePHP: the rapid development php framework');
?>
<!DOCTYPE html>
<html>
<head>
	<?php echo $this->Html->charset(); ?>
	<title>
		<?php echo $cakeDescription ?>:
		<?php echo $title_for_layout; ?>
	</title>
	<?php
		echo $this->Html->meta('icon');
		echo $this->Html->css('cake.generic');
		echo $this->fetch('meta');
		echo $this->fetch('css');
		echo $this->fetch('script');
	?>
</head>
<body>
	<div id="container">
		<div id="header">
			<h1><?php echo $this->Html->link($cakeDescription, 'http://cakephp.org'); ?></h1>
		</div>
		<div id="content">
			<?php echo $this->Session->flash(); ?>
			<?php echo $this->fetch('content'); ?>
		</div>
		<div id="footer">
			<?php echo $this->Html->link(
					$this->Html->image('cake.power.gif', array('alt' => $cakeDescription, 'border' => '0')),
					'http://www.cakephp.org/',
					array('target' => '_blank', 'escape' => false)
				);
			?>
		</div>
	</div>
	<?php echo $this->element('sql_dump'); ?>
</body>
</html>

• $this->Html->charset()
メタタグの文字コードを定義します。「app/Config/core.php」の下記部分で設定を変更できます。

/**
 * Application wide charset encoding
 */
	Configure::write('App.encoding', 'UTF-8');

• $this->fetch('content’)
この部分がViewファイルに記述したコンテンツが組み込まれる部分となります。

• $this->fetch('好きな名前’)
とすると、$this->assignで好きな値をセットすることができます。
たとえばレイアウトファイルに、

<title>
<?php echo $this->fetch('description'); ?>|<?php echo $this->fetch('title'); ?>
</title>

と記述すれば、

<?php
$this->assign('description', 'これはテストサイトです');
$this->assign('title', 'トップページ');
?>

とビューファイルで設定することができます。各々のページ違う情報を出す時に使えます。
また、

$this->assign('test', $this->element('element名'));

とすればelementを使う事ができます。

スポンサーリンク