簡體   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