2009-11-19 5 views
4

Je suis assez nouveau pour Zend .. Je me demande simplement comment modéliser la disposition/structure de mon site. Mon site aura une section de profil d'utilisateur, section d'admin, et le générique l'affichage par défaut du site.Zend Framework - meilleures pratiques de mise en page pour 'includes'

Pour l'administrateur et le profil, je vais avoir des éléments personnalisés dans les en-têtes et pieds de page, sinon je veux par défaut un en-tête générique/pied de page.

Je veux la capacité d'avoir une peau entièrement personnalisée séparée de la vue par défaut, comment dois-je structurer les choses?

Jusqu'à présent, j'ai ont créé un répertoire nommé application/layouts. Je l'ai modifié le fichier application.ini il représente que:

resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts" 

donc mon point de vue de la mise en page par défaut existe maintenant application/layouts/scripts/layout.phtml, je l'en-tête et pied de page intégré dans ce fichier layout.phtml mais je voudrais dépouiller les sortir et les avoir dans des fichiers séparés.

Quelqu'un pourrait-il me aider à venir avec la structure pour cela? Donc, pour réitérer je veux une mise en page par défaut personnalisée, mise en page d'administration personnalisée, mise en page de profil utilisateur personnalisé, et pour les 3 mises en page je veux inclure/incline "inclut" mais je ne sais pas comment cela se fait correctement dans Zend suis habitué à inclure des fichiers.

Répondre

9

Structure du répertoire:

/application 
    /layouts 
    /scripts 
     /layout.phtml 
     /profile.phtml 
     /admin.phtml 
     /_header.phtml 
     /_footer.phtml 

layout.phtml:

<?php echo $this->doctype('HTML4_STRICT') ?> 
<html> 
<head> 
    <title>Bah</title> 
</head> 
<body> 
    <?php echo $this->render('_header.phtml') ?> 
    <?php echo $this->layout()->content ?> 
    <?php echo $this->render('_footer.phtml') ?> 
</body> 
</html> 

profile.phtml:

<?php echo $this->doctype('HTML4_STRICT') ?> 
<html> 
<head> 
    <title>Profile</title> 
</head> 
<body> 
    <!-- profile header --> 
    <?php echo $this->layout()->content ?> 
    <!-- profile footer--> 
</body> 
</html> 

FooController.php:

profileAction() 
{ 
    // do stuff 
    $this->_helper->layout->setLayout('profile'); 
} 

Cette méthode vous permet de changer toute la structure de la page des différentes mises en page (L'administrateur a besoin tout à coup une barre latérale!). Vous échangez une partie de la duplication de code pour améliorer la flexibilité et la maintenabilité. Si cela n'est pas important pour vous, une aide à la vue fonctionnerait également (interrogez le contrôleur frontal pour savoir si la requête provient des actions d'admin ou de profil, switch). À mon goût cependant, ce type de logique est trop impliqué pour appartenir à la vue.

+0

Génial, juste ce dont j'avais besoin - je vais essayer l'implémentation. –

1

Pour avoir une autre mise en page/config pour différentes sections d'un site, d'utiliser des modules avec la configuration du module suivant. Module Config

[Modifier]

Structure du répertoire:

/application 
    /forms 
    /models 
    /modules 
     /admin 
      /config 
      /contollers 
      /layout 
      /views 
     /default 
      /config 
      /contollers 
      /layout 
      /views 
+0

En quoi les modules diffèrent-ils des aides à la vue ou des aides à la vue partielle? –

+0

J'utilise cette méthode car chaque module possède sa propre mise en page et son propre répertoire de configuration, ce qui signifie que le contrôleur ne définit pas la disposition alternative. Je trouve que cela facilite le contrôle de l'accès par ACL avec les modules. Structure du répertoire: /application /formes /modèles /modules /admin /config /contollers /layout /vues /default /config /contollers /layout /vues – piddl0r

+0

EWW des thats moche, je vais l'ajouter à la réponse – piddl0r

-1

Une mise en œuvre que j'utilise est la suivante:

Dans chacun des mise en page des fichiers PHTML (par défaut, admin, etc.) J'utilise:

donc dans mon contrôleur de page que je peux avoir une action appelée « headerAction » ou « adminHeaderAction » qui ne fait rien (ou pourrait effectivement effectuer des tâches spécifiques) mais renvoie une header.phtml (où je peux personnaliser mes informations d'en-tête pour cette mise en page). Je peux ensuite personnaliser mon en-tête et pied de page séparément du contenu.

Dans mon contrôleur j'ai juste besoin de définir la mise en page appropriée:

$this->_helper->layout->setLayout('adminLayout'); 
+1

c'est faux comme l'action helper déclenche une nouvelle boucle de demande. C'est lent. –

+0

D'accord. L'assistant de vue d'action est diabolique. J'aurais aimé qu'ils l'enlèvent déjà :) http://framework.zend.com/issues/browse/ZF-5840 –

+1

Bon point. Je n'ai jamais pensé au voyage aller-retour supplémentaire (pour chacun). –

1

Si les aides de vue sont l'utilisation complexe aide de vue concret. Si elles sont simples comme <h1>my title</h1>, utilisez l'assistant d'affichage partiel pour rendre un modèle.

+0

Cela vous dérange de fournir un exemple de structure au moins, et un exemple de code de l'inclusion des assistants de vue partielle en utilisant les noms de fichiers header.phtml et footer.phtml, ou bien ça marche? –

+0

// en-tête partial ('header.phtml', $ optionalArrayWithDataToBeUsedInside); le second paramètre comme array ('title' => 'ma page') vous permet d'utiliser 'echo $ this-> title' dans votre partiel. Pour la configuration de l'assistant d'affichage, voir le manuel. –

Questions connexes