やったこと

webサービスを作るときに考えたことを垂れ流します

【CakePHP3】エレメントを使って簡単にビュー表示!

CakePHP3の画面レイアウト処理で「エレメント」の機能を使うと便利です。

エレメントとは、画面デザインのパーツを再利用できるように定義できる機能です。

例えば「display.ctp」で以下のような画面レイアウトを記述していたとします。

<?php
  //テンプレートファイル「display.tcp」

  if ($is_login){
    $login_str = "ログイン中!";
  }else{
    $login_str = "ログアウト中!";
  }
?>

<div class="masthead">
 <p>ヘッダーだよ!(<?= $login_str ?>;)</p>
</div><!-- masthead -->

<div class="content">
 <p>コンテンツだよ!</p>
</div><!-- content -->

<div class="footer">
 <p>フッターだよ!</p>
</div><!-- footel -->


このヘッダー部分(masthead)を他のctpファイルでも使い回したい。

そんなときは「/src/Template/Element/」ディレクトリに「masthead.ctp」を作成しましょう。

これがエレメントとして機能します。

<?php
  //テンプレートファイル「masthead.ctp」
?>
<div class="mastheadt">
 <p>ヘッダーだよ!(<?= $login_str ?>;)</p>
</div><!-- masthead -->


元の「display.ctp」ファイルでは、以下のようにしてエレメントを呼び出します(引数で変数を渡すこともできます)

<?php
  //テンプレートファイル「display.tcp」

  if ($is_login){
    $login_str = "ログイン中!";
  }else{
    $login_str = "ログアウト中!";
  }
?>

<?php echo $this->element('masthead', ['login_str'=>$login_str]); ?>

<div class="content">
 <p>コンテンツだよ!</p>
</div><!-- content -->

<div class="footer">
 <p>フッターだよ!</p>
</div><!-- footel -->

こうやってエレメントを使いまわすとコードがずいぶんシンプルになりますね。

以上でう!