来宾用户的两种不同布局登录用户- Yii2 [英] Two different layouts for Guest User & Logged in User- Yii2

查看:22
本文介绍了来宾用户的两种不同布局登录用户- Yii2的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

以前,我在 ma​​in.php 中使用 header &页脚被声明.这是好的.现在,我正在为 Guest User & 寻找 2 种不同的布局.注册用户.其中 Registered UserAdmin 将有不同的标题 &页脚.

我正在使用 Yii2 基本应用程序.我创建了 GuestUser.php &RegisteredUser.php 位于 views/layouts/ 文件夹中.

访客用户表示用户尚未登录应用程序.并且,注册用户是指用户已登录应用程序.

现在,我的目录结构是这样的.

 视图->布局-> main.php->GuestUser.php->注册用户.php->网站

现在,我如何使用 GuestUser.php &RegisteredUser.php 用于我的应用程序.目前,应用程序默认采用 ma​​in.php.我该如何控制?

GuestUser.php

<?php $this->beginPage() ?><html lang="<?= Yii::$app->language ?>"><头><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'><身体><?php $current_controller_id = Yii::$app->controller->module->id;?><?php $this->beginBody() ?><?php $baseUrl = Yii::$app->params['baseUrl'];?><div class="容器"><nav class="navbar navbar-default navbar-fixed-top" role="navigation"><div class="全宽灰色底部标题"><div class="top_section-bg"><div class="top_section 容器"><ul><li>有任何问题吗?&nbsp;</li><li><i class="fa fa-phone fa-lg"></i><span class="header-small-text">+1 &nbsp;1234567890&nbsp;&nbsp;&nbsp;</span><li><i class="fa fa-envelope-o fa-lg"></i><span class="header-small-text"><a href="mailto:hello@abc.com">hello@abc.com</a></span>

<div class="menu-bg"><div class="容器"><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">切换导航</span><span class="icon-bar"></span><span class="icon-bar"></span><span class="icon-bar"></span><a class="navbar-brand" href="index.php"><img src="<?php echo $baseUrl;?>images/logo.png" class="logo" id="徽标"></a>

<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">关于</a></li>

</nav>

<?=$content;?>

<div class="col-sm-12 copy">&copy;版权ABC,2016.保留所有权利.<span class="隐私"><a href="">隐私</a></span>|<span class="隐私"><a href="">条款和条件条件</a></span>

</节><?php $this->endBody() ?></html><?php $this->endPage() ?>

注册用户.php

<?php $this->beginPage() ?><!DOCTYPE html><html lang="<?= Yii::$app->language ?>"><头><meta charset="<?= Yii::$app->charset ?>"><meta name="viewport" content="width=device-width, initial-scale=1"><?= Html::csrfMetaTags() ?><title>ABC</title><?php $this->head() ?><身体><?php $current_controller_id = Yii::$app->controller->module->id;?><?php $this->beginBody() ?><div class="wrap"><?php$baseUrl = Yii::$app->params['baseUrl'];导航栏::开始(['品牌标签' =>'<img src="'.$baseUrl.'logo/ABC.png" style="margin-top:-15px;">','brandUrl' =>Yii::$app->homeUrl,'选项' =>['类' =>'导航栏反向导航栏固定顶部',],]);导航栏::结束();?><footer class="footer"><div class="容器"><p class="text-center">&copy;ABC

</页脚><?php $this->endBody() ?></html><?php $this->endPage() ?>

我试过了

ma​​in.php

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();?><?}?>

任何帮助/提示/建议都是可观的.请帮忙.

解决方案

为整个应用程序实现此目的的一种方法可能是设置使用应用程序事件处理程序并配置布局文件:

//在web.php中$配置 = [....'on beforeRequest' =>函数($事件){Yii::$app->layout = Yii::$app->user->isGuest ?'@app/views/layouts/GuestUser.php' ://或者只使用 'GuestUser' 和'@app/views/layouts/RegisteredUser.php';//'RegisteredUser' 自路径//并且扩展名被使用//默认},....];

如果您只想在单个控制器中执行此操作,则可以使用 布局 在控制器中.只需使用控制器中的文件名(不带 .php)覆盖该成员即可.

Previously, I was having main.php where header & footer were declared. Which is Ok. Now, I am looking for 2 different layouts for Guest User & Registered User. In which Registered User and Admin will have different header & footer.

I am using Yii2 Basic App. I created GuestUser.php & RegisteredUser.php inside views/layouts/ folder.

Guest User means User has not logged in the application. And, Registered User means User Has logged in the Application.

Now, My directory structure is like this.

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

Now, How can I use GuestUser.php & RegisteredUser.php for my application. As for now, Application is taking main.php by default. How can I control this ?

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() ?>

I Tried

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();?>
<?}?>

Any help/hint/suggestions is appreciable. Please help.

解决方案

One way to achieve this for the whole application might be to set use an application event handler and configure the layout file:

//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
    },
    ....
];

If you want to do it only within a single controller you could use layout in the controller. Just override this member with the file name (without .php) in your controller.

这篇关于来宾用户的两种不同布局登录用户- Yii2的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆