k01ken’s b10g

He110 W0r1d!

CakePHP3で部分テンプレート(エレメント)を使う

開発環境は、Windows 7 Professional(32bit)+XAMPP v3.22+CakePHP 3.5.8。

異なるページで共通するHTMLを部分テンプレートとして読み込みたいと思い、作り方を調べたのでメモ。サイトのデザインを大まかに決めたら一番初めに書いておくべきものだ。これによって、変更したい場合は、1か所のテンプレートを変更するだけで良くなるので便利だ。

ファイル名は任意で良いのですが、今回は、以下のファイルを、partial_template.ctpという名前で、src/Template/Elementディレクトリに保存する。

<div id="partial_template">部分テンプレートです。</div>


■呼び出す
テンプレート側で、

<?= $this->element('partial_template') ?>

と書いて出力すると部分テンプレートの中身が表示されます。


■テンプレートの変数を部分テンプレートに渡す場合

部分テンプレート側

<div id="partial_template"><?= $username ?>さん、こんにちは。</div>

テンプレート側

<?php
	$username = "taro";

	echo $this->element('partial_template', ['username' => $username]);
?>

呼び出しているテンプレート側でechoを用いて、出力していますが、部分テンプレート側でechoを使って、(echoの中でechoを使っているような構造だけれど)変数を表示してもエラーには特になりません。

さらに、エレメントの中にエレメントを記述して、多層構造のようにもできる。

参考リンク
CakePHPで部分テンプレート(エレメント)を使う - データ分析エンジニアのブログ
https://book.cakephp.org/3.0/ja/views.html#view-elements