Ir para o conteúdo

Menus Dinâmicos

Este tutorial é um exemplo simples de criação de menus dinâmicos usando bases de dados MySQL.

Base de Dados

A Estrutura da Base de Dados deverá ser a seguinte:

CREATE TABLE `md_menuscategorias` (
  `ID` tinyint(4) NOT NULL auto_increment,
  `nome` varchar(20) NOT NULL,
  PRIMARY KEY  (`ID`),
  UNIQUE KEY `ID` (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

CREATE TABLE `md_menuslinks` (
  `ID` tinyint(4) NOT NULL auto_increment,
  `ID_CATEGORIA` tinyint(4) NOT NULL,
  `nome` varchar(30) NOT NULL,
  `url` varchar(100) NOT NULL,
  PRIMARY KEY  (`ID`),
  UNIQUE KEY `ID` (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

Código

<?php
    //Iniciamos a conexão à Base de Dados.
    //As configurações costumam ser estas, mas aconselho-o a revêr as configurações.
    //Um carácter mal colocado é muitas vezes origem de erros.
    mysql_connect("localhost", "root", "") or
    //Ou se der erro, emitimos uma mensagem de erro
    die("Não foi possível conectar à base de dados: " . mysql_error());

    //Seleccionamos a base de dados. Pode alterar o nome para a sua base de dados.
    mysql_select_db("base_de_dados");

    //Executamos uma query à base de dados, em que seleccionamos os menus de links que estão na base de dados.
    $query = mysql_query("SELECT ID, nome FROM md_menuscategorias");

    //Aqui iniciamos um ciclo que irá mostrar os menus.
    while ($row = mysql_fetch_array($query, MYSQL_ASSOC)) {
        //Fazemos uma query à base de dados para obter os links do actual menu
        $links = mysql_query("SELECT ID, nome, url FROM md_menuslinks WHERE ID_CATEGORIA = ".$row["ID"]."");

        //Verificamos se o menu tem algum link. Se sim, mostra-mo-lo, se não, nem o menu se mostra. Não vale a pena.
        if (mysql_num_rows($links) > 0){
            //Mostramos a categoria.
            echo "<h2 id="menu_".$row["ID"]."">".$row["nome"]."</h2>";

            //Inicia-mos a lista de categorias.
            echo "<ul>";

            //Criamos um ciclo para imprimir as hiperligações.
            while ($link = mysql_fetch_array($links, MYSQL_ASSOC)){
                //Mostra-mos a hiperligação
                echo "<li><a href="".$link["url"]."" id="link_".$link["ID"]."">".$link["nome"]."</a></li>";
            }

            //Fecha-se a lista HTML
            echo "</ul>";
        }
    }

?>