1

Yii アプリケーションがあり、レイアウトに静的なサイドバーがあります。コントローラーのアクション、またはビューに応じてサイドバーの内容を変更したいと考えています。現在、views/layouts/main.phpファイルには次のように定義されたサイドバーがあります。

<div class="sidebar">hello!</div>

コントローラーがimageでアクションが の場合test、これを表示したいと思います。

<div class="sidebar">Created at <? echo $image->created_at; ?></div>

$image オブジェクトはimageコントローラーとtestアクションで定義されます。

要するに、コントローラーがimageでアクションが のときにサイドバーを表示したいのですtestが、まったく別のレイアウトにしたくありません。どうすればこれを達成できますか?

4

2 に答える 2

7

クリップ用の作品です。あなたのレイアウトで:

<div class="sidebar">
    <?php if(!empty($this->clips['sidebar'])) {
        echo $this->clips['sidebar'];
    } else { ?>
        hello
    <?php } ?>
</div>

あなたの見解のどこかに:

<?php $this->beginClip('sidebar'); ?>
    Created at <? echo $image->created_at; ?>
<?php $this->endClip(); ?>
于 2012-04-20T23:03:04.750 に答える
2

次のようif-elseに、 を使用して簡単なチェックを入れることができます。getController()getAction()

if(Yii::app()->getController()->getId()=='image' && Yii::app()->getController()->getAction()->getId()=='test'){
    echo '<div class="sidebar">Created at '.$this->image->created_at.'</div>'; 
}
else
    echo '<div class="sidebar">hello!</div>';

レイアウトでアクセスするには、コントローラー自体$imageのパブリック プロパティにする必要があります。次に、を初期化するアクションでpublic を初期化します。例:imagetest$image$image

 class ImageController extends Controller{
     public $image;
     ...
     public function actionTest(){
         $this->image=Example::model()->findByPk(1);// example
         ...
     }
 }

これにより、 を使用してもレイアウト内の画像にアクセスできます$this->image->property

また、レイアウトで$thisは現在のコントローラーを参照するため、コントローラー ID (ここでは画像である名前) を取得する代わりに、アクション ID を取得する$this->id代わりに使用することもできます。Yii::app()->getController()->getId()$this->actionYii::app()->getController()->getAction()->getId()

于 2012-04-20T16:57:10.433 に答える