IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MVC PHP Discussion :

Problème de lien du menu : Zend_Navigation + navigation.xml


Sujet :

MVC PHP

  1. #1
    Membre confirmé Avatar de Lost In Translation
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2007
    Messages : 166
    Par défaut Problème de lien du menu : Zend_Navigation + navigation.xml
    Bonjour,

    J'ai un truc super bizarre. J'utilise Zend_Navigation pour gérer un menu. Dans applications/config, j'ai un fichier de navigation xml.

    Tout fonctionne très bien sur la plupart des pages... sauf une où tous les liens du menu sont remplacés par le lien de la page courante.

    Voici mes extraits de code :

    Mon bootstrap.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    /**
     * @return Zend_Navigation
     */
    protected function _initNavigation()  
    {
        $config = new Zend_Config_Xml(APPLICATION_PATH . '/configs/navigation.xml', 'nav');
        $navigation = new Zend_Navigation($config);
        Zend_Registry::set('Zend_Navigation', $navigation);
     
    }
    L'appel dans mon layout :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php echo $this->navigation()->menu()->renderPartial(null, 'templates/menu.phtml')?>
    Là, mon navigation.xml

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    <?xml version="1.0" encoding="UTF-8"?>
    <configdata>
    <nav>   
        <home>
            <label>Accueil</label>
            <controller>index</controller>
        </home> 
     
        <search>
            <label>Riads</label>
            <controller>search</controller>
            <action>index</action>
            <params>
                <q>allriads</q>
            </params>
        </search>
     
        <last>
            <label>Dernières Minutes</label>
            <uri>#</uri>
        </last>
     
        <promotion>
            <label>Promotions</label>
            <uri>#</uri>
        </promotion>
     
        <groupes>
            <label>Groupes</label>
            <uri>#</uri>
        </groupes>
     
        <contact>
            <label>Contact</label>
            <controller>apropos</controller>
            <action>contact</action>
        </contact>
     
    </nav>
    Ce code me génère ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    <ul id="nav-search">
            <li>
     
            <a href="/v2/ficheriad/detail/21-riad-croix-berbere.html">Accueil</a>
        </li>
            <li>
            <a href="/v2/ficheriad/detail/21-riad-croix-berbere.html">Riads</a>
        </li>
            <li>
            <a href="#">Dernières Minutes</a>
     
        </li>
            <li>
            <a href="#">Promotions</a>
        </li>
            <li>
            <a href="#">Groupes</a>
        </li>
            <li>
     
            <a href="/v2/ficheriad/detail/21-riad-croix-berbere.html">Contact</a>
        </li>
    </ul>
    Au lieu de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    <ul id="nav-search">
            <li class="active">
     
            <a href="/v2/">Accueil</a>
        </li>
            <li>
            <a href="/v2/search/index/q/allriads">Riads</a>
        </li>
            <li>
            <a href="#">Dernières Minutes</a>
     
        </li>
            <li>
            <a href="#">Promotions</a>
        </li>
            <li>
            <a href="#">Groupes</a>
        </li>
            <li>
     
            <a href="/v2/apropos/contact">Contact</a>
        </li>
    </ul>
    Le script qui gère ce menu est comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <ul id="nav-search">
    <?
    foreach ($this->container as $page) :
    /** @var $page Zend_Navigation_Page_Mvc */
    ?>
        <li<?=$page->isActive(true) ? ' class="active"' : ''?>>
            <a href="<?=$page->getHref()?>"><?=$page->label?></a>
        </li>
    <? endforeach; ?>
    </ul>
    Vous pouvez voir un exemple ici :
    - http://www.riads-marrakech.org/v2/

    et si vous cliquez sur une fiche riad ou que vous allez ici : http://www.riads-marrakech.org/v2/fi...dar-ganou.html voyez que le menu pointe sur le lien courant pour Accueil/Riads/Contact

    J'suis un peu paumé.

    Merci de vos aides à venir.

  2. #2
    Membre très actif
    Profil pro
    Inscrit en
    Février 2009
    Messages
    278
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Février 2009
    Messages : 278
    Par défaut
    Sans rentrer dans les détails tu te complique pour pas grand chose, l'histoire de boucle avec gestion du active, etc c'est automatiquement géré par l'aide de vue navigation()

  3. #3
    Membre confirmé Avatar de Lost In Translation
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2007
    Messages : 166
    Par défaut
    Le problème que j'avais eu avec l'aide de vue navigation... c'est que pour une raison que je ne comprenais pas, elle me foutait deux fois la class "active".

    A la base, mon code était celui-ci :

    Dans le bootstrap :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    /**
     * @return Zend_Navigation
     */
    protected function _initNavigation()  
    {
        $config = new Zend_Config_Xml(APPLICATION_PATH . '/configs/navigation.xml', 'nav');
        $this->_view->navigation(new Zend_Navigation($config));
        $activeNav = $this->_view->navigation()->findByController('index');
        $activeNav->active = true;
        $activeNav->setClass("active");
    }
    et le html généré :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    <ul class="navigation">
    <li class="active">
        <a class="active" href="/v2/">Accueil</a>
    </li>
    <li class="active">
        <a href="/v2/search/index/q/allriads">Riads</a>
    </li>
     
    <li>
        <a href="#">Dernières Minutes</a>
    </li>
    <li>
        <a href="#">Promotions</a>
    </li>
    <li>
        <a href="#">Groupes</a>
     
    </li>
    <li>
        <a href="/v2/apropros/contact">Contact</a>
    </li>
    </ul>
    J'avais posé la question sur StackOverflow : http://stackoverflow.com/questions/8...ss-menu-active

    Et un gars (JellyBelly) m'avait conseillé d'utiliser le bout de code qui pose maintenant problème XD.

  4. #4
    Membre Expert
    Avatar de 5h4rk
    Homme Profil pro
    CTO at TabMo
    Inscrit en
    Février 2011
    Messages
    813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : CTO at TabMo
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2011
    Messages : 813
    Par défaut
    Bidouiller quelque chose n'est jamais la bonne solution pour résoudre un problème, il vaut mieux essayé de comprendre avant d'utiliser autre chose.

    Tu as essayé sans précisé le active voir si ça ne te le mettais pas?

  5. #5
    Membre très actif
    Profil pro
    Inscrit en
    Février 2009
    Messages
    278
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Février 2009
    Messages : 278
    Par défaut
    Ça me parait normal que tu ai deux fois la class active, puisque tu as défini dans ton bootstrap que le controller index était toujours actif.

    Supprime les lignes suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $activeNav = $this->_view->navigation()->findByController('index');
    $activeNav->active = true;
    $activeNav->setClass("active");

  6. #6
    Membre confirmé Avatar de Lost In Translation
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2007
    Messages : 166
    Par défaut
    Je viens donc de faire ce que vous avez dit, en supprimant les 3 lignes...

    Mon menu se génère bien... MAIS... toujours le même soucis.

    Vu que "ficheriad/detail" ne fait pas parti de mon navigation.xml ... ben les liens sont "celui de la page courante". Toujours le même soucis que ce qui est rapporté dans le premier post.

    J'ai retiré mon helper qui réécrit l'URL (basé sur urlize de Doctrine), mais ça ne vient pas de là non plus.

    Est-ce que le problème peut vraiment être lié au fait que la page appelée n'apparait pas dans le menu ? Comment résoudre ça ?

  7. #7
    Membre très actif
    Profil pro
    Inscrit en
    Février 2009
    Messages
    278
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Février 2009
    Messages : 278
    Par défaut
    Pourquoi n'as tu pas toute tes pages dans ton navigation.xml? Je dois pas comprendre un truc dans ton problème la

  8. #8
    Membre confirmé Avatar de Lost In Translation
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2007
    Messages : 166
    Par défaut
    Pour moi, le navigation.xml est en gros "mon menu".

    Certaines pages sont accessibles via le menu... et d'autres le sont via des liens.
    Donc celles qui ne sont pas dans mon menu principal, je ne les ai pas mises dedans... vu que je ne veux pas qu'elles apparaissent dans le menu.

  9. #9
    Membre très actif
    Profil pro
    Inscrit en
    Février 2009
    Messages
    278
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Février 2009
    Messages : 278
    Par défaut
    Ok, dans ce cas tu as deux solutions :
    • soit tu les ajoutes dans ton navigation.xml avec le paramètre : <visible>0</visible>
    • soit tu les ajoutes à la volé
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      $container = $this->view->navigation()->getContainer();
      $parent = $container->findById('ads_publication');
      $parent->addPage(array(
                  'label'  => $objet->name,
                  'params' => array('id'=>$objet->id),
                  'action' => 'my_action',
                  'controller' => 'my_controller',
                  'module' => 'my_module',
                  'active' => true,
                  'visible' => true));

  10. #10
    Membre confirmé Avatar de Lost In Translation
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2007
    Messages : 166
    Par défaut
    (euh doublon à supprimer, désolé :s)

  11. #11
    Membre confirmé Avatar de Lost In Translation
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2007
    Messages : 166
    Par défaut
    Oh mon Dieu, j'ai enfin trouvé. Vous m'avez apporté un morceau de la réponse (et quelqu'un d'autre, un autre).

    En rajoutant le visible : ça fonctionne.

    En fait, ce qui merde, c'est la ré-écriture des liens.

    Je mets ce sujet comme résolu.

    Ce projet est un grand n'importe quoi, il a été dev par plusieurs sociétés (qui ont été remerciés à toujours de rôle), et j'passe derrière des gars qui ont voulu faire du Zend, sans savoir une des bases de la POO : DRY (basterd !)...

    Bref... on va dire que c'est résolu. Grand merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SP-2010] Liens relatifs menu navigation
    Par Benny38 dans le forum SharePoint
    Réponses: 1
    Dernier message: 14/04/2011, 22h04
  2. Problème de lien avec Zend_Navigation
    Par erehcab dans le forum Autres composants
    Réponses: 0
    Dernier message: 09/10/2010, 09h40
  3. problème liens pour acceder à un fichier Xml
    Par livinho38 dans le forum ASP.NET
    Réponses: 6
    Dernier message: 02/09/2010, 18h25
  4. Problème Menu de navigation
    Par ajirah dans le forum Flash
    Réponses: 2
    Dernier message: 16/03/2009, 15h05
  5. [PDE] Lien entre menu dynamique et plugin.xml
    Par simsky dans le forum Eclipse Platform
    Réponses: 1
    Dernier message: 21/06/2005, 11h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo