Yiiでclipsを使ってレイアウトファイルの表示を変更する

レイアウトファイル部分で表示している内容を、特定ページのみ変更したいということがたまにあります。方法としては、以下の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(); ?>

のように書いておきます。(書いておく場所はどこでも構いません)
すると、表示を変更したいページでは、「表示を切り替えました。」と表示され、それ以外のページでは「デフォルトで表示される内容です。」と表示されるようになります。

 

投稿日:
カテゴリー: php タグ: