2011-06-05 1 views
1

Je souhaite des en-têtes différents pour ma page de destination et toutes les autres pages de ma webapp. Quelle est la meilleure façon de procéder? Pour autant que je sache, l'en-tête et le pied de page sont chargés à partir de view/layouts/main.php. Dans mon cas, puisque j'utilise un thème, il est chargé depuis themes/new/views/layouts/main Maintenant je veux la section d'en-tête pour toutes mes pages excepté la page d'atterrissage, pour employer la section d'en-tête telle que définie dans le "main.php", cependant la page d'atterrissage devrait avoir un en-tête différent. Comment dois-je faire cela? Dois-je utiliser un rendu partiel? Et depuis que je suis débutant Yii, comment dois-je faire cela? Puis-je également utiliser l'un des autres fichiers de disposition, column1.php ou column2.php? Et comment?En-têtes personnalisés du framework Yii

Je ne cherche pas une tenue de main étendue ici. J'ai juste besoin d'une tête, quant à la façon dont les gens ont mis en œuvre des fonctionnalités similaires.

+0

Résolu moi-même par 1. Création d'une mise en page différente (que j'utilise sur la page de destination) - appeler front.php 2. Dans le contrôleur pour la page que je voulais une mise en page différente pour (Homepage, So dans SiteController actionIndex). J'ai ajouté ce $ this-> layout = '// layouts/front'; – Abhinav

Répondre

1

Cela dépend en partie de la différence entre les en-têtes de votre approche. Si vous voulez qu'ils soient complètement séparés, vous pouvez utiliser des fichiers de mise en page supplémentaires en combinaison avec main.php ou à la place.

Vous définissez le fichier de mise en page au début de la classe de contrôleur avec quelque chose comme:

public $layout='//layouts/column2'; 

Cela définira la mise en page par défaut pour un contrôleur. Vous pouvez modifier la valeur d'une fonction d'action ou évaluer une condition dans la fonction "beforeAction". Les pages d'administration générées par défaut (avec "gii" ou la ligne de commande) utilisent les mises en page column1.php et column2.php avec main.php et fournissent un exemple décent pour voir comment elles fonctionnent. Il suffit de déplacer le contenu de main.php que vous souhaitez personnaliser et le mettre dans des fichiers de mise en page distincts. Si vous partagez encore du contenu, vous pouvez laisser le contenu partagé dans main.php. S'il s'agit juste de changer quelques attributs, vous pouvez utiliser $this->getAction()->getId() pour obtenir le nom de l'action et l'utiliser pour changer le contenu chargé dans la mise en page, par exemple un certain fichier css ou js. Toute logique complexe que vous voudriez faire dans le contrôleur.

Pour quelque chose comme une barre de navigation ou similaire, vous pouvez également utiliser include ou renderPartial base sur une variable d'environnement que vous définissez dans le contrôleur.

0

Je suis généralement créer un widget comme HeaderWidget avec quelques fichiers de vue et d'inclure dans la mise en page principale. Dans le contrôleur ou l'action définir le fichier de vue nécessaire de l'en-tête et les transmettre dans le widget.

Dans le contrôleur de base, vous pouvez définir la propriété public $ headerName = 'defaultHeaderView' Et la valeur définie dépend de certaines conditions.

Evidement, vous devez créer BController étend CController et tous les autres contrôleurs étend à partir de votre BController

Questions connexes