Primero que todo quiero disculparme con Uds. por el tiempo y algún conflicto que haya generado y darles mis sinceras gracias por responderme.
*
Con la guía de Triby (es muy probable que yo lo haya colocado en el lugar incorrecto):
Código PHP:
Ver original$html .= '<li><a href="pagina.php?opcion='.$id_menu.'">'.$menu['todos'][$id_menu]['productos_nombre'];
if(isset($menu[$id_padre])) { $numero = count($menu[$id_padre]); $html .="(".$numero.")";
}
$html .='</a>';
Arroja en pantalla:
*
Con tu ayuda Quimfv (también imprime en pantalla el mismo resultado que Triby):
Código PHP:
Ver original$html .= '<li><a href="pagina.php?opcion='.$id_menu.'">'.$menu['todos'][$id_menu]['productos_nombre'];
$html .=" ( ".count($menu[$id_padre])." )"; $html .='</a>';
Agregando el "print_r":
Código HTML:
Ver originalArray
(
[todos] => Array
(
[1] => Array
(
[productos_id] => 1
[productos_parent_id] => 0
[productos_nombre] => Inicio
)
[2] => Array
(
[productos_id] => 2
[productos_parent_id] => 1
[productos_nombre] => Categoria1
)
[3] => Array
(
[productos_id] => 3
[productos_parent_id] => 1
[productos_nombre] => Categoria2
)
[4] => Array
(
[productos_id] => 4
[productos_parent_id] => 1
[productos_nombre] => Categoria3
)
[5] => Array
(
[productos_id] => 5
[productos_parent_id] => 2
[productos_nombre] => Categoria1_Subcategoria1
)
[6] => Array
(
[productos_id] => 6
[productos_parent_id] => 4
[productos_nombre] => Categoria3_Subcategoria1
)
[7] => Array
(
[productos_id] => 7
[productos_parent_id] => 4
[productos_nombre] => Categoria3_Subcategoria2
)
)
[0] => Array
(
[0] => 1
)
[1] => Array
(
[0] => 2
[1] => 3
[2] => 4
)
[2] => Array
(
[0] => 5
)
[4] => Array
(
[0] => 6
[1] => 7
)
)
Otros datos de la idea:
Página completa con su conexión a la BBDD:
Código PHP:
Ver original<?php
function crearConexion(){
//Datos para la conexión con el servidor
$servidor = "localhost";
$nombreBD = "base2";
$usuario = "root";
$contrasena = "";
//Creando la conexión, nuevo objeto mysqli
$conexion = new mysqli($servidor,$usuario,$contrasena,$nombreBD);
//Si sucede algún error la función muere e imprimir el error
if($conexion->connect_error){
die("Error en la conexion : ".$conexion->connect_errno. "-".$conexion->connect_error);
}
//Si nada sucede retornamos la conexión
return $conexion;
}
// Cargamos opciones del menú
function cargaMenu($mysqli) {
// Falta una columna que permita seleccionar orden
// Ahora se muestran como fueron dados de alta
$sql = "SELECT * FROM productos";
$res = $mysqli->query($sql);
while($row = $res->fetch_assoc()) {
$id_padre = $row['productos_parent_id'];
// Verificamos si existe el menú padre o lo creamos
(!isset($menu[$id_padre]) && $menu[$id_padre] = array()); // Agregamos ID del elemento actual al padre
$menu[$id_padre][] = $row['productos_id'];
// Agregamos el elemento actual al arreglo 'todos'
$menu['todos'][$row['productos_id']] = $row;
}
return $menu;
}
// Mostramos menú
function menu($id_padre, $hijos, $menu) {
$html = "<ul>\n";
foreach($menu[$id_padre] as $id_menu) {
$html .= '<li><a href="pagina.php?opcion='.$id_menu.'">'.$menu['todos'][$id_menu]['productos_nombre'];
$html .=" ( ".count($menu[$id_padre])." )"; $html .='</a>';
// Este menú tiene hijos?
if(isset($menu[$id_menu])) { //Si quiero ver los hijos
if($hijos=="ver_hijos") {
$html .= menu($id_menu, $hijos, $menu );
}
//o no verlos
if($hijos=="ocultar_hijos "){
}
}
$html .= "</li>\n";
}
$html .= "</ul>\n";
// Devuelve el valor
return $html;
}
// Lo hacemos funcionar
$mysqli = crearConexion();
$menu = cargaMenu($mysqli);
// Mostramos menú, padre=0 para menú principal
echo menu(1, "ver_hijos", $menu);
echo "<pre>";
echo "</pre>";
?>
Estructura de la tabla:
Código SQL:
Ver originalCREATE TABLE IF NOT EXISTS `productos` (
`productos_id` INT(11) NOT NULL AUTO_INCREMENT,
`productos_parent_id` INT(11) NOT NULL,
`productos_nombre` VARCHAR(30) COLLATE utf8_spanish_ci DEFAULT NULL,
PRIMARY KEY (`productos_id`)
)
INSERT INTO `productos` (`productos_id`, `productos_parent_id`, `productos_nombre`) VALUES
(1, 0, 'Inicio'),
(2, 1, 'Categoria1'),
(3, 1, 'Categoria2'),
(4, 1, 'Categoria3'),
(5, 2, 'Categoria1_Subcategoria1'),
(6, 4, 'Categoria3_Subcategoria1'),
(7, 4, 'Categoria3_Subcategoria2');
Más gráficamente esta es la idea que muestre la suma de los hijos:
Ojalá me puedan dar otro empujón, amigos! Por favor