Ver Mensaje Individual
  #9 (permalink)  
Antiguo 03/10/2012, 19:10
Avatar de Triby
Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: [APORTE] Menu categorias y subcategorias y mas...

Una posible mejora sería cargar todas las opciones en un array, esto permitiría:

1- Minimizar las consultas a la base de datos
2- Mostrar el menú cuantas veces sea necesario en la página
3- Mostrar sólo las opciones de un submenú

Ejemplo para armar el arreglo:
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 menu";
  7.     $res = $mysqli->query($sql);
  8.     while($row = $res->fetch_assoc()) {
  9.         $id_padre = $row['id_padre'];
  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['id'];
  14.         // Agregamos el elemento actual al arreglo 'todos'
  15.         $menu['todos'][$row['id']] = $row;
  16.     }
  17.     return $menu;
  18. }
  19.  
  20. // Mostramos menú
  21. function menu($id_padre, $menu) {
  22.     $html = "<ul>\n";
  23.     foreach($menu[$id_padre] as $id_menu) {
  24.          $html .= "<li><a href=\"pagina.php?opcion=$id_menu\">{$menu[$id_menu]['menu_nombre']}</a>";
  25.          // Este menú tiene hijos?
  26.          if(isset($menu[$id_menu])) {
  27.               $html .= menu($id_menu, $menu);
  28.          }
  29.          $html .= "</li>\n";
  30.     }
  31.     $html .= "</ul>\n";
  32. }
  33.  
  34. // Lo hacemos funcionar
  35. $mysqli = con();
  36. $menu = cargaMenu($mysqli);
  37.  
  38. // Mostramos menú, padre=0 para menú principal
  39. echo menu(0, $menu);
  40.  
  41. // Podemos repetirlo en el pie de página, sin otras consultas a BDD
  42. echo menu(0, $menu);
  43.  
  44. // O, si necesitamos sólo un submenú específico (productos)
  45. echo menu(5, $menu);
__________________
- León, Guanajuato
- GV-Foto

Última edición por Triby; 23/02/2013 a las 13:44 Razón: Yo edité?... en serio?.. je-je... bueno, faltaba un return!