Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 24-06-2011 15:55:15

virulento
Nouveau membre
Lieu: Nantes 44 (FRANCE)
Date d'inscription: 19-05-2011
Messages: 2

[Résolu][Zend_Navigation][ZF 1.11.7] Menu de navigation

Bonjour à tous,

Je viens de créer mon menu de navigation à partir de plusieurs tutos et je voudrais le poster car ça pourrait servir à quelqu’un d'autre qui se trouverais dans mon cas. wink

J'avais commencé par créer un menu avec seulement les contrôleurs et l'action index de chaque contrôleur et mon problème était que lorsque j'étais sur une autre action, je n'avais plus d'item actif dans le menu. sad

Ensuite j'ai créé le fichier xml avec toutes les action des contrôleurs mais le problème était que mon application plantait lorsqu'on cliquaient dans les liens car j'ai de webservices pour chercher mes données et en passant par le liens, les infos nécessaires pour les appels n'étaient pas fournies.

Finalement ce que j'ai fait, c'est de créer un menu partiel mais seulement pour me retourner les niveaux supérieurs du menu mais les indiquant comme actifs si l'un des ses sous-menus est active. tongue

Maintenant quand on se trouve sur les différentes actions du même contrôleur, mon item de menu est actif. smile

Pour l'expliquer plus court, c'est un menu qui pointe seulement sur les actions index des contrôleurs mais que si nous sommes sur une autre action du même contrôleur, le menu reste actif.

Et voici le code :

Le fichier navigation.xml :

Code:

<?xml version="1.0" encoding="UTF-8"?>
<configdata>
    <navigation>
        <acceuil>
            <label>Accueil</label>
            <controller>index</controller>
        </acceuil>
        <recherche>
            <label>Recherche de dossier</label>
            <controller>Recherche</controller>
            <action>index</action>
            <pages>
                <resultat>
                    <label>Recherche</label>
                    <controller>Recherche</controller>
                    <action>resultat-recherche</action>
                </resultat>
                <enregistrer>
                    <label>Enregistrer</label>
                    <controller>Recherche</controller>
                    <action>enregistrer</action>
                </enregistrer>
            </pages>
        </recherche>
        <historique>
            <label>Gestion historique</label>
            <controller>Historique</controller>
            <action>index</action>
            <pages>
                <modifier>
                    <label>Modification</label>
                    <controller>Historique</controller>
                    <action>modifier</action>
                </modifier>
                <update>
                    <label>Update</label>
                    <controller>Historique</controller>
                    <action>update</action>
                </update>
            </pages>
        </historique>
        <statistiques>
            <label>Statistiques</label>
            <controller>Statistiques</controller>
            <action>index</action>
        </statistiques>
        <welcare>
            <label>Welcare</label>
            <uri>http://www.########.com</uri>
        </welcare>
    </navigation>
</configdata>

le code dans le layout :

Code:

<div id="menu">
    <?php $this->navigation()->menu()->setPartial(array( '/common/partialmenu.phtml','default'));?>
    <?php echo $this->navigation()->menu()->render();?>
</div>

la vue partielle du menu :

Code:

<?php 
echo '<ul class="navigation">';
// on boucle sur les pages de premier niveau
foreach ($this->container as $pages) 
{
    // on test si le menu est actif
    $isActive = $pages->isActive(false);
    $isActifSousMenu = false; // pour les sous-menus
    // on boucle sur les pages de deuxième niveau
    foreach ($pages as $page) 
    {
        // on test si le sous-menu est actif
        $isActifSousMenu = $page->isActive(true);
        if($isActifSousMenu) break;
    }
    // si le menu ou l'un des sous-menus est actif on envoi le menu comme actif 
    if ($isActive || $isActifSousMenu)    echo '<li class="active">' .$this->menu()->htmlify($pages) . '</li>' . PHP_EOL;
    else echo '<li>' .$this->menu()->htmlify($pages) . '</li>' . PHP_EOL;
}
echo '</ul>';

Voila!!! J'espère que ça servira à quelqu'un d'autre wink

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