Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

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

public function actionYourAction($id)
{

$this->layout = 'yourNewLayout';

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

Ответ 2

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

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

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

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

Ответ 3

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

public $layout = 'site';

Результат состоит в том, что только viewController, обработанный сайтом, использует макет site.php. Это сработало для меня.

Ответ 4

Я тоже поздно опаздываю на вечеринку, но сегодня борюсь с этим материалом... Для меня, чтобы создать отдельный макет только потому, что я хочу пропустить нижний колонтитул или заголовок, кажется, много кода для небольшой победы. Если я могу придерживаться основной компоновки, я могу просто добраться до контроллера и действия в настоящее время загружен и пропустил этот путь (напишите это в 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; ?>