レイアウトファイル部分で表示している内容を、特定ページのみ変更したいということがたまにあります。方法としては、以下の2つの方法が考えられます。
- 複数のレイアウトを用意する
- clipsを使う
複数のレイアウトを用意する
特定ページのみ、views/layouts/main.phpでなく、views/layouts/main2.phpを利用するというような設定ができます。この方法の場合、
views/layouts/main2.phpに
<html> <head></head> <body> <?php echo $content; ?> </body> </html>
のように書けば、まったく新規にレイアウトを作成できます。また、views/layouts/main.phpを利用して、かつ、修正を追加したいような場合は、
<?php $this->beginContent('//layouts/main'); ?> <div>これはmain2のレイアウトです</div> <?php echo $content; ?> <?php $this->endContent(); ?>
のような感じにすればすればよいです。
なお、views/layouts/main2.phpを利用する場合は、コントローラで
public function actionIndex() { $this->layout = 'main2';
のように書きます。
clipsを使う
複数のレイアウトファイルを用意するほどでもない場合、clipsを使えば簡単に表示を変更することができます。
views/layouts/main.phpでは、表示を変更したい箇所を以下のように修正します。
<?php if(empty($this->clips['messages'])): ?> デフォルトで表示される内容です。 <?php else: ?> <?php echo $this->clips['messages']; ?> <?php endif; ?>
また、表示を変更したいヴューのファイルでは
<?php $this->beginClip('messages'); ?> 表示を切り替えました。 <?php $this->endClip(); ?>
のように書いておきます。(書いておく場所はどこでも構いません)
すると、表示を変更したいページでは、「表示を切り替えました。」と表示され、それ以外のページでは「デフォルトで表示される内容です。」と表示されるようになります。