Bootstrap dynamic menu with PHP and Mysql

Asked

Viewed 2,422 times

2

I have in mysql two tables (subjects and pages), the table pages has a field (assunto_id), which relates which subject is that page.

I would like to mount a menu with submenu in bootstrap

This is Table Subjects

ID  nome_menu_assunto
1   Titulo_1
2   Titulo_2
3   Titulo_3
4   Titulo_4

This is Table pages

ID  assunto_id titulo_menu_pagina
1   2          Titulo...
2   3          Titulo...
3   3          Titulo...
4   4          Titulo...
5   2          Titulo...
6   4          Titulo...
7   3          Titulo...
8   2          Titulo...

This is the script I have in php

    $assuntos = "SELECT * FROM assuntos";

    $resultado_assuntos = mysqli_query($conexao,$assuntos);

    while ($linha_assunto = mysqli_fetch_array($resultado_assuntos)) {

    $subpagina = "SELECT * FROM paginas WHERE assunto_id = {$linha_assunto['id']}";

    $resultado_subpagina = mysqli_query($conexao,$subpagina);

        while ($linha_subpagina = mysqli_fetch_array($resultado_subpagina)) {

            if (!isset($linha_subpagina['assunto_id'])) {
                    echo "<li><a href=\"/{$linha_assunto['nome_menu']}\">{$linha_assunto['nome_menu']}</a></li>";
            } else {
                    echo "<li class=\"dropdown\">";
                    echo "<a href=\"\" class=\"dropdown-toggle\" data-toggle=\"dropdown\" role=\"button\" aria-expanded=\"false\">{$linha_assunto['nome_menu']} <span class=\"caret\"></span></a>";
                    echo "<ul class=\"dropdown-menu\" role=\"menu\">";

                        while ($linha_subpaginas = mysqli_fetch_array($resultado_subpagina)) {
                            echo "<li><a href=\"/{$linha_subpaginas['nome_menu']}\">{$linha_subpaginas['nome_menu']}</a></li>";
                        }

                    echo "</ul>";
                    echo "</li>";                       
                }
            }
    }

However, this way, it shows as menu, only the titles that have indication in the menu assunto_id, and does not show all submenus,

  • 1

    I think you’re repeating things this way. You should put the subject echo outside the while of the subpage, ie just below the first while, and not within the second while as it did.

1 answer

1


I managed to get the result I intended, this is the script

$assuntos = "SELECT * FROM assuntos";
$resultado_assuntos = mysqli_query($conexao,$assuntos);

while ($linha_assunto = mysqli_fetch_array($resultado_assuntos)) {

    $linha_assunto_slug = url_slug($linha_assunto['nome_menu']);

    $linha_sem_filho = "<li><a href=\"{$linha_assunto['nome_menu']}\">{$linha_assunto['nome_menu']}</a></li>";

    $subpagina = "SELECT * FROM paginas WHERE assunto_id = {$linha_assunto['id']}";
    $resultado_subpagina = mysqli_query($conexao,$subpagina);

    $fieldinfo=mysqli_fetch_field_direct($resultado_subpagina,1);

    if ($fieldinfo->max_length > 0) {

        echo "<li class=\"dropdown\">";
        echo "<a href=\"\" class=\"dropdown-toggle\" data-toggle=\"dropdown\" role=\"button\" aria-expanded=\"false\">{$linha_assunto['nome_menu']} <span class=\"caret\"></span></a>";
        echo "<ul class=\"dropdown-menu\" role=\"menu\">";

        while ($linha_subpagina = mysqli_fetch_array($resultado_subpagina)) {
        echo "<li><a href=\"{$linha_subpagina['nome_menu']}\">{$linha_subpagina['nome_menu']}</a></li>";
        }
        echo "</ul>";
        echo "</li>";

        } else {
            echo $linha_sem_filho;
        }                   
} 

Browser other questions tagged

You are not signed in. Login or sign up in order to post.