WEB/システム/IT技術ブログ

CakePHPでレイアウトを活用する

CakePHPではレイアウトという便利な機能があります。大枠のテンプレートのようなもので、ビューはこのレイヤーにのっかっているイメージです。
つまりは、サイト全体で変更のない大枠をここでレイアウトできるということです。

デフォルトのレイアウトは「/app/views/layouts/default.ctp」にコーディングします。もちろん、layoutsフォルダに任意の名前でctpファイルを置くことで、コントローラから動的に切り替えることが可能です。
以下、default.ctpのサンプルです。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="ja">

<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="keywords" content="" />
<link rel="stylesheet" href="/css/common.css" type="text/css" media="all" />
<script type="text/javascript" src="/js/common.js"></script>
<?php echo $scripts_for_layout ?>
<title><?php echo $title_for_layout ?></title>
</head>

<body>

<?php echo $content_for_layout ?>

</body>
</html>


基本的にここで設置するPHP変数は、$scripts_for_layout、$title_for_layout、$content_for_layoutの3つです。

ビューからcssやjavascriptなどの外部ファイルを指定することで、$scripts_for_layoutに外部ファイルを読み込むタグを自動で出力してくれます。ただ、私自身、サイト内で読み込む外部ファイルを動的に切り替えるのは好きじゃないので、レイアウトに直接書いてしまいます。

$content_for_layoutにはビューの内容が出力されます。

$title_for_layoutは以下のようにしてコントローラで指定することで、titleタグ部分にタイトルが出力されます。

$this->pageTitle = 'ページタイトル';

しかし、ここで一つ落とし穴です。上記のタイトルの利用法はCakePHP1.2までの仕様で、CakePHP1.3では廃止されたようです。
コントローラとコンポーネント :: 1.2から1.3への移行ガイド :: 付録 :: マニュアル :: 1.3コレクション :: The Cookbook
CakePHP1.3からは通常の項目と同様に、以下のようにして指定します。

$this->set('title_for_layout', 'ページタイトル');

これにははましました。。。CakePHPは開発が進んでいるので、こういった情報には注意しておいたほうがよいですね。

B!

Comment

コメントはありません

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

Monthly Archives