2016-04-27 2 views
2

Zuvor hatte ich main.php wo Header & Fußzeile deklariert wurden. Was ist Ok. Jetzt suche ich nach 2 verschiedenen Layouts für Guest User & Registered User. In denen Registered User und Admin unterschiedliche Kopfzeile haben & Fußzeile.Zwei verschiedene Layouts für Gastbenutzer und angemeldeten Benutzer- Yii2

Ich benutze Yii2 Basic App. Ich erstellte GuestUser.php & RegisteredUser.php innerhalb views/layouts/ Ordner.

Gastbenutzer bedeutet, dass Benutzer die Anwendung nicht angemeldet hat. Registrierter Benutzer bedeutet, dass der Benutzer sich in der Anwendung angemeldet hat.

Jetzt ist meine Verzeichnisstruktur wie folgt. Jetzt

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

, Wie kann ich GuestUser.php & RegisteredUser.php für meine Anwendung. Derzeit nimmt die Anwendung standardmäßig main.php. Wie kann ich das kontrollieren?

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:[email protected]">[email protected]</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();?> 
<?}?> 

Jede Hilfe/Hinweis/Vorschläge ist spürbar. Bitte helfen Sie.

+0

Bitte erläutern Warum abgelehnt? Nicht einfach runterstimmen. –

+0

Und was Sie bekommen, indem Sie meine alten Fragen ablehnen. * Einfach eklig. * –

Antwort

5

Eine Möglichkeit, dies für die gesamte Anwendung zu erreichen, könnte eine Anwendung Ereignishandler gesetzt sein verwenden und die Layout-Datei konfigurieren:

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

Wenn Sie es nur in einem einzigen Controller tun möchten Sie layout nutzen könnten in der Steuerung. Überschreiben Sie einfach dieses Mitglied mit dem Dateinamen (ohne .php) in Ihrem Controller.

+0

Bitte helfen. Ich bin mir dieses Szenarios nicht bewusst. –

+0

Okay, Sie brauchen es Anwendung breit? – robsch

+0

** Ja **. Vor dem Login -> verschiedene Header & Nach Login -> andere Header. –