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在布局中访问,我们需要将其设为image控制器本身的公共属性,然后在test我们初始化 的操作中$image,我们将初始化 public $image,例如:

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

这将允许我们访问布局中的图像,尽管使用$this->image->property.

同样在布局$this中指的是当前控制器,因此我们也可以使用$this->id而不是Yii::app()->getController()->getId()获取控制器ID(名称是此处的图像),$this->action而不是Yii::app()->getController()->getAction()->getId()获取操作ID。

于 2012-04-20T16:57:10.433 回答