Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
je cherche à mettre en place un squelette d'application
et malgré la lecture de nombreux tutoriels, je m'embrouille.
La structure souhaitée pour mon application serait celle-ci :
- header commun
- menu de navigation commun (permettant de naviguer entre les sections du site)
- gauche : menu spécifique à chaque section
- droite : contenu spécifique à chaque page
- footer commun
Je pense pas que cela soit si compliqué que ça.
Par avance merci de votre soutien.
Dernière modification par deviltaz (10-09-2008 07:52:25)
Hors ligne
Il me semble que l'utilisation de Zend_Layout est appropriée pour ton cas.
Ton layout pourrait ressembler à ça (je ne met pas l'entête html):
<div id="entete"><?php print $this->action("entete", "index"); ?></div> <div id="navig"><?php print $this->action("navig", "index"); ?></div> <div id="menugauche"><?php print $this->layout()->menugauche; ?></div> <div id="contenu"><?php print $this->layout()->contenu; ?></div> <div id="footer"><?php print $this->action("footer", "index"); ?></div>
Pour de plus amples renseignements concernant $this->action, http://framework.zend.com/manual/fr/zen … ial.action
Hors ligne
Merci de cette réponse.
Je pense que je m'étais trop dispersé entre plusieurs méthodes
et divers tutoriels. Je me suis donc recentré sur la lecture du tutoriel
de Julien Pauli proposé sur developpez.com
Je parviens à mettre en pratique la méthode $this->action.
Si je ne m'abuse, c'est ce qu'on apelle un ActionHelper ?
C'est pour moi une première victoire et cela me solutionne
tout ce qui est commun à l'ensemble des pages, ouf !
Je continue d'étudier le tutoriel pour ce qui est des parties
contrôlées par différentes sections du site, soit la syntaxe :
$this->layout()->menuGauche
Je crois avoir compris que je devrais alors employer la méthode suivante dans l'action :
$this->_helper->viewRenderer->setResponseSegment('menuGauche');
Je file de ce pas mettre cela en pratique
Hors ligne
oui ou alors $this->render("mavue", "menugauche");
avec mavue qui correspond à un fichier mavue.phtml
Dernière modification par Damien (09-09-2008 10:42:00)
Hors ligne
Il doit vraiment me manquer quelque chose ...?
Je vous résume ce que j'ai pour l'instant :
Dans le layout :
<?php echo $this->action('header', 'index'); ?> <?php echo $this->action('nav', 'index'); ?> <div id="left"> <?php echo $this->layout()->left ?> </div> <div id="content"> <?php echo $this->layout()->content ?> </div> <?php echo $this->action('footer', 'index'); ?>
Les parties apellées via $this->action fonctionnent très bien.
En revanche, ça se complique pour layout()->left et layout()->content.
Au niveau du controleur, j'ai ajouté à mes deux actions ceci :
$this->_helper->viewRenderer->setResponseSegment('left');
ou bien
$this->render('left', 'left');
Dans les deux cas, left et content restent muets dans le fichier résultant.
Hors ligne
Ca bouge ...
Je parviens à obtenir le résultat tant attendu.
En fait, je suppose que je ne placais pas la commande $this->render au bon endroit.
J'ai déplacé le code ci-dessous dans l'action index du controleur
et cette fois-ci, c'est opérationnel.
$this->render('left', 'left');
Je suis déjà satisfait de mon application ;-)
Pensez-vous qu'il s'agisse de bonnes pratiques, voyez-vous des améliorations possibles ?
Merci en tout cas d'avoir permis de faire avancer le schmilblick.
Hors ligne
En effet, le $this->render(...) se place dans les actions du controller. J'avais oublié de le préciser.
Hors ligne
Pour aller plus loin ...
En utilisant cette méthode, pour chacune des sections de mon appli
je me retrouve à coder ces deux lignes pour chaque action :
$this->render('action', 'right'); $this->render('menu', 'left');
N'y aurait-il pas plus élégant ?
Hors ligne
Il faut pour cela écrire ton propre controller dérivé de Zend_Controller.
class My_Zend_Controller extends Zend_Controller { public function postDispatch() { $this->render('action', 'right'); $this->render('action', 'left'); } }
Plus d'informations ici : http://framework.zend.com/manual/fr/zen … ialization et le chapitre suivant.
Hors ligne
Merci beaucoup, c'est effectivement nettement plus propre avec cette méthode ;-)
Voici donc le code que j'utilise :
class monController extends Zend_Controller_Action { public function postDispatch() { $this->render('menu', 'left'); } }
Dernière petite question d'un newbie :
Peut-on savoir dans cette fonction postDispatch() quelle action a été apellée ?
Cela me permettrait alors d'ajouter ceci :
$this->render($actionCalled, 'right');
D'avance merci
Hors ligne
Le nom du module, du controlleur et de l'action sont connus par le request du controlleur.
Il est possible d'accéder à ces valeurs en faisant (dans le controlleur) :
$action = $this->getRequest()->getActionName(); $controller = $this->getRequest()->getControllerName(); $module = $this->getRequest()->getModuleName();
Un petit tour dans la documentation n'est pas inutile : http://framework.zend.com/manual/fr/zen … quest.html
Hors ligne
Merci de ces précisions.
Voilà mes problèmes de layout résolus et cette fois, je comprend ce que je fais ;-)
Hors ligne
Pages: 1