Изменение файла макета в представлении в Yii2


Я делаю небольшой проект с использованием Yii2.

Предположим, что у меня такой же макет (верхний и нижний колонтитулы) в представлении (например, site), за исключением login.php в этом представлении. Я хочу, чтобы в этом файле был другой верхний/нижний колонтитул или его не было. Что я могу сделать, чтобы удалить верхний/нижний колонтитул только из этого файла представления.

Все, что я мог сделать, чтобы изменить макет в разных представлениях. Можно ли изменить макет в одном файле представления?

Author: arogachev, 2015-05-01

4 answers

Внутри относительного действия:

public function actionYourAction($id)
{

    $this->layout = 'yourNewLayout';

    return $this->render('yourView', [
        'model' =>$model,
    ]);
}
 26
Author: scaisEdge, 2018-05-13 19:13:17

Я немного опоздал на вечеринку, но вы МОЖЕТЕ изменить свой макет в своем представлении. Вам не нужно объявлять это в своем контроллере. Лично я считаю, что лучше делать это в поле зрения, потому что позже вы легко сможете увидеть, что происходит. Если вы вносите изменения в HTML, вы зайдете в файл представления и легко сможете увидеть, какой макет он использует. Поместив это в контроллер, вы (или кто-то позже) можете пропустить изменение макета, вложенное в ваш контроллер действие.

Поскольку $this относится к вашему представлению в Yii2, а не к вашему контроллеру, как это было в Yii1, старый $this->layout больше не работает в вашем представлении.

Теперь в Yii2 вы ссылаетесь на контроллер из своего представления, используя $this->context.

$this->context->layout = 'your-layout';
 10
Author: Wade, 2015-06-19 07:56:15

В своем проекте я хотел 2 макета: один для сайта и один для веб-приложения. В качестве main.php файл - это макет по умолчанию, я создал site.php макет и в начале SiteController, сразу после объявления класса, я поставил

public $layout = 'site';

В результате только отображаемые представления SiteController используют site.php планировка. Это сработало для меня.

 5
Author: xav, 2016-06-14 15:27:44

Я тоже немного опоздал на вечеринку, но сегодня боролся с этим... Для меня создание отдельного макета только потому, что я хочу пропустить нижний колонтитул или верхний колонтитул, кажется большим количеством кода для маленькой победы. Если я смогу придерживаться основного макета, я могу просто добраться до контроллера и загруженного в данный момент действия и опустить его таким образом (напишите это в 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; ?>
 0
Author: Perry J, 2017-05-12 11:27:01