CakePHPでビューの共通部分を別ファイルに記述する

複数のビュー(View)で同じ記述がある場合、Element(エレメント)を使うことで同一部分を部品化できます。

Elementの書き方

書き方は通常のビューテンプレート(.ctpファイル)と同じです。共通部分のビューテンプレートを\{CakePHPプロジェクト}\src\Template\Elementに配置します。

sidemenu.ctp
<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側で変数名になります。

このエントリーをはてなブックマークに追加
にほんブログ村 IT技術ブログへ

コメント

メールアドレスが公開されることはありません。 が付いている欄は必須項目です