Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 20-11-2009 15:39:07

loriv
Membre
Date d'inscription: 10-11-2009
Messages: 22

[resolu] Zend_Navigation - problème à l'initialisation

Bonjour,
je souhaite utilisé le module Zend_Navigation de la manière suivante :

Initialisation dans le bootstrap:

Code:

require_once('Menu.php');
$arMenu=New Menu();
$navigation=new Zend_Navigation($arMenu->createArrayMenu());

Menu.php :

Code:

<?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 :

Code:

$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)


-----------------------------------------------------------------------------------------------------------

ZF 1.9.6 + WXP + Xampp 1.7.2 (Php5.3.0  Apache2.2.12 PhpMyadmin3.2.0.1)

Hors ligne

 

#2 20-11-2009 21:44:32

yvann
Membre
Date d'inscription: 24-07-2008
Messages: 81

Re: [resolu] Zend_Navigation - problème à l'initialisation

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 :

Code:

    public function createArrayMenu()
    {
        $arMenus=$this->fetchAll()->toArray();
        $this->arMenus=$this->createNav(0,$arMenus);
        return $this->arMenus;
    }

Il te manque quelque chose

Code:

    public function createArrayMenu()
    {
        $arMenus=$this->fetchAll()->toArray();
        $this->arMenus=$this->createNav(0,$arMenus);
        return $this->arMenus->toArray();
    }

Hors ligne

 

#3 21-11-2009 09:14:37

loriv
Membre
Date d'inscription: 10-11-2009
Messages: 22

Re: [resolu] Zend_Navigation - problème à l'initialisation

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.


-----------------------------------------------------------------------------------------------------------

ZF 1.9.6 + WXP + Xampp 1.7.2 (Php5.3.0  Apache2.2.12 PhpMyadmin3.2.0.1)

Hors ligne

 

#4 21-11-2009 14:37:06

yvann
Membre
Date d'inscription: 24-07-2008
Messages: 81

Re: [resolu] Zend_Navigation - problème à l'initialisation

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

 

#5 23-11-2009 15:32:47

loriv
Membre
Date d'inscription: 10-11-2009
Messages: 22

Re: [resolu] Zend_Navigation - problème à l'initialisation

J'suis vraiment une quiche !!
Dans la fonction

Code:

 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 :

Code:

$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 ....... smile


-----------------------------------------------------------------------------------------------------------

ZF 1.9.6 + WXP + Xampp 1.7.2 (Php5.3.0  Apache2.2.12 PhpMyadmin3.2.0.1)

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