デフォルトのレイアウトをいじってみます。
ここでは、Template/layout/default.ctpを複製して、my_layout.ctpとしました。コードを以下のように編集します。
<!DOCTYPE html>
<html lang="ja">
<head>
<?= $this->Html->charset() ?>
<title>
<?= $this->fetch('title') ?>
</title>
<?= $this->Html->css('styles.css') ?>
</head>
<body>
<section class="container">
<?= $this->fetch('content') ?>
</section>
</body>
</html>
-
= $this->fetch('title') ?>
- 各ビューファイルからタイトルを持ってきます。タイトルの渡し方は後ほど。
-
= $this->Html->css('styles.css') ?>
- styles.cssというスタイルシートを読み込んでいます。
-
= $this->fetch('content') ?>
- 各ビューファイルの内容がここに代入されます。
my_layout.ctpを全てのビューファイルで適用するために、AppController.phpの初期化処理に以下のコードを追加します。
...
public function initialize()
{
parent::initialize();
$this->viewBuilder()->setLayout('my_layout'); //これを追加
$this->loadComponent('RequestHandler', [
'enableBeforeRedirect' => false,
]);
$this->loadComponent('Flash');
}
...
これでOKです。
さて、次に先ほど述べたタイトルの渡し方です。ビューファイルの先頭で、assignメソッドを用いて以下のように書いてあげます。
<?php
$this->assign('title', 'All Users');
?>
...
こうすると、my_layout.ctp にて、'All users'という文字列を'title'としてfetchできるようになるようです。
また、ビューの一部を使いまわしたい場合は、elementを使いましょう。例えば、ヘッダーは全てのページで共通しますね。全てのビューファイルにいちいち同じヘッダーコードを書く(またはコピペする)のは面倒です。
この場合は、src/Template/Element下に、my_header.ctpを作り、
<header>My Blog</header>
呼び出したい箇所で、= $this->element('my_header') ?>としてあげると、この部分にmy_header.ctpの内容が代入されます。例えば以下のようにします。
<!DOCTYPE html>
<html lang="ja">
<head>
<?= $this->Html->charset() ?>
<title>
<?= $this->fetch('title') ?>
</title>
<?= $this->Html->css('styles.css') ?>
</head>
<body>
<?= $this->element('my_header') ?> <!-- ここにheaderが代入される -->
<section class="container">
<?= $this->fetch('content') ?>
</section>
</body>
</html>
(3)はここまでにします!
CakePHP入門(1)〜初期設定〜
https://qiita.com/jinto/items/f4545dfb02160c424d48
CakePHP入門(2)〜ファイルの作成〜
https://qiita.com/jinto/items/fe1da36b65fd6e704338
CakePHP入門(4)〜バリデーション〜
https://qiita.com/jinto/items/ebdc8b673b5b663de7df