web-dev-qa-db-fra.com

Changer le fichier de présentation dans une vue en Yii2

Je fais un petit projet en utilisant Yii2.

Supposons que j'ai la même disposition (en-tête, pied de page) dans une vue (par exemple site) à l'exception d'un login.php dans cette vue. Je veux un en-tête/pied de page différent ou pas dans ce fichier. Que puis-je faire pour supprimer l'en-tête/le pied de page uniquement à partir de ce fichier de vue?.

Tout ce que je pouvais faire pour changer de mise en page dans différentes vues. Est-il possible de changer la disposition dans un seul fichier d'une vue?

15
Moid Mohd

Dans l'action relative: 

public function actionYourAction($id)
{

    $this->layout = 'yourNewLayout';

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

Je suis un peu en retard pour la fête, mais vous POUVEZ modifier votre mise en page depuis votre vue. Vous n'êtes pas obligé de le déclarer dans votre contrôleur. Personnellement, j'estime qu'il est préférable de le faire dans la vue, car vous pouvez facilement voir plus tard ce qui se passe. Si vous apportez des modifications HTML, vous iriez dans le fichier view et pourrez facilement voir la mise en page utilisée. En mettant cela dans le contrôleur, vous (ou quelqu'un plus tard) pourriez manquer le changement de disposition imbriqué dans l'action de votre contrôleur.

Puisque $this fait référence à votre vue dans Yii2 et non à votre contrôleur comme dans Yii1, l’ancien $this->layout ne fonctionne plus dans votre vue.

Maintenant, dans Yii2, vous faites référence au contrôleur depuis votre vue en utilisant $this->context.

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

Dans mon projet, je voulais 2 dispositions: une pour le site et une pour la webapp. Comme le fichier main.php est la présentation par défaut, j'ai créé une présentation site.php et au début de siteController, juste après la déclaration de classe, j'ai mis

public $layout = 'site';

Il en résulte que seules les vues rendues par siteController utilisent la présentation site.php. Cela a fonctionné pour moi.

5
xav

Je suis aussi un peu en retard pour la fête, mais je me suis battu avec ce genre de choses aujourd’hui ....... Pour moi, créer une mise en page séparée simplement parce que je veux ignorer le pied de page ou l’en-tête me semble beaucoup plus codé Si je peux m'en tenir à la disposition principale, je peux obtenir le contrôleur et l'action Actuellement chargés, et les omettre de cette façon (écrivez ceci dans main.php):

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

... et plus tard:

<?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; ?>
0
Perry J