Luego de ausentarme por varios meses debido a proyectos personales, vuelvo a traerles un tutorial y esta vez es sobre cómo crear un menu multinivel con php.

Para este tutorial, usaremos arrays que contengan la siguiente estructura:

Como podemos ver, tenemos los campos id, padre_id, nombre y url. Este array también se puede obtener si tenemos una base de datos, así que no tendrás problema en acoplarlo.

Luego de tener declarado nuestra variable $menu_array, el cuál contiene los items del menu, tenemos que realizar una función recursiva la cual verifique si el padre_id es igual al id actual del item para listar los hijos. Para ello, tenemos ésta simple función:

Como podemos ver en la función anterior, hacemos un foreach para entrar a cada item del menu y, suponiendo que el padre_id del menu padre es 0,  verificamos si es que tiene hijos para luego concatenarlo con la variable $menu_html, el cuál generará un listado con los datos requeridos.

De esta manera, podemos crear nuestro menu multinivel de una manera rápida y sencilla con php. Si tienes alguna duda, no lo pienses dos veces y comentalo para poder ayudarte.

Williams Azabache Sarmiento

Que puedo decir...

  • Cande Alberto Rios Valadez

    Solo hay un pequeño detalle que todos los li te crean un ul vacío como hijo, para arreglar este inconveniente agrege otra funcion que cuente los hijos y si no tiene hijos no poner la ul.

    function countSon ($array, $father_id )
    {
    $count=0;
    foreach ($array as $value) {
    if ( $value[“padre_id”] == $father_id ) $count++;
    }
    return $count;
    }

    function menu( $array, $padre_id=0 )
    {
    $menu_html = ”;
    $cant = countSon($array, $padre_id);

    if( $cant > 0 ){ $menu_html .= ”; }

    foreach($array as $elemento)
    {
    if($elemento[‘padre_id’]==$padre_id)
    {
    $menu_html .= ‘‘.$elemento[‘nombre’].’‘;
    $menu_html .= menu($array,$elemento[‘id’]);
    $menu_html .= ”;
    }
    }

    if( $cant > 0 ){ $menu_html .= ”; }

    return $menu_html;