Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
Je me pose une question sur Zend_Navigation. Je suis sur un projet d'envergure dans lequel j'ai décidé d'utiliser Zend_Navigation pour l'intégralité de la navigation. Menu public, menu membre, etc.
Il est possible de donner à une page mvc une route et des paramètres dans la config. Sauf qu'il me semble impossible d'utiliser un paramètre dynamique.
Je m'explique avec un exemple tout bête, admettons qu'un membre sur le site a un profil. L'accès à un profil sur le site se fera par exemple avec url du type "/profil?user=toto". Lorsque le membre clique sur "Mon profil" dans son menu perso, ça devra donc pointer sur "/profil?user=moi". Sauf que si on génère le menu perso à l'aide de Zend_Navigation, il est impossible de spécifier dynamiquement le paramètre user (seulement en "dur").
Pour palier au problème j'ai tenter d'utiliser un partial pour générer mon menu, mais apparemment on ne peut pas envoyer de paramètres au partial au travers de setPartial() comme a un partial traditionnel. En réalité le helper menu() passe en auto en dur le container de navigation comme model au partial. Du coup, impossible de transmettre les infos de mon user.
Je m'imaginais pouvoir faire un truc du genre:
Layout:
$privateMenu = $this->navigation()->findBy('id', 'private'); echo $this->navigation() ->menu() ->setPartial('p-member-menu.phtml', array('user' => $this->user)) // impossible, cf. source de ZF ->setMaxDepth(0) ->setRenderParents(false) ->render($privateMenu);
p-member-menu.phtml:
<ul> <?php foreach ($this->container as $page) { $class = ((bool)$page->active === true) ? ' class="active"' : ''; switch($page->id) { case 'my_profil': $page->setParams(array('user' => $this->user->login)); break; // ici d'autres cas } echo "<li$class>"; echo $this->navigation()->menu()->htmlify($page), PHP_EOL; echo '</li>'; } ?> </ul>
Une idée ? Ca me semble évident de pouvoir utiliser le partial comme n'importe quel partial. Ou encore de laisser le renderMenu() faire mais de pouvoir lui setter des paramètres particulier avant le rendu.
(surcharger tout le bordel juste pour ça est un peu contraignant :p)
Merci,
A+ benjamin.
Hors ligne
Salut Benjamin,
As-tu résolu ton problème ?
La classe Zend_Navigation_Page_Mvc met à disposition une méthode permettant de modifier les paramètres de la page (permettant donc en l'occurence d'attribuer par exemple au paramètre 'user' la valeur 'moi').
Pour ma part j'ai recours à ce procéder afin que Zend_Navigation, dans un "breadcrumbs" par exemple, m'affiche le nom de l'utilisateur dont est consulté le profil.
Bonne soirée,
Hors ligne
Bonsoir,
Je ne me suis pas encore replongé dans ce problème. Il est sur une liste à traiter, pour l'instant je suis encore en plein (comme je le serais durant 80% du projet) dans l'architecture et dans l'UML
Je n'ai pour l'instant pas le temps de m'y consacrer, mais dès que je mettrai le doigt dessus je prendrai en compte ta remarque et je ne manquerai pas de compléter mon post.
Vite fait, je suppose que j'utilise la méthode dont tu parles ($page->setParams) dans mon partial (voir plus haut), mais comme je ne peux pas passer de paramètres particuliers à mon partial (comme l'user), ça ne m'est pas d'une grande aide.
Je voulais surtout pointer du doigt l'impossibilité d'utiliser un partial pour Zend_Navigation comme n'importe quel partial, ce qui n'est pas normal.
Merci,
A+ benjamin.
Dernière modification par Delprog (17-11-2009 19:35:15)
Hors ligne
Salut,
Pourquoi ne pas ajouter le paramètre directement via un code (dans l'idée) tel que :
$privateMenu = $this->navigation()->findBy('id', 'private'); $privateMenu->setParams(...) ... ->setPartial('p-member-menu.phtml')
Et si dans ta vue tu as besoin de données tu pourras les récupérer dans l'instance de la page.
Hors ligne