- 2009/06/04 14:44
- CakePHP修行を追う

IDEA*IDEAさんのところで以前連載していた、「CakePHP修行」を追って、CakePHPの勉強がてら、自分も同じことをやってみよう、というシリーズです。
過去の記事はこちらのカテゴリーでごらんいただけます。
今回はこちらの記事から。
今回は画面のカスタマイズということで。
(1.2の解釈で)
- /app/views/layout/default.ctpを作ればそれがデフォルトのレイアウトになる。
- titleタグの中身はcontroller中に$pageTitleで指定できる。
- レイアウトは複数作って$layoutで切り替えることができる。
- レイアウト中の小さなパーツは/app/views/elementsに入れておいて使い回しできる。
ということですね。
/app/views/layout/default.ctpを指定しないと、Cakeのデフォルトのページがレイアウトとして使用されます。そのときは、/cake/libs/view/layouts/default.ctpが使われます。
個別にレイアウトを指定する場合、コントローラーで、
$this->layout = "hogehoge";
という風に指定します。
そして、それぞれのレイアウトのタイトルを設定するのが、$pageTitle。コントローラーの中で、
$this->pageTitle = 'hogehoge Title';
と指定する。
レイアウトの中でも共通部分(たとえばヘッダーとかフッター)などは、エレメントとして共通化することができます。
たとえば、「/app/views/elements」にheader.ctpと置いてビュー内で、
<?php echo $this->renderElement('header'); ?>
とすればそれが読み出されます。
で、今回僕のほうのテストでは見てくれはどうでもいいので(^^;)、デフォルトのレイアウト(/cake/libs/view/layouts/default.ctp) を /app/views/layout/にコピーしておきます。
はい。。。Cakeのデフォルトなので前回と変わりありません(^^;)
そしてuser_controller.phpのhome()に$pageTitleを入れてみます。
function home () {
$this->checkSession();
$this->pageTitle = 'Welcome to my SNS!';
$this->set('me', $this->User->findById($this->Session->read('my_id')));
}
表示してみると、
<title>Welcome to my SNS!</title>
ときちんと入っています。GJ!
次に、以下の記事もひっくるめてやってみたいと思う。
ヘッダー部分とフッター部分をエレメントとして分割してみる。
app/views/elements/header.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">
<head>
<?php echo $html->charset(); ?>
<title><?php echo $title_for_layout?></title>
<?php
echo $html->meta('icon');
echo $html->css('cake.generic');
echo $scripts_for_layout;
?>
</head>
<body>
<div id="container">
<div id="header">
<h1><?php echo $html->link(__('CakePHP: the rapid development php framework', true), 'http://cakephp.org'); ?></h1>
</div>
<div id="content">
app/views/elements/footer.ctp
</div>
<div id="footer">
<?php echo $html->link(
$html->image('cake.power.gif', array('alt'=> __("CakePHP: the rapid development php framework", true), 'border'=>"0")),
'http://www.cakephp.org/',
array('target'=>'_blank'), null, false
);
?>
</div>
</div>
<?php echo $cakeDebug; ?>
</body>
</html>
app/views/layout/home.ctp
<?php echo $this->renderElement('header'); ?>
<h2><a href="/users/home/"><?php echo $me['User']['name']; ?></a></h2>
<ul>
<li><a href="/users/home">Home</a></li>
<li><a href="">Diary</a></li>
<li><a href="">Friends</a></li>
<li><a href="/users/edit/">Settings</a></li>
<li><a href="/users/logout/">Logout</a></li>
</ul>
<h3>My Profile</h3>
<p><?= $me['User']['profile']; ?></p>
<?php echo $this->renderElement('footer'); ?>
とすると、
以下のようになってしまう。。。
う~ん、、、エラーになってしまった。。。
やはりエレメントにパラメータが渡っていないようだが。。。
本家では、$title_for_layoutの部分はどうしたんだろう・・・・(^^;)
しかもこれ、レイアウトじゃなくて、普通にビューファイルでいいと思うのだが。。。
う~ん、、、本家のほうではいきなり解決してるっぽいけど、どうやったんだろ。
とりあえず、今回は保留!、はじめての保留!(^^;)
関連記事
- 「CakePHP修行」を追う #4
- 「CakePHP修行」を追う #6
- 「CakePHP修行」を追う #5
- 「CakePHP修行」を追う #7
- [CakePHP] Cannot modify header information – headers already sent
- [CakePHP] 画像の圧縮比を変えて出力する
- 「CakePHP修行」を追う #1
- 「CakePHP修行」を追う #3
Sponsored Link
Google+
zenback
Comments:0
Trackbacks:0
- Trackback URL for this entry
- http://www.multiburst.net/sometime-php/2009/06/chase-of-training-the-cakephp-8/trackback/
- Listed below are links to weblogs that reference
- 「CakePHP修行」を追う #8 from Sometime PHP
Additional comments powered by BackType







