繁体   English   中英

在Yii2中更改视图中的布局文件

[英]Change layout file within a view in Yii2

我正在使用Yii2做一个小项目。

假设我在视图(例如site )中具有相同的布局(页眉,页脚),除了此视图中的login.php 我想在此文件中使用不同的页眉/页脚。 我该怎么做才能从此视图文件中删除页眉/页脚。

我只能在不同的视图中更改布局。 是否可以在视图的单个文件中更改布局?

在相对行动内:

public function actionYourAction($id)
{

    $this->layout = 'yourNewLayout';

    return $this->render('yourView', [
        'model' =>$model,
    ]);
}

我有点迟到了,但您可以从您的视图中改变你的布局。 您不必在控制器中声明它。 我个人认为最好在视图中这样做,因为你可以很容易地看到后来发生了什么。 如果您进行HTML编辑,则可以进入视图文件,并轻松查看其使用的布局。 将它放在Controller中,您(或稍后的某个人)可能会错过嵌入控制器操作的布局更改。

由于$this指的是Yii2中的视图,而不是Yii1中的控制器,旧的$this->layout在您的视图中不再起作用。

现在,在Yii2中,您可以使用$this->context从您的视图中引用控制器。

$this->context->layout = 'your-layout';

在我的项目中,我想要2个布局:一个用于站点,一个用于webapp。 由于main.php文件是默认布局,我已经创建了一个site.php布局,并且在siteController的开头,就在类声明之后,我已经放了

public $layout = 'site';

结果是只有siteController渲染视图使用site.php布局。 它对我有用。

我也很晚才参加派对,但今天对这些东西很挣扎......对我来说,创建一个单独的布局只是因为我想跳过页脚或标题看起来像很少的胜利代码。 如果我可以坚持主布局,我可以得到控制器和当前加载的动作,并以这种方式省略它(在main.php中写这个):

$contr   = Yii::$app->controller->id;
$action  = Yii::$app->controller->action->id;
$skipFooter = $contr == 'site' && $action == 'login'; //...or enter here   what U want

......然后:

<?php if (!$skipFooter): ?> //Never at login...
    <footer class="footer">
        <div class="container">
            <p class="pull-left">&copy; YourSite.com <?= date('Y') ?></p>

            <p class="pull-right"><?= Yii::powered() ?></p>
        </div>
    </footer>
<?php endif; ?>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM