Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 20-10-2009 11:35:20

Delprog
Administrateur
Date d'inscription: 29-09-2008
Messages: 670

[Zend_Navigation]Routes, partial et paramètres

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:

Code:

$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:

Code:

<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.


http://www.anonymation.com/ - anonymation - Studio de création.
http://code.anonymation.com/ - anonymation - blog - développement et architecture web

Hors ligne

 

#2 16-11-2009 19:09:21

Eureka
Membre
Date d'inscription: 18-07-2009
Messages: 81

Re: [Zend_Navigation]Routes, partial et paramètres

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

 

#3 17-11-2009 19:24:58

Delprog
Administrateur
Date d'inscription: 29-09-2008
Messages: 670

Re: [Zend_Navigation]Routes, partial et paramètres

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 smile

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)


http://www.anonymation.com/ - anonymation - Studio de création.
http://code.anonymation.com/ - anonymation - blog - développement et architecture web

Hors ligne

 

#4 17-11-2009 22:46:16

Eureka
Membre
Date d'inscription: 18-07-2009
Messages: 81

Re: [Zend_Navigation]Routes, partial et paramètres

Salut,

Pourquoi ne pas ajouter le paramètre directement via un code (dans l'idée) tel que :

Code:

$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

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages