Foros del Web » Programando para Internet » PHP » Zend »

[SOLUCIONADO] Recuperar en un Container para Zend_Navigation

Estas en el tema de Recuperar en un Container para Zend_Navigation en el foro de Zend en Foros del Web. Hola: Trabajo con la extension Tree de Gedmo, obtengo un array : @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código HTML: Ver original Array (     [id] => 1 ...
  #1 (permalink)  
Antiguo 25/04/2013, 10:19
 
Fecha de Ingreso: enero-2010
Mensajes: 491
Antigüedad: 14 años, 10 meses
Puntos: 12
Recuperar en un Container para Zend_Navigation

Hola:

Trabajo con la extension Tree de Gedmo, obtengo un array :
Código HTML:
Ver original
  1. Array
  2. (
  3.     [id] => 1
  4.     [menu] => Gestión Documental
  5.     [lft] => 1
  6.     [lvl] => 0
  7.     [rgt] => 20
  8.     [root] => 1
  9.     [controller] =>
  10.     [action] =>
  11.     [class] => top-a
  12.     [active] =>
  13.     [visible] => 1
  14.     [__children] => Array   (  [0] => Array
  15.                 (
  16.                     [id] => 4
  17.                     [menu] => Registro
  18.                     [lft] => 2
  19.                     [lvl] => 1
  20. )
necesito vaciar esta información a otro array que será mi container para el zend_navigation como esto
Código HTML:
array (
       'label' => 'Gestión Documental',
        'id' => '1',
        'uri' => '/'
    ),
    array(
        'label' => 'Zend',
        'uri' => 'http://www.zend-project.com/',
        'order' => 100
)
no se si existe esto en la extendion de Gedmo o si lo debo hacer manualmente he intentado usar RecursiveIterator, RecursiveIteratoIterator, pero no logro el resultado.

Gracias por su ayuda.
  #2 (permalink)  
Antiguo 26/04/2013, 06:21
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 10 meses
Puntos: 845
Respuesta: Recuperar en un Container para Zend_Navigation

La idea es iterar y agregar las paginas al container, postea el código que estas utilizando.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #3 (permalink)  
Antiguo 26/04/2013, 07:17
 
Fecha de Ingreso: enero-2010
Mensajes: 491
Antigüedad: 14 años, 10 meses
Puntos: 12
Respuesta: Recuperar en un Container para Zend_Navigation

con esto busco en todo el arbol
Código PHP:
Ver original
  1. $iterator = new \RecursiveIteratorIterator(new \RecursiveArrayIterator($arrayTree),
  2.                 RecursiveIteratorIterator::SELF_FIRST);
Donde $arrayTree es el array que la extension Tree de Gedmo me arroja, seguidamente veo que es necesario crear un foreach.
Código PHP:
Ver original
  1. $array = array();
  2. foreach ($iterator as $key => $value) {
  3. //Aqui debería poder recurperar los valores de arra de Gedmo para vaciarlos al Container.
  4. $array['label'] = //No se como capturar el : [menu] => Gestión Documental
  5. }

Última edición por wilmer30; 26/04/2013 a las 07:37
  #4 (permalink)  
Antiguo 26/04/2013, 10:33
 
Fecha de Ingreso: enero-2010
Mensajes: 491
Antigüedad: 14 años, 10 meses
Puntos: 12
Respuesta: Recuperar en un Container para Zend_Navigation

continuo con la recursividad y quedaría algo asi:
Código PHP:
Ver original
  1. $Iterator = new Recursive(new RecursiveArrayIterator($arrayTree), RecursiveIteratorIterator::LEAVES_ONLY);
  2.         foreach ($Iterator as $k => $v){
  3.             if (!is_array($v)){
  4. //              echo $v . "\n";
  5.                 $array['id'] = $k;
  6.             }else
  7.                 $array['pages'] = array();
  8.         }
llamando a una clase de esta manera:

Código PHP:
Ver original
  1. class Recursive extends \RecursiveIteratorIterator {
  2.     private $parentKey = null;
  3.  
  4.     }
  5.     public function callHasChildren() {
  6.         $bool = parent::callHasChildren ();
  7.         if ($bool) {
  8.             $this->parentKey = $this->key ();
  9.         }
  10.         return $bool;
  11.     }
  12.     public function current() {
  13.    
  14.         return $this->key()."=>".parent::current();
  15.     }
  16. }

esto recorre todo el arbol imprimiendo el key y el valor, lo ideal sería pasar a otra matriz, pues ese es mi problema cuando callHasChildren lo detecta debe ser capaz de almacera en la nueva matriz 'pages' que son sus nuevas páginas.
  #5 (permalink)  
Antiguo 26/04/2013, 11:59
 
Fecha de Ingreso: enero-2010
Mensajes: 491
Antigüedad: 14 años, 10 meses
Puntos: 12
Respuesta: Recuperar en un Container para Zend_Navigation

Voy analizando https://github.com/l3pp4rd/DoctrineE...er/doc/tree.md, https://github.com/l3pp4rd/DoctrineE...ons/issues/150, y de hecho ya tiene metodos que ayudan a iterar en el arbol, uno de ellos es childrenHierarchy, que me permite generar un array de parámetros <ul><li></li></ul>, lo malo es que no encuentro ejemplos.
  #6 (permalink)  
Antiguo 27/04/2013, 07:54
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 10 meses
Puntos: 845
Respuesta: Recuperar en un Container para Zend_Navigation

childrenHierarchy debería retornar la estructura lista para iterar, luego deberia ser suficiente con iterar sobre el getChildren en un método recursivo, en el issue tienes un ejemplo.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #7 (permalink)  
Antiguo 27/04/2013, 09:52
 
Fecha de Ingreso: enero-2010
Mensajes: 491
Antigüedad: 14 años, 10 meses
Puntos: 12
Respuesta: Recuperar en un Container para Zend_Navigation

por favor si pudieras dejar el link, por que no encuentro dicho ejemplo, de todos modos, es como dices iterar y pasar las paginas al container, el problema para mi es pasar las páginas al container.

gracias por tu ayuda.
  #8 (permalink)  
Antiguo 27/04/2013, 11:21
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 10 meses
Puntos: 845
Respuesta: Recuperar en un Container para Zend_Navigation

Al final de https://github.com/l3pp4rd/DoctrineE...omment-2127263 tienes un ejemplo.
__________________
http://es.phptherightway.com/
thats us riders :)
  #9 (permalink)  
Antiguo 29/04/2013, 07:46
 
Fecha de Ingreso: enero-2010
Mensajes: 491
Antigüedad: 14 años, 10 meses
Puntos: 12
Respuesta: Recuperar en un Container para Zend_Navigation

Pero ese ejemplo es más de concatenación, yo requiero pasar los [__children] (tendrá un array hijo) a un [page].

en si requiero una clonación de la estructura original que me arroja childrenHierarchy con diferentes identificadores.
  #10 (permalink)  
Antiguo 29/04/2013, 08:33
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 10 meses
Puntos: 845
Respuesta: Recuperar en un Container para Zend_Navigation

La idea es la misma, la diferencia es que en vez de concatenar en cada llamada recursiva tu agregas los childrens.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #11 (permalink)  
Antiguo 29/04/2013, 09:09
 
Fecha de Ingreso: enero-2010
Mensajes: 491
Antigüedad: 14 años, 10 meses
Puntos: 12
Respuesta: Recuperar en un Container para Zend_Navigation

puse a funcionar el ejemplo de esta manera:
Código PHP:
Ver original
  1. $repo = $this->em->getRepository('Application\Entity\Menu');
  2.         $arrayTree = $repo->childrenHierarchy();
  3.         $this->render_nested_set($arrayTree);
  4. ......
  5.  
  6.     private function render_nested_set($coll)
  7.     {
  8.         $output = "\n";
  9.         foreach ($coll as $key=>$record) {
  10.             $output .= "<li>".$record->getMenu();
  11.             if ($record->getChildren()!=null) {
  12.                 $output .= "\n".$this->render_nested_set($record->getChildren());
  13.             }
  14.             $output .= "</li>\n";
  15.         }
  16.         return $output."</ul>\n";
  17.     }
y me dice:
Cita:
Fatal error: Call to a member function getMenu() on a non-object in C:\xampp\htdocs\bcbtram\application\modules\defaul t\controllers\IndexController.php on line 233
y en mi modelo si existe public function getMenu() {...}.

Etiquetas: container
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 03:43.