Foros del Web » Programando para Internet » PHP »

Crear menu arbol a partir de tabla recursiva

Estas en el tema de Crear menu arbol a partir de tabla recursiva en el foro de PHP en Foros del Web. Hola.. como puedo crear un menú a partir de una tabla recursiva? Mi tabla es asi.. oficinas (idoficina, descripcion, dependencia) Donde dependencia tiene el id ...
  #1 (permalink)  
Antiguo 07/01/2011, 01:55
Avatar de richardinj  
Fecha de Ingreso: enero-2005
Ubicación: Ciber Espacio
Mensajes: 2.180
Antigüedad: 19 años, 9 meses
Puntos: 11
Pregunta Crear menu arbol a partir de tabla recursiva

Hola.. como puedo crear un menú a partir de una tabla recursiva?

Mi tabla es asi.. oficinas (idoficina, descripcion, dependencia)

Donde dependencia tiene el id de oficina, seria algo asi como el id padre...

Mi raiz inicia con cero

Con que script podría generarlo?


He probado el script que viene en los FAQs, peor no me funciona... sale vacio..
Código PHP:
function crearArbol($tabla,$id_field,$show_data,$link_field,$parent,$prefix){
    
/*Armar query*/
    
$sql='select * from '.$tabla.' where '.$link_field.'='.$parant;

    
/*Asumiendo que se usa MySQL (se puede cambiar facilmente a otra db)*/

    
$rs=mysql_query($sql);
    if(
$rs){
           
/*Recorrer todos las entradas */
           
while($arr=mysql_fetch_array($rs)){
        
/* Imprimir campo a mostrar*/
                
echo($prefix.$arr[$show_data].'<br>');
        
        
/* imprimir arbol the "hijos" de este elemento*/
                
crearArbol($tabla,$id_field,$show_data,
                               
$link_field,$arr[$id_field],$prefix.$prefix);
           }
    }    
}  

 echo 
crearArbol('oficinas','idoficina','descripcion','dependencia',0,'-'); 
Saludos
  #2 (permalink)  
Antiguo 07/01/2011, 09:20
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 14 años, 2 meses
Puntos: 331
Respuesta: Crear menu arbol a partir de tabla recursiva

Aunque la recursividad no es mi fuerte, te paso una idea. Asegúrate de crear y completar la tabla de pruebas correctamente. Modificar y adaptar a gusto! 1 saludo

Código PHP:
<?php

/**
 * Table: temp

Column Information

FieldTypeComment
idint(11)
descripcionvarchar(128)
dependenciaint(11)



Index Information

IndexesColumnsIndex_Type
PRIMARYidUnique



DDL Information

create table

CREATE TABLE 'temp' (
  'id' int(11) NOT NULL AUTO_INCREMENT,
  'descripcion' varchar(128) DEFAULT NULL,
  'dependencia' int(11) DEFAULT NULL,
  PRIMARY KEY ('id')
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=latin1

CREATE TABLE 'temp' (
    'id' DOUBLE ,
    'descripcion' VARCHAR (384),
    'dependencia' DOUBLE 
); 
INSERT INTO 'temp' ('id', 'descripcion', 'dependencia') VALUES('1','General','0');
INSERT INTO 'temp' ('id', 'descripcion', 'dependencia') VALUES('2','Reservas','0');
INSERT INTO 'temp' ('id', 'descripcion', 'dependencia') VALUES('3','Facturacion','0');
INSERT INTO 'temp' ('id', 'descripcion', 'dependencia') VALUES('4','Reservas_Online','2');
INSERT INTO 'temp' ('id', 'descripcion', 'dependencia') VALUES('5','Reservas_Offline','2');
INSERT INTO 'temp' ('id', 'descripcion', 'dependencia') VALUES('6','Cobros','3');
INSERT INTO 'temp' ('id', 'descripcion', 'dependencia') VALUES('7','Pagos','3');

 */
mysql_connect("localhost","user","password");
mysql_select_db("bd217754");

/**
 * Crea menu recursivamente a partir de un elemento de nivel superior
 *
 * @param int $xElement
 * @return array
 * @author barcoavenus.blog.com
 */

function getMenu($xElement){


    
$xResponse = array();

    
$sql "SELECT * FROM temp WHERE dependencia = '$xElement';";
    if(!
$query mysql_query($sql)) $xResponse = array("Error en la select: ".mysql_error());

    while(
$fetch mysql_fetch_assoc($query)){
        
        if(
$fetch['dependencia']) 
        if(
array_key_exists($fetch['dependencia'], $xResponse)){
            
$xResponse[$fetch['dependencia']][$fetch['id']]['descripcion'] = $fetch['descripcion'];
            
$xResponse[$fetch['dependencia']][$fetch['id']]['id'] = $fetch['id'];
        
$xResponse[$fetch['dependencia']][$fetch['id']]['dependencias'] = (count(getMenu($fetch['id']))?getMenu($fetch['id']):"Ninguna");
        }
        else{
            
$xResponse[$fetch['id']]['descripcion'] = $fetch['descripcion'];
            
$xResponse[$fetch['id']]['id'] = $fetch['id'];
            
$xResponse[$fetch['id']]['dependencias'] = (count(getMenu($fetch['id']))?getMenu($fetch['id']):"Ninguna");
        }

    }

    
mysql_free_result($query);

    return 
$xResponse;
}

    echo 
"<pre>";
    
print_r($test getMenu(3));
    echo 
"</pre>";


?>
  #3 (permalink)  
Antiguo 07/01/2011, 10:38
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 16 años, 4 meses
Puntos: 416
Respuesta: Crear menu arbol a partir de tabla recursiva

Cita:
function crearArbol($tabla,$id_field,$show_data,$link_field ,$parent,$prefix){
/*Armar query*/
$sql='select * from '.$tabla.' where '.$link_field.'='.$parant;
Espero ya sea obvio porque te devuelve un resultado vacio.

Etiquetas: partir, tablas, arboles
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




La zona horaria es GMT -6. Ahora son las 10:34.