2015-05-01 6 views
13

Sto facendo un piccolo progetto utilizzando Yii2.Modifica file di layout in una vista in Yii2

Supponiamo di avere lo stesso layout (intestazione, piè di pagina) in una vista (ad esempio site) eccetto uno login.php in questa vista. Voglio una diversa o nessuna intestazione/piè di pagina in questo file. Cosa posso fare per rimuovere l'header/footer solo da questo file di visualizzazione.

Tutto ciò che ho potuto ottenere per cambiare il layout in diverse viste. È possibile cambiare il layout in un singolo file di una vista?

risposta

25

All'interno l'azione relativa:

public function actionYourAction($id) 
{ 

$this->layout = 'yourNewLayout'; 

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

Grazie .. ho ottenuto che il lavoro ... :) –

+0

soluzione Grande e immediato :) you rock @scaisEdge fratello. –

10

Sono un po 'in ritardo alla festa, ma si CAN modificare il layout dal tuo punto di vista. Non devi dichiararlo nel tuo controller. Personalmente penso che sia meglio farlo nella vista, perché puoi facilmente vedere dopo cosa sta succedendo. Se esegui modifiche HTML, vai nel file di visualizzazione e puoi facilmente vedere quale layout sta utilizzando. Mettendo questo nel controller, potresti perdere (o qualcuno più avanti) la modifica del layout annidata nell'azione del tuo controller.

Poiché $this si riferisce alla vista in Yii2 e non al controller come in Yii1, il vecchio $this->layout non funziona più dalla vista.

Ora, in Yii2, si fa riferimento al controller dalla propria vista usando $this->context.

5

Nel mio progetto volevo 2 layout: uno per il sito e uno per la webapp. Come il file main.php è il layout di default, ho creato un layout site.php e all'inizio del siteController, subito dopo la dichiarazione della classe, ho messo

public $layout = 'site'; 

Il risultato è che solo le viste di rendering siteController stanno usando il layout site.php. Ha funzionato per me.

0

Sono anche un po 'in ritardo per la festa, ma ho faticato con questa roba oggi ... Per me, creare un layout separato solo perché voglio saltare il piè di pagina o l'intestazione sembra molto codice per la piccola vittoria . Se posso attaccare al layout principale, posso solo arrivare al controller e l'azione attualmente caricato, e lo hanno omesso in questo modo (scrivere questo in main.php):

$contr = Yii::$app->controller->id; 
$action = Yii::$app->controller->action->id; 
$skipFooter = $contr == 'site' && $action == 'login'; //...or enter here what U want 

... e poi in seguito:

<?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; ?>