Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
Je suis débutant et en plein apprentissage de Zend, je fais donc appel à votre indulgence sur des questions qui vous paraitrons assez basiques .
Je parcours les pages de documentation et les forums depuis un petit moment, et je me rend compte que contrairement à ce que j'imaginais, les gens on souvent plusieurs manières de faire la même chose à l'aide du Framework.
Pour le moment je m'intéresse à la conception d'un layout pour mon site. Celui-ci contiendra surement des blocks variable, souvent dépendant du statut connecté ou non d'un utilisateur, comme un panneau de connexion remplacé par des info utilisateur si connecté, un menu plus complet pour les personnes identifiées etc...
Concrètement, quelle est la meilleurs manière d'avoir des blocks variables mais néanmoins récurent dans la structure de son site ? Cela passe-t-il par l'utilisation de placeholders ? aide d'actions ? partials ?...
Désolé si la réponse ce trouve déjà quelque part sur le site, j'ai du passé à coté
Je vous remercie d'avance pour vos réponses !
Dernière modification par Wiwiwi (07-01-2011 13:44:36)
Hors ligne
moi je dirais partials dans des placesholders à première vue.
un de mes partials :
<?php $this->placeholder('sidebar-left')->captureStart() ?> <div class="box-top-blue"><?php echo $this->translate($this->title)?></div> <div class="box-bottom-blue"> <div class="swaps-state"> <span class="float-left">Etat actuel</span><span class="float-right"><?php echo $this->user->swaps; ?></span><br /> <span class="float-left">Dépenses effectives</span><span class="float-right">– <?php echo $this->user->getSwapsPayableForTransactions(); ?></span> </div> </div> <?php $this->placeholder('sidebar-left')->captureEnd() ?>
ensuite dans le preDispatch() tu peux appeler ton partial quand désiré. C'est aussi là que tu décide s'il faut afficher le formulaire de login ou les infos de l'utilisateur loggé
function preDispatch() { $this->view->partial('users/box/status.phtml',array( 'title'=>'my_status_box', 'user'=>$this->getUser())); }
dans le bootstrap j'annonce mon placeholder :
protected function _initSidebars() { $this->bootstrap('View'); $view = $this->getResource('View'); $view->placeholder('sidebar-left') ->setPrefix("<div id=\"sidebar-left\" class=\"sidebar-left\">\n <div class=\"sidebar-inline\">\n") ->setSeparator("</div>\n <div class=\"sidebar-inline\">\n") ->setPostfix("</div>\n</div>"); }
dans mon layout je ne veux pas que les sidebars s'affichent si elle sont vides :
<?php if ($this->placeholder('sidebar-left')->getValue()) : ?> <?php echo $this->placeholder('sidebar-left'); ?> <?php endif; ?>
j'espère que cela t'aidera
Bonne chance et bienvenue dans la communauté ZF !
Dernière modification par ubini (07-01-2011 14:55:46)
Hors ligne
Ok cool ! J'ai recoupé avec d'autres infos obtenue sur le forum et j'y vois plus clair à présent. Merci pour ton aide !
Hors ligne
Simple question, si je fait ce que tu m'as dit dans le preDispatch d'un plugin que je crée, est-ce que cela s'appliquera bien avant toutes les actions de tous les controllers (autrement dit avant le chargement de n'importe quelle page de mon site) ?
Hors ligne
oui, c'est le but
soit un preDispatch() par controlleur ou alors un preDispatch() générique si tu le mets dans la classe mère de ton controlleur (une surcharge du Zend_Controller_Action).
cf : http://www.z-f.fr/forum/viewtopic.php?id=5075#p26972
Hors ligne
J'ai finalement utilisé la méthode de création d'un nouveau plugin que j'ai mis dans "application/controllers/plugins/ConnexionPannel.php".
Je l'ai ensuite configuré comme tel :
autoloaderPluginPath = APPLICATION_PATH "/controllers/plugins"
resources.frontController.plugin.ConnexionPannel = "ConnexionPannel"
Pas d'erreur, je suppose donc qu'il a bien été chargé, mais comment en être sur (quel test effectuer dans le preDispatch par exemple ?).
Ensuite j'ai fait comme tu m'avais dit. J'arrive à afficher mon placeholder en enlevant les conditions (il est donc vide), par contre impossible de capturer mon partial à l'intérieur. Soit a cause du plugin qui n'a pas été chargé, soit à cause du chemin vers mon partial qui n'est pas bon.
A partir de la méthode $this->view->partial(), quel est le chemin vers mon partial sachant que j'ai placé celui ci dans "application/views/partials/connexionPannel.phtml" ?
En tout cas merci pour tes réponses qui jusqu'ici m'ont permis d'en apprendre un peu plus sur Zend !
EDIT : Bon apparement, il serait plus simple de créer un héritage intermédiaire entre mes controllers et Zend_Controller_Action pour l'utilisation de l'objet $view dans le preDispatch, mais impossible de trouver quoi mettre derrière le mot clé "extends" pour retrouver mon controller intérmédiaire...
En le mettant dans "application/controllers", quel est sont chemin "Perl" pour le retrouver ?
Dernière modification par Wiwiwi (20-01-2011 19:27:39)
Hors ligne