Précédent   Forum des professionnels en informatique > PHP > Outils > Zend > Zend Framework > MVC
MVC Forum de support sur le développement d'applications de type modèle-vue-contrôleur avec Zend Framework ainsi que vos questions sur les plugins, les helpers etc. Avant de poster -> Cours MVC, FAQ ZF Controller
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 22/11/2011, 11h59   #1
Membre du Club
 
Avatar de Lost In Translation
 
Raphaël Deschler
Inscription : mai 2007
Messages : 166
Détails du profil
Informations personnelles :
Nom : Raphaël Deschler
Âge : 25
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : mai 2007
Messages : 166
Points : 55
Points : 55
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 :
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 :
<?php echo $this->navigation()->menu()->renderPartial(null, 'templates/menu.phtml')?>
Là, mon navigation.xml

Code :
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 :
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 :
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 :
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.
Lost In Translation est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2011, 11h48   #2
Membre actif
 
Avatar de shadypierre
 
Inscription : février 2009
Messages : 250
Détails du profil
Informations personnelles :
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations forums :
Inscription : février 2009
Messages : 250
Points : 197
Points : 197
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()
shadypierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2011, 15h21   #3
Membre du Club
 
Avatar de Lost In Translation
 
Raphaël Deschler
Inscription : mai 2007
Messages : 166
Détails du profil
Informations personnelles :
Nom : Raphaël Deschler
Âge : 25
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : mai 2007
Messages : 166
Points : 55
Points : 55
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 :
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 :
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.
Lost In Translation est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2011, 20h16   #4
Modérateur
 
Homme Loïc
Développeur Web
Inscription : février 2011
Messages : 680
Détails du profil
Informations personnelles :
Nom : Homme Loïc
Âge : 26
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2011
Messages : 680
Points : 1 044
Points : 1 044
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?
5h4rk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2011, 21h21   #5
Membre actif
 
Avatar de shadypierre
 
Inscription : février 2009
Messages : 250
Détails du profil
Informations personnelles :
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations forums :
Inscription : février 2009
Messages : 250
Points : 197
Points : 197
Ç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 :
1
2
3
4
 
$activeNav = $this->_view->navigation()->findByController('index');
$activeNav->active = true;
$activeNav->setClass("active");
shadypierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2011, 09h27   #6
Membre du Club
 
Avatar de Lost In Translation
 
Raphaël Deschler
Inscription : mai 2007
Messages : 166
Détails du profil
Informations personnelles :
Nom : Raphaël Deschler
Âge : 25
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : mai 2007
Messages : 166
Points : 55
Points : 55
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 ?
Lost In Translation est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2011, 10h21   #7
Membre actif
 
Avatar de shadypierre
 
Inscription : février 2009
Messages : 250
Détails du profil
Informations personnelles :
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations forums :
Inscription : février 2009
Messages : 250
Points : 197
Points : 197
Pourquoi n'as tu pas toute tes pages dans ton navigation.xml? Je dois pas comprendre un truc dans ton problème la
shadypierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2011, 11h43   #8
Membre du Club
 
Avatar de Lost In Translation
 
Raphaël Deschler
Inscription : mai 2007
Messages : 166
Détails du profil
Informations personnelles :
Nom : Raphaël Deschler
Âge : 25
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : mai 2007
Messages : 166
Points : 55
Points : 55
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.
Lost In Translation est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2011, 16h03   #9
Membre actif
 
Avatar de shadypierre
 
Inscription : février 2009
Messages : 250
Détails du profil
Informations personnelles :
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations forums :
Inscription : février 2009
Messages : 250
Points : 197
Points : 197
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 :
    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));
shadypierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2011, 11h24   #10
Membre du Club
 
Avatar de Lost In Translation
 
Raphaël Deschler
Inscription : mai 2007
Messages : 166
Détails du profil
Informations personnelles :
Nom : Raphaël Deschler
Âge : 25
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : mai 2007
Messages : 166
Points : 55
Points : 55
(euh doublon à supprimer, désolé :s)
Lost In Translation est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2011, 11h26   #11
Membre du Club
 
Avatar de Lost In Translation
 
Raphaël Deschler
Inscription : mai 2007
Messages : 166
Détails du profil
Informations personnelles :
Nom : Raphaël Deschler
Âge : 25
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : mai 2007
Messages : 166
Points : 55
Points : 55
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 !
Lost In Translation est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h12.


 
 
 
 
Partenaires

Hébergement Web