Intereting Posts
Сохранить строку вывода cURL Display в переменной PHP PHP хранит пароль в cookie Как использовать графический API Facebook для извлечения фан-фотографий, загруженных на стену страницы поклонников? Файловый кэш APC не работает, но пользовательский кеш прекрасно Javascript выводится из отдельного скрипта php php получить все изображения с url, ширина и высота которых> = 200 быстрее Показать диалоговое окно «Сохранить как» при загрузке файла из iframe через PHP PHP: поля $ _POST пустые mysqli_insert_id: Что, если кто-то вставляет другую строку непосредственно перед тем, как я позвоню? Добавление комментария Jira с использованием мыла в PHP Как добавить значения из нескольких форм HTML в один массив для отправки preg_match (): Ошибка компиляции: значение символа в \ x {} или \ o {} слишком велико при смещении 27 по строке 25 установить PHP cookie на клик Обнаруживать каждый 4 с использованием модуля php В чем смысл \ x00, \ x04 в PHP

Два разных макета для гостевого пользователя и вошли в систему User-Yii2

Раньше у меня был main.php, где были объявлены header и footer. Что хорошо. Теперь я ищу 2 разных макета для Guest User & Registered User . В котором у Registered User и Admin будет другой заголовок и нижний колонтитул.

Я использую приложение Yii2 Basic. Я создал GuestUser.php & RegisteredUser.php внутри views/layouts/ папок.

Гость Пользователь означает, что пользователь не зарегистрировался в приложении. И зарегистрированный пользователь означает, что пользователь зарегистрировался в приложении.

Теперь моя структура каталогов выглядит так.

 views ->layouts ->main.php ->GuestUser.php ->RegisteredUser.php ->site 

Теперь, как я могу использовать GuestUser.php & RegisteredUser.php для моего приложения. На данный момент приложение принимает main.php по умолчанию. Как я могу это контролировать?

GuestUser.php

 <?php use yii\helpers\Html; use app\assets\LocalAsset; LocalAsset::register($this); ?> <?php $this->beginPage() ?> <html lang="<?= Yii::$app->language ?>"> <head> <meta charset="<?= Yii::$app->charset ?>"> <meta name="viewport" content="width=device-width, initial-scale=1"> <?= Html::csrfMetaTags() ?> <title>ABC</title> <?php $this->head() ?> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.4.0/css/font-awesome.min.css"> <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,600' rel='stylesheet' type='text/css'> <link href='https://fonts.googleapis.com/css?family=Oswald:400,700' rel='stylesheet' type='text/css'> </head> <body> <?php $current_controller_id = Yii::$app->controller->module->id;?> <?php $this->beginBody() ?> <?php $baseUrl = Yii::$app->params['baseUrl'];?> <div class="container"> <nav class="navbar navbar-default navbar-fixed-top" role="navigation"> <div class="full-width grey bottom-header"> <div class="top_section-bg"> <div class="top_section container"> <ul> <li>Have any Questions?&nbsp;</li> <li> <i class="fa fa-phone fa-lg"></i> <span class="header-small-text">+1 &nbsp;1234567890&nbsp;&nbsp;&nbsp;&nbsp;</span> </li> <li> <i class="fa fa-envelope-o fa-lg"></i> <span class="header-small-text">&nbsp;<a href="mailto:hello@abc.com">hello@abc.com</a></span> </li> </ul> </div> </div> <div class="menu-bg"> <div class="container"> <div class="navbar-header big_log" > <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1"> <span class="sr-only">Toggle navigation</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> <a class="navbar-brand" href="index.php"><img src="<?php echo $baseUrl;?>images/logo.png" class="logo" id="logo"></a> </div> <div class="collapse navbar-collapse menu_font" id="bs-example-navbar-collapse-1"> <ul class="nav navbar-nav navbar-right"> <li class=""><a href="about.php">About</a></li> </ul> </div> </div> </div> </div> </nav> </div> <?=$content;?> <section class="section11"> <div class="col-sm-12 copy"> &copy;Copyright ABC, 2016. All Rights Reserved. <span class="privacy"> <a href="">Privacy</a></span> | <span class="privacy"> <a href=""> Terms & Conditions</a></span> </ul> </div> </section> <?php $this->endBody() ?> </body> </html> <?php $this->endPage() ?> 

RegisteredUser.php

 <?php use yii\helpers\Html; use yii\bootstrap\Nav; use yii\bootstrap\NavBar; use yii\widgets\Breadcrumbs; use app\assets\AppAsset; use app\models\MyActiveRecord as AR; AppAsset::register($this); ?> <?php $this->beginPage() ?> <!DOCTYPE html> <html lang="<?= Yii::$app->language ?>"> <head> <meta charset="<?= Yii::$app->charset ?>"> <meta name="viewport" content="width=device-width, initial-scale=1"> <?= Html::csrfMetaTags() ?> <title>ABC</title> <?php $this->head() ?> </head> <body> <?php $current_controller_id = Yii::$app->controller->module->id;?> <?php $this->beginBody() ?> <div class="wrap"> <?php $baseUrl = Yii::$app->params['baseUrl']; NavBar::begin([ 'brandLabel' => '<img src="'.$baseUrl.'logo/ABC.png" style="margin-top:-15px;">', 'brandUrl' => Yii::$app->homeUrl, 'options' => [ 'class' => 'navbar-inverse navbar-fixed-top', ], ]); NavBar::end(); ?> <footer class="footer"> <div class="container"> <p class="text-center">&copy; ABC<?= date('Y') ?></p> </div> </footer> <?php $this->endBody() ?> </body> </html> <?php $this->endPage() ?> 

Я пытался

main.php

 <?php if(Yii::$app->user->isGuest){?> <?php $this->beginContent('@app/views/layouts/GuestUser.php'); ?> <?=$content;?> <?php $this->endContent();?> <?php } else {?> <?php $this->beginContent('@app/views/layouts/RegisteredUser.php'); ?> <?=$content;?> <?php $this->endContent();?> <?}?> 

Любая помощь / подсказка / предложения заметны. Пожалуйста помоги.

Одним из способов достижения этого для всего приложения может быть использование обработчика событий приложения и настройка файла макета:

 //in web.php $config = [ .... 'on beforeRequest' => function ($event) { Yii::$app->layout = Yii::$app->user->isGuest ? '@app/views/layouts/GuestUser.php' : // or just use 'GuestUser' and '@app/views/layouts/RegisteredUser.php'; // 'RegisteredUser' since the path // and the extension are used by // default ], .... ]; 

Если вы хотите сделать это только внутри одного контроллера, вы можете использовать макет в контроллере. Просто переопределите этот элемент с именем файла (без .php) в вашем контроллере.