Ver Mensaje Individual
  #1 (permalink)  
Antiguo 14/10/2014, 00:07
mikehove
 
Fecha de Ingreso: abril-2012
Ubicación: Argentina
Mensajes: 215
Antigüedad: 12 años
Puntos: 2
Sumar nodos en función recursiva PHP - Menú - Categorías

Queridísimos amigos. Sigo desarrollando un menú buenísimo, creado inicialmente por el colaborador Triby.

El desafío ahora es sumar los hijos de las categorías, agregando "(número)", por ejemplo, de esta forma:

Código HTML:
Ver original
  1. Categoria_a (5)
  2. Categoria_b (12)
  3. Categoria_c (0)

Código del Menú:
Código PHP:
Ver original
  1. // Cargamos opciones del menú
  2. function cargaMenu($mysqli) {
  3.     $menu = array('todos' => array());
  4.     // Falta una columna que permita seleccionar orden
  5.     // Ahora se muestran como fueron dados de alta
  6.     $sql = "SELECT * FROM productos";
  7.     $res = $mysqli->query($sql);
  8.     while($row = $res->fetch_assoc()) {
  9.         $id_padre = $row['productos_parent_id'];
  10.         // Verificamos si existe el menú padre o lo creamos
  11.         (!isset($menu[$id_padre]) && $menu[$id_padre] = array());
  12.         // Agregamos ID del elemento actual al padre
  13.         $menu[$id_padre][] = $row['productos_id'];
  14.         // Agregamos el elemento actual al arreglo 'todos'
  15.         $menu['todos'][$row['productos_id']] = $row;
  16.     }
  17.     return $menu;
  18. }
  19.  
  20. // Mostramos menú
  21. function menu($id_padre, $hijos, $menu) {
  22.     $html = "<ul>\n";
  23.       foreach($menu[$id_padre] as $id_menu) {  
  24.           $html .= '<li><a href="pagina.php?opcion='.$id_menu.'">'.$menu['todos'][$id_menu]['productos_nombre'].'</a>';
  25.          // Este menú tiene hijos?
  26.          if(isset($menu[$id_menu])) {      
  27.             //Si quiero ver los hijos
  28.             if($hijos=="ver_hijos") {                
  29.               $html .= menu($id_menu, $hijos, $menu );
  30.             }
  31.             //o no verlos  
  32.             if($hijos=="ocultar_hijos "){                  
  33.             }          
  34.          }       
  35.          $html .= "</li>\n";
  36.     }
  37.     $html .= "</ul>\n";
  38.     // Devuelve el valor
  39.     return $html;  
  40. }
  41. // Lo hacemos funcionar
  42. $mysqli = crearConexion();
  43. $menu = cargaMenu($mysqli);
  44.    
  45. // Mostramos menú, padre=0 para menú principal
  46. echo menu(1,  "ocultar_hijos", $menu);

Esto muestra en pantalla:

Código HTML:
Ver original
  1. Categoria_a
  2. Categoria_b
  3. Categoria_c

No sé por donde empezar, creería uso de un arreglo, luego agregarlo a algo como esto:

Código PHP:
             $html .= '<li><a href="pagina.php?opcion='.$id_menu.'">'.$menu['todos'][$id_menu]['productos_nombre'];
             
$html .=" ( aquí número )";
             
$html .='</a>'