【问题标题】:Dynamic layout in YiiYii 中的动态布局
【发布时间】:2012-04-20 15:52:26
【问题描述】:

我有一个 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 时,我想显示一个侧边栏,但是,我不希望有完全不同的布局。我怎样才能做到这一点?

【问题讨论】:

  • 尝试使用Yii::app()-&gt;controller-&gt;id作为控制器名称和Yii::app()-&gt;controller-&gt;action-&gt;id?

标签: php yii sidebar


【解决方案1】:

这是剪辑的工作。在您的布局中:

<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(); ?>

【讨论】:

    【解决方案2】:

    您可以像这样使用getController()getAction() 进行简单的if-else 检查:

    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控制器本身的公共属性,然后在我们初始化$image的动作test中,我们将初始化公共$image ,例如:

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

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

    同样在布局中$this 指的是当前控制器,因此我们也可以使用$this-&gt;id 而不是Yii::app()-&gt;getController()-&gt;getId() 来获取控制器id(这里的名称是image)和@ 987654335@ 而不是 Yii::app()-&gt;getController()-&gt;getAction()-&gt;getId() 来获取操作 ID。

    【讨论】:

    • 正如 llamerr 所说,您也可以使用 Yii::app()-&gt;controller-&gt;id
    • mashingan 下面的解决方案也需要注意,使用 CClipWidget。
    猜你喜欢
    • 2013-11-23
    • 2013-07-26
    • 2013-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多