Home > CakePHP修行を追う > 「CakePHP修行」を追う #8

「CakePHP修行」を追う #8

cakephp-wall

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/にコピーしておきます。

default.ctp

はい。。。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の部分はどうしたんだろう・・・・(^^;)

しかもこれ、レイアウトじゃなくて、普通にビューファイルでいいと思うのだが。。。

う~ん、、、本家のほうではいきなり解決してるっぽいけど、どうやったんだろ。

とりあえず、今回は保留!、はじめての保留!(^^;)

関連記事

Sponsored Link

Google+

facebook

zenback

Comments:0

Comment Form
Remember personal info

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

Home > CakePHP修行を追う > 「CakePHP修行」を追う #8

Subscribe This Blog
Subscribe This Blog
FeedBurner

Search
Categories
Tag Cloud
Twitter Counter
Archives
My Other Blogs
Affiliate Blogs
Translator
Japanese flagEnglish flag

Return to page top