6
votes

Yii2 Advanced - Extend View pour ajouter une variable personnalisée

Je ne suis pas sûr que ce que je vais faire est la meilleure solution Yii pour gérer cela. Je suis donc ouvert à de meilleures solutions. Tout ce qui est le moyen le plus yii de le faire.

J'ai une barre latérale gauche qui doit être montrée à l'utilisateur qui est connectée. Ce n'est pas le problème, je sais comment montrer quelque chose en cochant 'yii :: $ app-> user-> isguest '. p>

sur des pages spécifiques, je ne veux pas que cette barre latérale, même si elles sont connectées. Par exemple, la page "Contactez-nous" n'a pas besoin d'avoir la gauche Barre latérale dessus. Je m'en fiche vraiment si cela a la barre latérale, mais je jette les colonnes Bootstrap3. P>

<div class="container-fluid mainpage">

    <?= Alert::widget() ?>

    <div class="row">

        <?php if (!Yii::$app->user->isGuest) { ?>

            <div class="col-md-3 sidebar">
                <?= Menu::widget([
                    'options' => ['class' => 'nav nav-sidebar'],
                    'items' => [
                            ['label' => 'Home', 'url' => ['site/index']],
                            ['label' => 'About', 'url' => ['site/about']],
                            ['label' => 'Contact', 'url' => ['site/contact']],
                        ],
                    ]);
                ?>
            </div>

            <div class="col-md-9">
                <?= $content ?>
            </div>

        <?php } else { ?>

            <div class="col-sm-12">
                <?= $content ?>
            </div>

        <?php } ?>
    </div>

</div>


5 commentaires

Je l'ai résolu, même si je ne suis pas sûr que ce soit le moyen le plus Yii de le faire. Pour accéder au contrôleur dans Yii2 à partir de votre mise en page (Main.PHP) ou dans les pages de vue (c.-à-d.: Contact.php) que vous utilisez $ ceci-> context-> useidebar . Mettez également Public $ UTILYIDEBAR = true; dans votre contrôleur. Je l'ai vrai comme par défaut car la plupart de mes pages auront la barre latérale, uniquement sur des occasions spéciales que j'en ai besoin. Ensuite, dans Contact.PHP, ou dans l'action du contrôleur, réglez-le sur True / False. - Une autre option serait d'avoir 2 dispositions avec / sans barre latérale et dans la vue (contact.php) modifie le fichier de mise en page.


PS: Je n'ai pas ajouté mon commentaire comme une réponse parce que cela ne répond pas à ma question. Je voudrais toujours savoir comment prolonger la classe d'affichage dans Yii2 Advanced. Je sais comment prolonger un fichier, mais où est-il censé aller? Je sais que je pourrais la mettre n'importe où, mais il doit y avoir une utilisation courante de la mise en place de ces classes étendues pour la cohérence des développeurs.


Quel est le problème avec l'utilisation de 2 mises en page et dans votre action de contrôleur, changez la mise en page si vous en avez besoin? La disposition par défaut peut être celle avec la barre latérale et sur les pages où vous n'avez pas besoin de la barre latérale, vous modifiez la mise en page. Mais je sais que cela ne résout que la moitié de vos problèmes :)


Exactement :) Comme nous le savons tous, il y a beaucoup de routes qui nous emmènent à la même destination. De nombreuses solutions sont des hacks chinois pour obtenir le travail et s'inquiéter des conséquences plus tard. Je sais que la manière appropriée, serait d'étendre la classe et de le personnaliser au besoin, et de ne pas avoir de nombreuses conditionnelles si elles sont dispersées au fond du code que nous oublions plus tard. J'ai déjà défini une variable dans le contrôleur "ShowSidebar", mais ce n'est pas le travail des contrôleurs de déléguer le comportement de la vue. - Donc, ma question tatillade, comment / où puis-je prolonger la classe de vision?


Je viens de trouver un projet sur lequel je travaille utilise également une vue personnalisée. Cochez ma réponse - la vue est un composant afin que vous puissiez simplement le configurer pour utiliser une classe personnalisée de notre propre


3 Réponses :


4
votes

Comme la vue est un composant Yii, vous pouvez le configurer comme d'autres composants du fichier de configuration YII. Il suffit d'ajouter qc comme ce qui suit: xxx


2 commentaires

Où la plupart des gens mettent la plupart des fichiers étendus? J'ai remarqué que vous l'avez mis dans le répertoire "étendu". En outre, la configuration avancée n'a pas de répertoire de composants. Je cherche la convention au lieu de les jeter partout où je veux ce jour-là.


Ok, laissez; s va étape par étape. S'il vous plaît dites-moi si cela fonctionne pour vous, puis nous regardons où placer cela.



2
votes

Je pense que la meilleure solution consiste à créer deux mises en page. Un avec la barre latérale et une autre sans la barre latérale et utilisez la disposition souhaitée.


0 commentaires

0
votes

La meilleure solution selon moi est, créez une table de paramètres de base de données mappée sur l'utilisateur et l'organisation et enregistrez le menu de cette table pour l'utilisateur spécifique par rapport à l'organisation. Donc, vous pouvez contrôler le menu en fonction de l'utilisateur spécifique à l'organisation.

Enregistrer également un menu par défaut dans les paramètres que vous pouvez afficher à l'utilisateur non connecté (car c'est défaut pour tout le monde)


0 commentaires