ITの隊長のブログ

ITの隊長のブログです。Rubyを使って仕事しています。最近も色々やっているお(^ω^ = ^ω^)

はじめてのCakePHPでdefault.ctpをソースリーディングしてみた

スポンサードリンク

書いてみた

<?php
/**
 *
 * はじめてのCakePHP
 * ソースリーディングしてみたのでメモ
 *
 * CakePHPのデフォルトテンプレートである、~/app/View/Layouts/default.ctpを
 * ソースリーディングしました。
 * 本記事初めてのプログラム記事じゃないでしょうか。
 *
 * 一行一行、抜粋もなんなので、コメントのまま書いていきます。
 * 見難いけど、まぁ私のメモようなんで。
 *
 * 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
 */

/*
 * コメントの仕方はC言語を思い出します。
 */
$cakeDescription = __d('cake_dev', 'CakePHP: the rapid development php framework');
/*
 * __d(string $domain, string $msg, integer $category, mixed $args = null)
 * これグローバル関数らしい。んで、cake_devドメインからメッセージを取得するとか。
 * 意味不明だけど、なんか利用用途不明なので、一旦保留。
 */
?>
<!DOCTYPE html>
<html>
<head>
	<?php
		/*
		 * ライブラリ?なのかな。
		 * HtmlHelper : HTMLに関するオプションを高速に出すためにあるとか。
		 * HtmlHelper::charset($charset=null) :  使用したい文字セットをセットする。
		 * 下記記述は空っぽ。だけど、null値の場合はApp.encodingで設定した値を使います。
		 * 下記はデフォルトの出力結果。どうやら、utf-8 らしいです。
		 * <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />	<title>
		 */
		echo $this->Html->charset();
		/*
		 * Testで下記のようにやったら、下記タグが出力
		 * <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />	<title>
		 * 変更されているもよう。
		 * echo $this->HTML->charset('ISO-8859-1');
		 */
	?>
	<title>
		<?php echo $cakeDescription ?>:
		<?php
		/*
		 * $title_for_layout ってどこで宣言されてるんねん。
		 * と、思い、ずっと悩んでいましたが
		 * そういえば、cakephpはControllerから引き継がれる(?)
		 * Controller/PagesController.phpに $title_for_layout ありました。
		 * なにかよくわからないが、値は「Home」が入っている。
		 */
		?>
		<?php echo $title_for_layout; ?>
	</title>
	<?php
		/* これは cakephpのicon出力 */
		echo $this->Html->meta('icon');
		/* cssファイルのインクルード
		 * ~/app/webroot/css/cake.generic.css を読み込むソースを出力
		 */
		echo $this->Html->css('cake.generic');
		/* めっちゃ理解しずらかった
		 * この$this->fetch()がよくわからなかた。なんじゃいViewblockって
		 * とりあえず、いまシカト
		 */
		echo $this->fetch('meta');
		echo $this->fetch('css');
		echo $this->fetch('script');
	?>
</head>
<body>
	<div id="container">
		<div id="header">
			<h1><?php
					/*
					 * これもHtmlHelperかな。linkタグですかね。
					 * HtmlHelper::link(string $title, mixed $url = null, array $options = array(), string $confirmMessage = false)
					 *	パラメタ:	
					 *	$title (string) – リンクを本文に表示する際のテキストを設定
					 *	$url (mixed) – 文字列または routing array によってリンク先のURLを設定
					 *	$options (array) – html attributes の配列を設定
					 */
					echo $this->Html->link($cakeDescription, 'http://cakephp.org');
				?></h1>
		</div>
		<div id="content">

			<?php
				/*
				 * SessionComponent::setFlash(string $message, string $element = 'default', array $params = array(), string $key = 'flash')
				 * Webページに接続した際、一度だけ表示したいときに使うらしい。flush message.
				 */
				echo $this->Session->flash();
			?>

			<?php
				/*
				 * この行削除するとデフォルトで出力するコンテンツが全部消えるという中核のfetch()
				 * めっちゃハマりまくりました。色々調べた結果
				 * どうやら、route.php => PagesController.php:display('home'):
				 * 先程の $title_for_layout はこのhomeから取得されたっぽい
				 *
				 * 話変わりましたが、この $this->fetch('content')
				 * いまいち使い方が理解できません。。。
				 * ビューで表示したいものはここに配置します。
				 * やっぱりよくわからないぞ!cakephp!!
				 */
				echo $this->fetch('content');

				/*
				 * 色々調べた結果、考える事をやめました。
				 * わりきりました。まずはcakephpのlayoutはdefault.ctpを使い
				 * Viewはhome.ctpを使う。ってことを頭の中へインプット
				 * ちなみに、home.ctpを呼ぶときは 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');
		/*
		 * まだまだ読みきれていませんが、中々難しい(かな?)
		 * ViewとControllerの流れがいまいち掴めてないからだと思います。
		 * 一旦触り始めるので、そこらでちっと最適な部分をマネしながら
		 * 覚えていこうかなと。それでは!
		 */
	?>
</body>
</html>