CakePHP

CakePHP2.0のレイアウト

更新日:

CakePHPは何も指定しなくても自動的にページのデザインを適用するオートレイアウト機能がついています。自動的に統一されたデザインを適用してくれるのはありがたいのですが、レイアウトの変更方法を知らないと全て同じようなサイトになってしまいます。ですので、今日は、CakePHP2.0のレイアウト機能について調べてみたいと思います。

1. CakePHPでは、画面の表示はビューが担当しますが、実際に表示されるのは、ビューではなく、レイアウトです。このレイアウトページの中にビューが『コンテンツ』として、表示されるような仕組みになっています。

2. それでは、簡単なレイアウトを作成してみます。

app/View/Layouts/sample.ctp

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>無題ドキュメント</title>
</head>
<body style="background-color:green;">
<p style="color:white;">これはレイアウトを表示しています</p>
</body>
</html>

3. コントローラとビューファイルを下記のように記述します。

app/Controller/SampleController.php

<?php
App::uses('AppController','Controller');
class SampleController extends AppController{
public function index(){
 //レイアウトをsample.ctpに指定
 $this->layout="sample";
 //データの受け渡し
 $this->set("name","WinRoad徒然草");
 }
}

app/View/Sample/index.ctp

<h1><?php echo $name?></h1>
<p>これはビューのサンプルページです</p>

4. ブラウザで確認してみます。

http://cake.winroad.info/sample/

5. これでお分かりのように単にレイアウトページが表示されているだけです。ビューを表示するには、レイアウトの中に下記のコードを記述します。

<?php echo $content_for_layout;?>

6. それでは、レイアウトページsample.ctpを下記のように変更します。

app/View/Layouts/sample.ctp

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>無題ドキュメント</title>
</head>
<body style="background-color:green;">
<p style="color:white;">これはレイアウトを表示しています</p>
<div style="background-color:white;">
<?php echo $content_for_layout;?>
</div>
</body>
</html>

7. 再度ブラウザで表示してみます。レイアウトページの中にビューページがコンテンツとして表示されているのが分かると思います。

8. CakePHPでは、ビューのテンプレートを役割に応じていくつかの種類に分けています。主に、レイアウト、コンテンツ、ヘルパー、エレメントに分かれます。それでは、それぞれについて見ていきたいと思います。

レイアウト

レイアウトは、ページ全体の定義をするテンプレートです。各ページで共通して使うベースのHTMLとなる部分を記述しておきます。CakePHPでは、レイアウトファイルはデフォルトの状態では、『app/View/Layouts』内のdefault.ctpファイルが使われますが、このフォルダ内にテンプレートをいくつも定義可能ですので、レイアウトの異なるサイトを構築することも可能です。

ビューテンプレート

CakePHPで一般的にビューファイルとは、このビューテンプレートの事を指します。ページ内のメインのコンテンツを表示するために使用します。

エレメント

エレメントとは、サイト全体もしくは、サイトの一部で使う共通のパーツ群のことをいいます。app/View/Elementsフォルダ内に配置して定義します。例えば、『app/View/Elements/header.ctp』というファイル名のエレメント名は『header』となりますので、下記のように呼び出すことが出来ます。

<?php echo $this->element('header');?>

又、フォルダによって階層分けして整理しておくことも出来ますので、例えば『app/View/Elements』フォルダに新しくフォルダを作成し、その中にエレメントフォルダを保存し、下記のように呼び出すことが出来ます。

<?php echo $this->element('新しいフォルダ名/エレメント名');?>

ヘルパー

ヘルパーもエレメントのようにサイトの一部で使うパーツ群ですが、ヘルパーには主にPHPのコードが記述されており、複雑なPHPの処理を行った結果を書き出すような仕組みになっています。CakePHPには、HTMLヘルパー、Formヘルパー、Paginatorヘルパー、他いろいろなヘルパーがコアライブラリに標準で用意されています。自作のヘルパーは、app/View/Helper内に配置します。

ページ

ページは、動的に静的なページを作成することが可能なCakePHPの機能で、CakePHPのコアコードに入っているPagesControllerを使って実現されます。『ページ名.ctp』という名前で記述したHTMLファイルをページ配置用フォルダに置くだけで、レイアウトが当てはまった状態で、出力されます。ブラウザから『ドメイン名/pages/ページ名』と入力するだけで、表示されます。一度作っておけばほとんど変更することのないような静的なページを作成するような事に利用することが出来ます。

本日は、以上です。

-CakePHP
-

Copyright© WinRoad徒然草 , 2018 All Rights Reserved Powered by AFFINGER5.