Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour à tous,
je me confronte à un problème par rapport à la navigation d'un menu xml, malgré de multiples recherches.
Mon problème est que je n'affiche pas mon menu.
J'ai créé un module "application" avec pour l'instant un seul controller et une seule action "index/index"
voici mon xml :
<?xml version="1.0" encoding="UTF-8"?> <nav> <accueil> <label>Accueil</label> <module>application</module> <controller>index</controller> <action>index</action> </accueil> </nav>
et voici le code que j'ai mis dans le layout.phtml
$reader = new Zend\Config\Reader\Xml(); $config = $reader->fromFile(PATH_ROOT . '/config/navigation.xml'); $container = new Zend\Navigation\Navigation($config);
$container contient bien les infos du xml mais impossible de l'afficher.
Je voulais commencer par quelque chose de simple.
Pourriez vous m'aider s'il vous plaît ?
Je vous en remercie d'avance.
Cordialement,
Hors ligne
Salut, pourrais tu donner un peu plus de détails sur la manière dont tu affiches $container. Parce que là avec le code que tu donnes c'est normal que ça fonctionne pas et j'espère que tu n'as pas fait que ça .
Hors ligne
bonjour Orkin,
tout d'abord merci pour ta réponse.
Ensuite Désolé c'est peut être la fatigue mais j'ai oublié de retirer un die dans mon code qui était déstiné à d'autres tests. Désolé pour le dérangement.
Cordialement,
Hors ligne
rebonjour,
j'ai modifié mon code xml :
c'est vraiment à titre d'exemple car j'aimerais vraiment comprendre.
<accueil> <label>Accueil</label> <module>application</module> <controller>index</controller> <action>index</action> <uri>/</uri> <pages> <index> <label>Accueil</label> <controller>index</controller> <action>index</action> <uri>index/index</uri> </index> </pages> </accueil>
dans mon layout :
$reader = new Zend\Config\Reader\Xml(); $config = $reader->fromFile(PATH_ROOT . '/config/navigation.xml'); $container = new Zend\Navigation\Navigation($config); foreach ($container as $page) { echo '<li><a href="'. $page->uri . '">' .$page->label .'</a></li>'; }
mais je trouve cela très moche et pas très flexible.
je sais que dans zend 1.
on pouvait avoir le rendu de cette manière
pour le menu :
echo $this->navigation()->menu()->renderMenu(null, array('maxDepth'=>0));
et le sous-menu par rapport au menu actif
echo $this->navigation()->menu()->renderMenu(null, array('minDepth'=>1,'maxDepth'=>1,'onlyActiveBranch'=>true,'renderParents'=>false));
Mais je ne vois pas comment m'y prendre par rapport à un fichier de config xml.
Pourriez vous m'aider s'il vous plaît ?
merci d'avance.
Hors ligne
Je cherche à faire toute la navigation dans un fichier xml et non par module.
Pourriez vous m'aider s'il vous plaît ?
merci d'avance.
Hors ligne
Hello,
je connais pas trop trop ce genre de navigation mais voici un petit liens qui pourra peut être t'aiguiller :
http://framework.zend.com/manual/curren … iners.html
J'ai l'impression que dans la navigation tu déclare les "urls" que tu veux dans ton menu et non les routes.
Tu peu donc déclarer tes routes dans chaque module (comme c'est prévu ^^) et créer un seul xml pour tout ton menu.
EDIT:
le liens posté à l'origine était pour zf1 j'avais pas bien vu. Je le laisse si quelqu'un le recherche, il pourra toujours s'en servir :
http://framework.zend.com/manual/1.12/f … iners.html
Dernière modification par flobrflo (11-02-2015 11:37:56)
Hors ligne
Bonjour Flobrflo,
merci pour ta réponse,
je vais regarder de plus près mais je te cache pas que j'ai déjà pas mal écumé de liens lol.
Le problème soit je m'y prends mal pour chercher ou j'arrive pas à trouver de cas concrets.
J'aimerais comprendre via le biais du xml si on peut directement perndre le "default" ou obligatoirement surcharger et dans ce cas je ne sais pas trop comment m'y prendre.
Si quelqu'un veut bien m'accompagner dessus, ce serait génial.
Je commence seulement zf2.
merci d'avance.
Hors ligne
Ici tu a un cas concret avec un tableau et non un xml.
(Est ce qu'il est applicable à ton cas? ^^)
http://framework.zend.com/manual/2.0/en … ation.html
Qu'entend tu par "prendre le défaut"?
Hors ligne
FlobrFlo,
en fait c'est dans le rendu
j'aimerais utiliser cela comme c'était le cas pour Zend 1
echo $this->navigation('Navigation')->menu()->setUlClass('nav') ->setMinDepth(1) ->setMaxDepth(1) ->setRenderInvisible(false) ->render();
et l'argument passé à navigation() peut être default mais je t'avoue je sais plus trop quoi faire j'ai regardé beaucoup de tuto mais c'est qu'avec un fichier php.
Et moi j'aimerais le faire avec xml mais je n'y arrive pas malgré tout.
Mais j'arrive pas à trouver de cas concret qui parte du fichier de config à l'affichage.
J'ai même créer un module pour surcharger Zend\Navigation\Service\DefaultNavigationFactory mais sans succès, je suis dans l'impasse la plus totale.
Hors ligne
j'avais réussi en faisant
$reader = new Zend\Config\Reader\Xml(); $config = $reader->fromFile(PATH_ROOT . '/config/navigation.xml'); $container = new Zend\Navigation\Navigation($config);
et j'itérai sur le $container, cela me donnais ce que je voulais mais après faut s'occuper de si tel menu est "actif" j'affiche les pages associé, mais je trouve pas que ce soit propre.
J'aimerais le faire de manière "simple" :-) , comme cité dans mon message précédent.
Merci d'avance.
Hors ligne
Dans la partie Menu Helpeer, tu a la directive :
[lang=php] renderMenu($container = null, $options = array())
en dessous tu a les possibilités d'option de la méthode
Hors ligne
merci flobrflo, ok je vais regarder mais du coup je ne sais pas quoi mettre comme paramètre à navigation().
Hors ligne
Tu n'a pas déjà créé ton $container? (posté un peu plus haut)
Après c'est comme ça dans ta vue:
[lang=php] <?php echo $this->navigation()->menu()->renderMenu($container, array(/* option possibles*/)); ?>
Hors ligne
j'ai fait ce code :
echo $this->navigation()->menu()->setUlClass('nav') ->setMinDepth(1) ->setMaxDepth(1) ->setRenderInvisible(false) ->renderMenu($container, array('maxDepth' => 0));
mais cela ne m'affiche rien.
mon $container est rien rempli
object(Zend\Navigation\Navigation)[233] protected 'pages' => array (size=1) '000000007bf5ff20000000000929a463' => object(Zend\Navigation\Page\Mvc)[234] protected 'action' => string 'index' (length=5) protected 'controller' => string 'index' (length=5) protected 'query' => null protected 'params' => array (size=0) ... protected 'route' => null protected 'hrefCache' => null protected 'routeMatch' => null protected 'useRouteMatch' => boolean false protected 'router' => null protected 'label' => string 'Accueil' (length=7) protected 'fragment' => null protected 'id' => null protected 'class' => null protected 'title' => null protected 'target' => null protected 'rel' => array (size=0) ... protected 'rev' => array (size=0) ... protected 'order' => null protected 'resource' => null protected 'privilege' => null protected 'permission' => null protected 'textDomain' => null protected 'active' => boolean false protected 'visible' => boolean true protected 'parent' => &object(Zend\Navigation\Navigation)[233] protected 'properties' => array (size=2) ... protected 'pages' => array (size=1) ... protected 'index' => array (size=1) ... protected 'dirtyIndex' => boolean true protected 'index' => array (size=1) '000000007bf5ff20000000000929a463' => null protected 'dirtyIndex' => boolean true
je vois pas ce qu'il manque, pourtant sur zf1 cela me paraissait tellement simple, mais la sur zf2, c'est autre chose pour l'instant.
Hors ligne
Alors relis un peu ton code, l'appel du renderMenu surtout
Je te remet la manière de l'utiliser :
[lang=php] echo $this->navigation()->menu()->renderMenu($container, array(/* option possibles*/));
Hors ligne
j'ai mis ce code mais il me pète une erreur
Fatal error: Uncaught exception 'Zend\Navigation\Exception\DomainException' with message 'Zend\Navigation\Page\Mvc::getHref cannot execute as no Zend\Mvc\Router\RouteStackInterface instance is composed' in C:\wamp\library\Zend\Navigation\Page\Mvc.php on line 205
( ! ) Zend\Navigation\Exception\DomainException: Zend\Navigation\Page\Mvc::getHref cannot execute as no Zend\Mvc\Router\RouteStackInterface instance is composed in C:\wamp\library\Zend\Navigation\Page\Mvc.php on line 205
je regarde.
Hors ligne
j'ai regardé la méthode getHref et this->router est vide donc pas une instance de RouteStackInterface
ai-je bien fait mon xml ?
<?xml version="1.0" encoding="UTF-8"?> <nav> <accueil> <label>Accueil</label> <module>application</module> <controller>index</controller> <action>index</action> <uri>/</uri> <pages> <index> <label>Accueil</label> <controller>index</controller> <action>index</action> <uri>index/index</uri> </index> </pages> </accueil> </nav>
merci pour ton aide, c'est très gentil.
Hors ligne
Alors la par contre je sais pas vraiment, je serai toi j'essairai quelque chose de plus basique du style:
<nav> <home> <label>Home</label> <order>-100</order> <module>default</module> <controller>index</controller> <action>index</action> </home> </nav> //Edit : pris dans la doc
et en fonction du résultat étoffé mon menu ^^
Dernière modification par flobrflo (11-02-2015 16:05:17)
Hors ligne
arf j'ai toujours la même erreur, j'avoue je ne vois pas trop :-(
Hors ligne
il est possible qu'au lieu de :
<module>default</module>
il faille :
<module>application</module>
/en fonction de la route que tu veux utiliser
Hors ligne
ouais je l'ai modifié , j'ai oublié de le dire d'ailleurs j'ai l'erreur même en spécifiant le bon module.
<?xml version="1.0" encoding="UTF-8"?> <nav> <home> <label>Accueil</label> <order>-100</order> <module>application</module> <controller>index</controller> <action>index</action> </home> </nav>
Hors ligne
Alors regarde du cotés des routeur dans la partie "Navigation setup used in examples" de la doc.
Il semblerait que ta navigation n'arrive pas à retrouver les routes correspondantes aux urls.
Hors ligne
j'ai rajouter <router></router> dans le xml
il me balance une autre erreur
Catchable fatal error: Argument 1 passed to Zend\Navigation\Page\Mvc::setRouter() must implement interface Zend\Mvc\Router\RouteStackInterface, string given, called in C:\wamp\library\Zend\Navigation\Page\AbstractPage.php on line 970 and defined in C:\wamp\library\Zend\Navigation\Page\Mvc.php on line 485
je vais regarder ton lien déjà merci flobrflo
Hors ligne
au cas ou je mets mon fichier de config de l'appli :
<?php return [ /* Configuration des Listerners du ModuleManager. */ 'module_listener_options' => [ 'module_paths' => [ PATH_ROOT.'/modules', ], ], /* Modules à charger. */ 'modules' => [ 'Application', //'Contact', /*'Contract', 'Customer', 'Dashboard', 'Device', 'Excel', 'Login', 'Tickets', 'Validation',*/ //'Yaub' //'application', ], 'service_manager' => [ 'factories' => [ 'Db' => 'Zend\Db\Adapter\AdapterServiceFactory', //'Navigation' => 'Zend\Navigation\Service\DefaultNavigationFactory', //'yaub_navigation_factory' => 'Yaub\Navigation\YaubNavigationFactory' ] ], 'db' => [ 'driver' => 'PDO Mysql', 'host' => 'localhost', 'dbname' => 'formation', 'username' => 'root', 'password' => '' ] ];
et celui de mon module
<?php //return [ // // /* Définition des routes. */ // 'router' => [ // 'routes' => [ // 'default' => [ // 'type' => 'Segment', // 'options' => [ // 'route' => '/:module/:controller/:action', // ], // ], // ], // ], // // // /* Définition des contrôleurs du Module. */ // 'controllers' => [ // 'invokables' => [ // 'Index' => 'Application\Controller\Index', // ], // ], // // /* Configuration de la gestion des vues. */ // 'view_manager' => [ // 'doctype' => 'HTML5', // //'layout' => 'skeleton', // //'not_found_template' => 'notfound', // 'not_found_template' => 'error/404', // // /* Configuration du chargeur de templates par mapping. */ // 'template_map' => [ // // 'skeleton' => "{$sPath}/views/skeleton.phtml", // // 'notfound' => "{$sPath}/views/error-404.phtml", // 'layout/layout' => __DIR__ . '/../views/layout/layout.phtml', // 'application/index/index' => __DIR__ . '/../views/application/index/index.phtml', // 'error/404' => __DIR__ . '/../views/error/404.phtml', // ], // // /* Configuration du chargeur TemplatePathStack. */ // 'template_path_stack' => [ // "{$sPath}/views", // ], // ], //]; /** * Zend Framework (http://framework.zend.com/) * * @link http://github.com/zendframework/ZendSkeletonApplication for the canonical source repository * @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com) * @license http://framework.zend.com/license/new-bsd New BSD License */ return array( 'router' => array( 'routes' => array( 'home' => array( 'type' => 'Segment', 'options' => array( 'route' => '/', 'defaults' => array( 'controller' => 'Application\Controller\Index', 'action' => 'index', ), ), ), // The following is a route to simplify getting started creating // new controllers and actions without needing to create a new // module. Simply drop new controllers in, and you can access them // using the path /application/:controller/:action 'application' => array( 'type' => 'Segment', 'options' => array( 'route' => '/application', 'defaults' => array( '__NAMESPACE__' => 'Application\Controller', 'controller' => 'Index', 'action' => 'index', ), ), 'may_terminate' => true, 'child_routes' => array( 'default' => array( 'type' => 'Segment', 'options' => array( 'route' => '/[:controller[/:action]]', 'constraints' => array( 'controller' => '[a-zA-Z][a-zA-Z0-9_-]*', 'action' => '[a-zA-Z][a-zA-Z0-9_-]*', ), 'defaults' => array( ), ), ), ), ), ), ), 'service_manager' => array( 'abstract_factories' => array( 'Zend\Cache\Service\StorageCacheAbstractServiceFactory', 'Zend\Log\LoggerAbstractServiceFactory', ), 'aliases' => array( 'translator' => 'MvcTranslator', ), ), 'translator' => array( 'locale' => 'fr_FR', 'translation_file_patterns' => array( array( 'type' => 'gettext', 'base_dir' => __DIR__ . '/../language', 'pattern' => '%s.mo', ), ), ), 'controllers' => array( 'invokables' => array( 'Application\Controller\Index' => 'Application\Controller\Index' ), ), 'view_manager' => array( 'display_not_found_reason' => true, 'display_exceptions' => true, 'doctype' => 'HTML5', 'not_found_template' => 'error/404', 'exception_template' => 'error/index', 'template_map' => array( 'layout/layout' => __DIR__ . '/../views/layout/layout.phtml', 'application/index/index' => __DIR__ . '/../views/application/index/index.phtml', 'error/404' => __DIR__ . '/../views/error/404.phtml', 'error/index' => __DIR__ . '/../views/error/index.phtml', ), 'template_path_stack' => array( __DIR__ . '/../views', ), ), // Placeholder for console routes 'console' => array( 'router' => array( 'routes' => array( ), ), ), );
Hors ligne
mais il est vrai qu'il n'y a pas beaucoup voir quasiment pas d'exemples sur le xml alors qu'avec un array on en a.
Hors ligne