Ver Mensaje Individual
  #5 (permalink)  
Antiguo 23/01/2009, 12:25
Avatar de enyalon
enyalon
 
Fecha de Ingreso: agosto-2008
Mensajes: 28
Antigüedad: 16 años, 3 meses
Puntos: 0
Respuesta: Agrupar por Categoría Padre

En un Post del 2006 de GatorV
Encontré estas funciones:
Cita:
http://www.forosdelweb.com/f18/crear-categorias-subcategorias-431446/
Cita:
Pero no me devuelven lo esperado.
Me devuelve
Cat 1
-sub cat 1.1

Y allí termina.
Cita:
Y el resultado que necesito es
Cat 1
-sub cat 1.1
-sub cat 1.2
Cat 2
Cat 3
-sub cat 3.1
-sub cat 3.1.1
-sub cat 3.2
Cat 4
-sub cat 4.1
-sub cat 4.2
Aquí el código que estoy usando para ver en que me estoy equivocando.

Código PHP:
<?php 

function despliegaCategorias() 
{
     global 
$_bd_;
    
    
$_bd_->_sql_consulta("SELECT * FROM ".prefijo."categorias WHERE id_padre = 0 ORDER BY nombre ASC""simple");

   echo 
"Empezar listado:<br>";
   
   while( 
$row $_bd_->_sql_fetch_array()) 

    {
        echo 
$row['nombre'] . "<br>";
        
listaHijos"-"$row['id'] );
    }
    echo 
"Terminando de listar";
}
function 
listaHijos$prefijo ''$id 
{
    global 
$_bd_;
    
$_bd_->_sql_consulta("SELECT * FROM ".prefijo."categorias WHERE id_padre = $id ORDER BY nombre ASC""simple");

    if(
$_bd_->_sql_num_rows() == "0"
    {
        return; 
// No hay categorias "hijo"
    
}
   while( 
$row $_bd_->_sql_fetch_array())
    {
        echo 
$prefijo $row['nombre'];
        
listaHijos$prefijo "-"$row['id'] );
    }


despliegaCategorias();
?>
También encontré esta función:

Cita:
http://www.forosdelweb.com/1299466-post146.html

Posteada por Vaalegk en el 2005
Aquí el código tal cual lo estoy usando.

Código PHP:
<?php 
/*
funcion generica
Parametros:
    $tabla     = Nombre de la tabla en la DB
    $id_field  = Nombre del campo llave de la tabla
    $show_data = Campo a mostrar en el arbol
    $link_field= Campo que establece la relacion padre hijo
    $parent       = padre actual
    $prefix    = string con un campo a mostrar en cada entrada del arbol
*/
function crearArbol($tabla,$id_field,$show_data,$link_field,$parent,$prefix)
{
    global 
$_bd_;
    
    
$_bd_->_sql_consulta("SELECT * FROM ".prefijo."$tabla WHERE $link_field = $parent""simple");

    if(
$_bd_->_sql_num_rows() > $parent
    {
        while( 
$fila $_bd_->_sql_fetch_array())
        {
            echo 
$prefix.$fila[$show_data].'<br>';
            
            
crearArbol($tabla,$id_field,$show_data,$link_field,$fila[$id_field],$prefix.$prefix);
        }
    }

}
crearArbol('categorias','id','nombre','id_padre',0,'-'); 
?>
Y que me devuelve:

Cita:
-Cat 1
-- Cat 1.1

Y no es lo que quiero.
No se en que estoy fallando.
Por favor alguien que me ayude a ver el error.

No pregunto un tema ya tratado sin antes buscar. Como lo ven... lo he hecho. Pero no logre hacer funcionar los códigos.

Así que apiádense de mi.

Les recuerdo la estructura de la tabla en la base de datos
Categorias (id, id_padre, nombre, …)