Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
je souhaite utilisé le module Zend_Navigation de la manière suivante :
Initialisation dans le bootstrap:
require_once('Menu.php'); $arMenu=New Menu(); $navigation=new Zend_Navigation($arMenu->createArrayMenu());
Menu.php :
<?php class Menu extends Zend_Db_Table_Abstract { protected $_name = "menu"; protected $_primary = "id"; protected $arMenus = array(); public function createArrayMenu() { $arMenus=$this->fetchAll()->toArray(); $this->arMenus=$this->createNav(0,$arMenus); return $this->arMenus; } private function createNav($parent, $rstMenus){ $tab=array(); foreach($rstMenus as $menu){ if($parent==$menu['id_parent']) { $tmptab=array(); $tmptab['label']=$menu['titre']; $tmptab['pages']=$this->createNav($menu['id'], $rstMenus); if(count($tmptab['pages'])==0){ unset($tmptab['pages']); } $tab[]=$tmptab; } } return $tab; } }
La fonction createNav me retourne sous forme de tableau l'arbre des menus que je récupère depuis MySql.
Le problème :
Dans l'appel
$navigation=new Zend_Navigation($arMenu->createArrayMenu());
bien que je luis passe un tableau, une erreur survient:
Fatal error: Uncaught exception 'Zend_Navigation_Exception' with message 'Invalid argument: Unable to determine class to instantiate' in C:\xampp\php\PEAR\Zend\Navigation\Page.php:223 Stack trace: #0 C:\xampp\php\PEAR\Zend\Navigation\Container.php(117): Zend_Navigation_Page::factory(Array) #1 C:\xampp\php\PEAR\Zend\Navigation\Container.php(164): Zend_Navigation_Container->addPage(Array) #2 C:\xampp\php\PEAR\Zend\Navigation.php(46): Zend_Navigation_Container->addPages(Array) #3 C:\xampp\htdocs\01-ZF-LR\public\index.php(85): Zend_Navigation->__construct(Array) #4 {main} thrown in C:\xampp\php\PEAR\Zend\Navigation\Page.php on line 223
En revanche, lorque je lui passe directement un tableau sous la forme :
$arMenu= array( array('label'=>'Menu1', 'controller'=>'index', 'action'=>'index', 'pages'=> array(array('label'=>'Menu11', 'controller'=>'index11', 'action'=>'index11', 'title'=>'hello word', 'active'=>'true'), array('label'=>'Menu12', 'controller'=>'index12', 'action'=>'index12', 'title'=>'hello word2', 'active'=>'true') ) ) ); $navigation=new Zend_Navigation($arMenu);
ça marche nickel.
Quelqu'un peut-il m'expliquer le problème SVP ?
D'avance merci, je débute en ZF, je galère mais je veux vraiment aboutir.
Dernière modification par loriv (23-11-2009 15:33:19)
Hors ligne
loriv a écrit:
La fonction createNav me retourne sous forme de tableau l'arbre des menus que je récupère depuis MySql.
Le problème :
Dans l'appel
$navigation=new Zend_Navigation($arMenu->createArrayMenu());
bien que je luis passe un tableau, une erreur survient:
Tu ne parles pas des mêmes fonctions, est-ce là qu'est ton erreur ?
Sinon, ici, tu ne retournes pas un tableau :
public function createArrayMenu() { $arMenus=$this->fetchAll()->toArray(); $this->arMenus=$this->createNav(0,$arMenus); return $this->arMenus; }
Il te manque quelque chose
public function createArrayMenu() { $arMenus=$this->fetchAll()->toArray(); $this->arMenus=$this->createNav(0,$arMenus); return $this->arMenus->toArray(); }
Hors ligne
Merci pour ta réponse.
createArrayMenu() et createNav() sont 2 fonctions distinctes,
la première qui est publique initialise et appelle la seconde.
createNav est récursive et retourne un tabeau à la première.
Sur le principe c'est ok, mon problème est de savoir pourquoi le tableau dans la ligne
$navigation=new Zend_Navigation($arMenu->createArrayMenu()); n'est pas traité en tant que tel.
Hors ligne
loriv a écrit:
Merci pour ta réponse.
createArrayMenu() et createNav() sont 2 fonctions distinctes,
la première qui est publique initialise et appelle la seconde.
createNav est récursive et retourne un tabeau à la première.
Sur le principe c'est ok, mon problème est de savoir pourquoi le tableau dans la ligne
$navigation=new Zend_Navigation($arMenu->createArrayMenu()); n'est pas traité en tant que tel.
Ok je suis désolé, j'ai loupé la seconde ligne de ta première fonction ... quel idiot.
Alors je ne vois pas
Hors ligne
J'suis vraiment une quiche !!
Dans la fonction
private function createNav($parent, $rstMenus){ $tab=array(); foreach($rstMenus as $menu){ if($parent==$menu['id_parent']) { $tmptab=array(); $tmptab['label']=$menu['titre']; $tmptab['pages']=$this->createNav($menu['id'], $rstMenus); if(count($tmptab['pages'])==0){ unset($tmptab['pages']); } $tab[]=$tmptab; } } return $tab; }
j'ai oublié de définir le controller et l'action pour chaque menu.
J'ai rajouté 2 lignes :
$tmptab['lcontroller']=$menu['controller']; $tmptab['action']=$menu['action']
/*************EN RESUME***************************
ça me permet de générer simplement un menu en allant chercher les
infos depuis une base de données en m'affranchissant de connaitre le nombre de niveaux
de l'arbre.
Si ça peut donner des idére à d'autre .......
Hors ligne
Pages: 1