Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
Étant débutant sur Zend, je fais appel à vos connaissances pour m'aiguiller quant à la façon la plus propre et la plus légère pour utiliser le composant Zend_Layout.
Je suis chargé de la migration du framework (0.9 ==> 1.6). La version ancienne de l'outil sur lequel je travaille n'utilsait pas Zend_Layout (puisque non implémenté à l'époque) et fonctionnait comme suit :
La page d'accueil (/views/scripts/site.phtml) contenait (/views/scripts/)menu.phtml et lorsque l'on cliquait sur un lien du menu, le contenu s'affichait sous le menu.
Maintenant, j'ai découpé cette structure de façon à avoir :
-(/views/layouts/)header
-(/views/layouts/)menu
-(/views/layouts/)content
Ma question est donc de savoir si je devais conserver mon menu.phtml ou si je devais le réécrire dans (/views/layouts/)menu sachant que ce menu varie suivant la personne loggée ?
D'autre part, il y a quelque chose que je ne saisis pas. A quel moment et de quelle manière ma vue est transmise sur le layout ? J'ai bien essayé de lire quelques tutos, mais je n'arrive tout de même pas à comprendre ce point là.
Je vous remercie par avance de m'avoir lu.
Cordialement,
Nikko
Hors ligne
Le contenu de la vue dans le layout est affiché avec la fonction suivante :
<?= $this->layout()->content ?>
Après oui, heureusement qu'il t'es possible de placer tes divers menus dans des fichiers séparés et d'inclure celui que tu désire.
Je t'invite pour cela à te documenter sur les "partials" :
http://blog.astrumfutura.com/archives/2 … ology.html
Hors ligne
Merci beaucoup dmathieu.
Le code que tu m'as fourni est à placer à la fin de chaque vue pour que le contenu de cette dernière soit affiché dans le layout ?
Je regarde ton lien tout de suite et reviens vers toi si j'ai encore quelques questions.
Merci encore,
Nikko
Dernière modification par Nikko (11-02-2009 15:41:59)
Hors ligne
Non non. Le code est à placer dans le layout pour qu'il affiche le contenu de la vue à cet emplacement.
Hors ligne
Il y a quelque chose qui me perturbe... Comment sait-il quel contenu il doit afficher dans le layout ?
Je te remercie de me consacrer du temps.
Cordialement,
Nikko
Dernière modification par Nikko (12-02-2009 08:37:47)
Hors ligne
Parce que ton script de vue correspond au nom de l'action que tu appelles. Tu peux également définir ce script manuellement si nécessaire.
Ton layout se présentera comme ceci :
<html> <body> <?= $this->layout()->content ?> </body> </html>
En appelant le contrôleur index et l'action index tu appeleras le script index.phtml:
<h1>Hello World</h1>
Et le rendu sera :
<html> <body> <h1>Hello World</h1> </body> </html>
Hors ligne
Bonjour keilnoth,
Je te remercie pour ton explication.
Je n'avais pas prévu ça, mais je suis confronté à un autre problème. Est-il possible d'activer Zend_Layout autre part que dans le bootstrap ?
En fait j'ai une page authentification et ensuite j'accède à mon site. Est-ce que je peux appeler le Zend_Layout::startMvc() une fois l'authentification effectuée ? Ou alors, il y a-t-il une façon de faire plus propre et moins "bourrin" que celle que je viens de proposer ?
Cordialement,
Nikko
Dernière modification par Nikko (12-02-2009 10:08:47)
Hors ligne
C'est à dire que tu as un layout différent pour ta page de login ? Tu dois de toute manière pouvoir t'en sortir en contrôlant si ton utilisateur est authentifié au moment de charger Zend_Layout.
if ($auth->hasIdentity()) { Zend_Layout::startMvc() ; }
Après, je ne peux pas te dire si c'est propre ou non vu que je n'ai pas accès à ton code. Mais ça me parait, à première vue et sans prétention, assez étrange... Le layout ne devrait pas changer à mon avis. Si tu ne désires pas afficher certains objets de ton design qu'à des utilisateurs authentifiés, il vaut mieux te pencher sur des aides de vue ou la gestion des ACL.
Hors ligne
Il est possible de changer le nom du layout.
Je ne sais pas si c'est tres propre, mais j'ai 2 parties qui ne partagent pas du tout le meme graphisme, je ne vois pas comment j'aurai pu faire autrement
Hors ligne
Changer le nom du layout en fonction de la partie de l'application (identifié ou non dans le cas présent) est déjà plus propre que de charger mvc ou pas.
Hors ligne
Oui ce n'est pas gênant d'avoir différents layouts.
Tu as deux ou trois possibilités :
- Soit une seule action/vue est concernée et est totalement différente du reste du site. Donc tu désactives le layout dans l'action ou dans l'init du controlleur si toutes les actions sont concernées, et tu gères tout dans la vue
$this->_helper->layout->disableLayout();
Très rare parce qu'il y a généralement tout le temps des éléments communs, header, menu, footer, etc...
- Soit tu utilises un deuxième layout spécifique que tu charges dans l'action, ou dans l'init du controlleur si toutes les actions sont concernées
$this->_helper->layout->setLayout('layout-login');
- Soit, et là faut se pencher sur la question, je ne sais pas répondre directement, un layout dans un layout, le premier avec tous les éléments communs à toutes les pages, et le deuxième du spécifique pour les parties communes de l'ensemble des vues concernées.
Dans tous les cas tu ne déclenches surtout qu'une fois le startMVC.
A+ benjamin.
Hors ligne
Merci pour la rapidité de ta réponse.
J'ai réussi à implémenter Zend_Layout, mais j'ai l'erreur suivante :
Failed to load source for sourceFile URLOnly http://localhost:9009/index script.tags( )
Est-ce que tu aurais une idée d'où cela pourrait venir ?
Cordialement,
Nikko
Dernière modification par Nikko (12-02-2009 13:54:32)
Hors ligne
Pages: 1