CakePHPでビューの共通部分を別ファイルに記述する
複数のビュー(View)で同じ記述がある場合、Element(エレメント)を使うことで同一部分を部品化できます。
Elementの書き方
書き方は通常のビューテンプレート(.ctpファイル)と同じです。共通部分のビューテンプレートを\{CakePHPプロジェクト}\src\Template\Element
に配置します。
<div class="side-menu">
<p>サイドメニュー</p>
<nav class="nav flex-column">
<a href="<?= $this->Url->build("/sample/function-one", true); ?>">機能1</a>
<a href="<?= $this->Url->build("/sample/function-two", true); ?>">機能2</a>
<a href="<?= $this->Url->build("/sample/function-three", true); ?>">機能3</a>
<a href="<?= $this->Url->build("/sample/function-four", true); ?>">機能4</a>
</nav>
</div>
呼び出し側の記述
呼び出し側ビューテンプレートで$this->element()
を使ってElementの読み込みを行います。引数はElementファイルのファイル名になります。
<?php echo $this->element('sidemenu'); ?>
または
<?= $this->element('sidemenu'); ?>
引数を渡す
$this->element()
の第二引数に連想配列で引数を渡すことが可能です。$this
でアクセスするものはElement側で参照できますが、それ以外の変数は参照できないため、引数で渡す必要があります。
呼び出し例
<?= $this->element('sidemenu', ['select' => 'two']); ?>
Elementでの使用例
<?php if ($select == 'two'): ?>
<p>機能2</p>
<?php else: ?>
<a href="<?= $this->Url->build("/sample/function-two", true); ?>">機能2</a>
<?php endif; ?>
連想配列のキーがElement側で変数名になります。