Menu obsoleto php. Menu multinível em PHP e MySQL. Como tornar um link no menu inativo se o visitante estiver nesta página

O menu de um site em PHP, que é controlado por scripts PHP, possui características próprias. Também não é apenas absoluto links relativos, embora possa ser o caso, mas, via de regra, blocos de links gerados dinamicamente de painéis laterais com seções e subseções e blocos de links das próprias páginas internas do site. Um menu gerado dinamicamente é muito prático porque pode ser inserido em qualquer lugar do site e, o mais importante, no momento certo. Ou seja, ao passar para diferentes seções e subseções, você pode expandir dinamicamente diferentes blocos de menu. Além disso, podem ser diferentes não apenas no conteúdo, mas também na forma e no design. Em um site estático também é possível fazer esses truques, mas custará arquivos adicionais modelo e muitos outros truques. Embora um site escrito em PHP não exija nada disso. O modelo permanecerá como estava. Tudo será controlado por um ou mais php simples roteiros.

Para verificar isso, basta escrever um script PHP para gerar dinamicamente um menu, por exemplo, a primeira categoria e forçá-lo a expandir o menu desta categoria através de um script previamente escrito. Os demais títulos podem ser formados de maneira semelhante. Além disso, o código do script em si não mudará muito. Apenas o arquivo de texto será alterado, o que determinará os nomes dos links e os próprios links. O código para tal script é fornecido abaixo.

//Construtor de menu
$menu = @arquivo($rubrica1_menu);
$linhas = contagem($menu);
para ($i = 0; $i< $lines; $i++)
{
list($menu_link,$menu_name,$menu_title)=explode("::", $menu[$i]);
if($page == rub1_part1 e $i == 0) ($refcolor = "style="color:#cc0000"";)
elseif($page == rub1_part2 e $i == 1) ($refcolor = "style="color:#cc0000"";)
elseif($page == rub1_part3 e $i == 2) ($refcolor = "style="color:#cc0000"";)
else ($refcolor = "";)
$rubrica1.="

  • ".$menu_nome."
  • ";
    }
    ?>

    Para que tal script funcione, você precisa de um arquivo de texto no qual serão armazenados os nomes dos links do menu, os próprios links e seus títulos. Criar tal arquivo não é difícil, basta executar o comando Arquivo -> Novo no menu principal do programa Dreamweaver, criar um novo documento HTML, conforme descrito anteriormente, verifique e, se necessário, altere a codificação do novo arquivo para UTF-8 e salve-o com o nome rubric1.dat na pasta de dados criada anteriormente para ele. O caminho completo para este arquivo será D:/Mysitephp/data/rubric1.dat. O conteúdo do arquivo abaixo são os próprios links, seus nomes e seus títulos (dicas). Além disso, para colocar este script em funcionamento, ele deve ser conectado através da função incluir() no mecanismo de modelo main.php.

    Rub1_part1::Seção 1::Seção 1 rubrica 1::
    rub1_part2::Seção 2::Seção 2 rubrica 1::
    rub1_part3::Seção 3::Seção 3 rubrica 1::

    Além disso, você também precisa criar um pequeno script com configurações que irá armazenar o endereço completo do site, caminhos para pastas de páginas e meta descrições do site, caminhos para arquivos de menu do site e conectá-lo usando a função incluir() no mecanismo de modelo main.php. Para fazer isso, você precisa criar um novo arquivo php e salve-o com um nome como settings.php na pasta php. O caminho completo para o arquivo será D:/Mysitephp/php/settings.php e seu conteúdo é fornecido abaixo.

    # pasta com documentos HTML
    $doctemplates = "modelos";
    # caminho completo para o diretório do script
    $turl="http://meusitephp.ru";
    # banco de dados com dados
    $ rubric1_menu = "dados/rubric1.dat";
    ?>

    Como funciona o script PHP para criação de menu? Primeiro na variável $menu usando a função arquivo() O conteúdo do arquivo de texto rubric1.dat é colocado. Então a função contar() conta o número de linhas em arquivo de texto e funções lista() E explodir() o próprio menu se expande em um loop, onde o método de colar linhas (operação ponto . ) são formadas linhas de links com seus nomes e títulos, que são então colocados na variável $rubric1. A seguir está o script do mecanismo de modelo, onde o script do menu é conectado pela função incluir(), move o conteúdo da variável $rubric1 para o local desejado no site usando a função descrita anteriormente rep().

    Tal menu ainda não funcionará, pois contém apenas os próprios links com todos os atributos necessários, mas não existe um script que garanta a transição para esses links e a abertura das páginas do site que corresponderão a esses links. Lidaremos com esse script PHP a seguir.

    A seguir, você pode atualizar o projeto com o script de geração de menu. Você também pode baixar o projeto atualizado na página que será aberta após o cadastro e ativação da assinatura gratuita no painel à direita. O endereço da página deve ser salvo. É nesta página que no futuro aparecerão links para download de atualizações de projetos, vários scripts úteis, programas, lições e tutoriais em vídeo sobre design de circuitos, programação e construção de sites. para iniciantes.

    Baixado atualizado com novos scripts projeto php site agora pode ser comparado com o que aconteceu como resultado das ações descritas acima. A seguir, para eliminar discrepâncias, seria útil substituir completamente o projeto pelo baixado, realizar a operação, iniciar o servidor Denwer, digitar mysitephp.ru na janela do navegador e ver o que saiu dele. O menu da primeira seção deve se expandir na parte superior esquerda do template, conforme imagem abaixo.

    Vá e entre na sua rede social favorita

    Porque expõe o conteúdo do módulo menu.php. Abaixo será apresentado desenvolvimento próprio menu em PHP, que foi escrito do zero no bloco de notas.

    Este código será especialmente útil para sites dinâmicos que possuem mecanismos personalizados. Oferecerei duas opções de código que apresentam pequenas diferenças (as diferenças serão explicadas posteriormente).

    Para começar, darei uma estrutura aproximada do site para o qual este menu é adequado. A estrutura do site deve ficar assim (visualização clássica):

    /index.html /razdel_1/ /razdel_1/articles_1.html /razdel_1/articles_2.html ... /razdel_2/ /razdel_2/articles_1.html /razdel_2/articles_2.html ... ... ... /razdel_N/articles_2 .html

    O site também pode conter subseções para seções:

    /razdel_1/podzaderl_1/ /razdel_1/podzaderl_1/articles_1.html /razdel_1/podzaderl_1/articles_2.html ... /razdel_1/podzaderl_2/articles_1.html /razdel_1/podzaderl_2/articles_2.html

    Esta estrutura também funcionará para o nosso menu, com apenas pequenas diferenças.

    Sugiro criar um arquivo separado para o menu em php. Por exemplo, menu.php seria um ótimo nome para esse arquivo. Para implementar o menu, também é fornecido um estilo de menu em CSS para torná-lo imediatamente mais ou menos bonito. Naturalmente, este estilo é fornecido apenas para referência, uma vez que os designs dos sites são muito diferentes.

    Código para estilo de menu em CSS:

    .menu ( altura:42px; preenchimento:0 0 0 16px; background:url(images/spacer.png) repetir; ) .menu li ( display:block; float:left; ) .menu li.active ( background: #000011 ; ) .menu a ( color:#FFF; display:block; line-height:42px; text-decoration:none; preenchimento:0 14px; ) .menu a:hover ( background:url(images/spacer.png) repetir ;

    Agora, vejamos a primeira opção de implementação de menu em PHP, que é um pouco simplificada.

    A primeira versão do código do menu em PHP

    \n"; for ($i=0;$i ": "
  • "; eco " ".$array_menu[$i]["nome"]."
  • \n"; ) eco ""; ?>

    O menu pode ser dividido em duas partes. O primeiro contém o array de informações $array_menu, que contém os nomes de nossas seções com links para seções. Existe uma opção para inserir esses dados no banco de dados dados MySQL, mas não há nenhum ponto particular nisso, já que a amostra é muito pequena, então isso não afetará a velocidade do trabalho.

    A segunda parte contém a saída do menu através de um loop for. O ciclo compara o endereço do site com o endereço do array $array_menu. Se houver uma correspondência, exibimos a próxima seção do menu com uma classe ativa especial:

  • , caso contrário, apenas
  • . Isto permite-nos destacar com alguma cor a parte do menu em que o utilizador se encontra. Na minha opinião, isso é necessário para qualquer site, para que o usuário entenda em que seção está.

    A ordem na matriz será preservada quando o menu for exibido no site. Ou seja, o array deve ser preenchido na ordem em que o menu deve ser exibido.

    Observação:
    Se os URLs (endereços) dos títulos das seções forem semelhantes a:
    /seção_1
    ou assim
    /razdel_1/nazvanie_razdela.html
    então você precisa escrever uma correspondência exata em array_menu:
    $array_menu[$i]["url"]="/razdel_1"
    ou para o segundo caso:
    $array_menu[$i]["url"]="/razdel_1/nazvanie_razdela.html";

    Como funciona a primeira opção do menu?
    Ele só destaca o menu se você estiver no endereço do cabeçalho da seção. Por exemplo, se o endereço da página for /razdel_1/articles_1.html, o menu não será destacado de forma alguma.

    A segunda versão do código é uma versão modificada da primeira e oferece a capacidade de destacar menus mesmo em artigos localizados em seções.

    A segunda versão do código do menu em PHP

    "; para ($i=0;$i ": "
  • "; echo "".$array_menu[$i]["título"]."
  • "; ) else ( echo ($URL) == ($array_menu[$i]["url"]) ? "
  • ": "
  • "; echo "".$array_menu[$i]["título"]."
  • "; )) eco""; ?>

    Isso é exatamente o que veremos agora. E assim, a tarefa é fazer um menu vertical em forma de lista suspensa.

    Como isso pode ser implementado em PHP? Muito simples! Por exemplo, temos um arquivo index.php, que, dependendo da seção selecionada na lista suspensa, deverá exibir o conteúdo correspondente na página. Isso é implementado da seguinte forma:

    1. Criamos arquivos no formato .html, que conterão o conteúdo necessário para a saída.

    2. Criamos (escrevemos) no script index.php as condições necessárias para exibir as informações relevantes.

    3. Consideramos o script criado do ponto de vista da segurança do script que está sendo executado.

    Bem, parece que terminamos a teoria, vamos passar à prática. Primeiro, criamos páginas estáticas em formato .html, que conterão informações necessárias. Você pode escrever o que quiser lá :) Como resultado, devemos acabar com pelo menos dois arquivos first.html e second.html , para que possamos fazer quantos quisermos, uma vez que entendemos o algoritmo básico de como o código funciona.

    Para exibir uma lista suspensa em um arquivo index.php crie um formulário html e escreva abaixo script PHP com o seguinte conteúdo:



    Menu PHP


    Menu suspenso em PHP












    if (isset ($_GET ["onde"]))
    {
    if ($_GET ["onde" ]==1 )
    $arquivo = "primeiro.html";
    if ($_GET ["onde" ]==2 )
    $arquivo = "segundo.html";
    include($arquivo);
    }
    ?>


    Agora o código do menu suspenso está pronto, e o mais interessante é que funcionará normalmente, mas do ponto de vista da segurança é vulnerável.

    A vulnerabilidade deste script é que a variável $arquivo permanece não inicializado e, neste caso, o valor da variável criada automaticamente vai diretamente para a função incluir, e ela, por sua vez, conecta-a ​​(a variável) com sucesso e a exibe na tela. E pode não ser apenas o arquivo de configuração .htaccess. Para hackear esse script, basta passar no parâmetro where um valor não previsto no código, por exemplo 3. E como esse valor não é previsto no script, é apenas uma variável $arquivo não sofrerá inicialização. Portanto, pode receber um valor arbitrário por meio da string do URL.

    http://localhost/index.php?where=3&file=.htaccess

    Mas é assim, uma ligeira digressão do assunto. 😀

    A solução para este problema é bastante simples, variável $arquivo ele só precisa ser inicializado antes do uso, ou seja, receber um valor padrão.

    Aqui, se o parâmetro where for passado para o script, a variável será inicializada corretamente, caso contrário ficará simplesmente vazia. Foi assim que o menu suspenso [seguro] ficou no PHP.

    P.S. Ao criar cenários, é necessário levar em consideração e excluir todos os possíveis vetores de ataque. Só assim é possível criar um projeto que atenda às normas de segurança e seja solicitado pelo cliente. Vejo você de novo!

    Se você está interessado na resposta à questão de como criar um menu de site, então você veio ao endereço certo.

    Veremos como criar um menu dinâmico em PHP, escrito especificamente para manequins de programação, bem como para aqueles que ainda estão no tanque.

    Lição 3. Tornando dinâmico um menu em php para um site - para manequins

    Vamos criar o futuro layout do nosso site. Para isso, vamos desenhar um site super lindo no Photoshop e cortá-lo em pedaços. Vamos imaginar que o cabeçalho, logotipo, menu e rodapé não estão escritos em palavras, como neste exemplo, mas são elementos do site com design elegante e colorido.

    Vamos criar três páginas, por exemplo, e chamá-las de Seção 1, Seção 2, Seção 3

    Este texto será diferente para páginas diferentes, mas não nos preocuparemos com isso e deixaremos como está em todas as páginas.

    Vamos começar a criar um site em PHP.

    1. Selecione os blocos de cabeçalho, logotipo, menu e rodapé em arquivos separados com extensão php ou html

    cabeçalho.html

    logo.html

    menu.html

    rodapé.html

    Vamos adicionar um arquivo com este texto para que possamos vê-lo em todas as páginas. Vamos ligar para ele texto.html

    Observação. De agora em diante, manterei os demais registros diretamente no arquivo. texto.html

    2. Vamos criar um template para nosso site em PHP.

    Para fazer isso, faremos uma coisa simples: salvar o arquivo real, mas com extensão php e apague todo o conteúdo do texto. Pode não ser profissional, mas é compreensível, mas complicaremos tudo mais tarde. Agora o principal é entender o princípio do layout.

    3. Agora não precisamos do arquivo template.html.

    Graças a ele temos uma ideia de como será o nosso site.

    4. Nosso modelo é o arquivo template.php

    Agora iremos inserir todos os elementos do site nele usando o comando include.

    5. Vamos criar três páginas, como faríamos inicialmente.

    Seção 1, vamos ligar 1.php

    Seção 2, vamos ligar 2.php

    Seção 3, vamos ligar 3.php

    Para fazer isso, você pode usar o comando mais simples salvar como...

    Deixa eu explicar para os mais pequenos: abra o arquivo modelo.php e pressione salvar como... e salve-o com o nome 1.php, repita o procedimento e salve as páginas do site sequencialmente 2.php, 3.php

    Acabamos com 3 páginas com o mesmo design. Basta colá-lo em vez de um arquivo texto.html outro, complemente com fotos diferentes ou qualquer códigos HTML, os scripts e o conteúdo de cada página serão únicos.

    Atenção!

    Se o arquivo não for criado index.php para a página principal, depois no navegador, digitando o endereço do site, não veremos o site em si, mas apenas a estrutura de diretórios (lista de pastas).

    Você pode procurar em Denver e ver por si mesmo. Vamos consertar a situação - crie um arquivo index.php e vamos ligar sem mais delongas Lar. Ao mesmo tempo, vamos criar um arquivo texto-home.html e usando o comando incluir insira-o na página principal recém-criada do site.

    6. Como visualizar um site em php?

    Nós simplesmente não veremos o que aconteceu. Este não é mais um modelo com extensão html.

    Mas também não é um problema. Precisamos dos nossos, ou seja, servidor local em seu computador. Para fazer isso, instalaremos o Denver e veremos o resultado do nosso trabalho em um navegador, sem ficar online.

    Agora isso é ordem. Digitei o endereço do site e vi tudo o que havia acabado de ser criado em forma normal com design.

    Agora vamos examinar o menu PHP do site.

    1. Abra o arquivo menu.html e transforme as seções 1, 2 e 3 em links do site. Links em PHP são criados de diferentes maneiras.

    Nossa tarefa é aprender como sentir um site criado em PHP. Portanto, faremos links como em um site estático normal, Seção 1, etc.

    Eu absolutamente adoro esse processo de criação de links no Macromedia Dreamweaver. Tenha tempo para colher OK e tome café.

    2. Como tornar um link do menu inativo se o visitante estiver nesta página.

    Será mais cómodo para o visitante navegar no site sabendo em que página se encontra.

    Se você seguiu todos os passos à risca ponto por ponto, verá que todos os links do menu estão constantemente ativos. Como consertar isso?

    Primeiro, vamos lembrar a definição do que é Declarações condicionais

    – é quando alguma ação é executada ou não dependendo das condições.

    Vamos fazer o seguinte:

    if ($master == "Principal")// esta é uma condição. Se for executado, então neste local do menu, através do comando echo, são inseridas tags HTML comuns que exibem a inscrição “Home”.

    eco "

    Lar

    ";

    outro// significa “caso contrário” - o que acontecerá se a condição não for atendida. Neste caso, se a condição não for atendida, a inscrição “Home” será um link que leva à página principal.

    eco "

    Lar

    ";

    • Nós criamos uma condição, mas para que verificar variávelvocê precisa perguntar.

    Para fazer isso, colocaremos os seguintes blocos de código em todas as páginas:

    $mestre = "Principal";

    $master = "Seção 1";

    $master = "Seção 2";

    $master = "Seção 3";

    Como você pode ver, cada página possui seu próprio código.

    Portanto, nossos passos práticos para criar um menu PHP serão os seguintes:

    1) Abra o arquivo index.php

    e cole o código

    $mestre = "Principal";

    para o local onde você insere o código que exibe o próprio menu do site inclua "menu.html";
    ?>

    2) Abra o arquivo menu.html e insira o código com a condição em vez de um simples link HTML para a página principal.

    Olhamos no navegador e admiramos! Se formos para a página principal, o link não estará mais ativo!

    3) Repita os pontos 1 e 2 com páginas 1.php, 2.php, 3.php

    Repetição 1:

    1) Abra o arquivo 1.php e insira antes do código que exibe o bloco de menu com a variável especificada

    $master = "Seção 1";

    2) Abra o arquivo menu.html e insira o código com a condição em vez de um link simples Seção 1, fazendo as seguintes alterações:

    if ($master == "Seção 1")// esta é uma condição. Se for executado, então neste local do menu, através do comando echo, são inseridas tags HTML comuns que exibem a inscrição “Seção 1”.

    eco "

    Seção 1

    ";

    outro// significa “caso contrário” - o que acontecerá se a condição não for atendida. Neste caso, se a condição não for atendida, a inscrição “Seção 1” será um link que leva à página principal.

    eco "

    Seção 1

    ";

    O milagre aconteceu novamente! Agora, se estivermos na página Seção 1, o link no menu não estará ativo.

    A repetição é a mãe do aprendizado! Ou para quem está no tanque! De novo

    Repetição 2

    1) Abrir arquivo 2.php e cole o código.

    $master = "Seção 2";

    2) Abra o arquivo menu.html novamente e cole o código com a condição

    if ($master == "Seção 2")// esta é uma condição. Se for executado, então neste local do menu, através do comando echo, são inseridas tags HTML comuns que exibem a inscrição “Seção 2”.

    eco "

    Seção 2

    ";

    outro// significa “caso contrário” - o que acontecerá se a condição não for atendida. Neste caso, se a condição não for atendida, a inscrição “Seção 2” será um link que leva à página principal.

    eco "

    Seção 2

    ";

    Repetição 3

    1) Abertura arquivo 3.php e defina a variável.

    $master = "Seção 3";

    2) No arquivo menu.html inserimos o código com uma condição em vez de um link Seção 3, as alterações são:

    if ($master == "Seção 3")// esta é uma condição. Se for executado, então neste local do menu, através do comando echo, são inseridas tags HTML comuns que exibem a inscrição “Seção 3”.

    eco "

    Seção 3

    ";

    outro// significa “caso contrário” - o que acontecerá se a condição não for atendida. Neste caso, se a condição não for atendida, a inscrição “Seção 3” será um link que leva à página principal.

    eco "

    Seção 3

    ";

    Resultado final: em vez de links neste tipo de menu

    Lar


    Seção 1

    Seção 2


    Seção 3

    Esta lição sobre php foi escrita em resposta a inúmeras solicitações de visitantes do site e é um guia prático para aprender como criar um menu dinâmico para um site em php.

    A próxima folha de dicas do webmaster explicará como criar títulos, descrições e palavras-chave exclusivas para cada página em PHP.

    Você pode baixar o arquivo com todos os modelos de site e arquivos de menu php. Recomendado para quem é novo em programação.

    Se você está pronto para estudar PHP seriamente, será difícil encontrar um curso em vídeo melhor de Popov. Ele tem muita experiência e um bom estilo.

    ]]> ]]>

    Neste artigo vou mostrar como você pode criar menu multinível em PHP e MySQL. Claro, você pode encontrar muitas opções para criá-lo, mas a julgar pelo número de suas perguntas sobre esse assunto, você precisa de um exemplo. E vou dar isso neste artigo. Deixe-me observar imediatamente que este artigo só faz sentido para quem sabe PHP e sabe como trabalhar com MySQL. Todos os outros precisam passar por isso primeiro ou ler alguns livros sobre PHP e MySQL.

    Primeiramente, vamos criar uma tabela no banco de dados com os seguintes campos:

    • eu ia- identificador único.
    • título- links âncora no menu.
    • link- o endereço para o qual o item de menu levará.
    • id_pai- ID dos pais. Se não houver item pai, então será NULL (ou você também pode colocar 0).

    Arrumamos a mesa, agora é hora Código PHP. Completo Código PHPé dado abaixo:

    $mysqli = new mysqli("localhost", "root", "", "db"); //Conecta-se ao banco de dados
    $result_set = $mysqli->query("SELECT * FROM `menu`"); //Seleciona todos os registros da tabela com o menu
    $itens = array(); //Array para itens de menu
    while (($row = $result_set->fetch_assoc()) != false) $items[$row["id"]] = $row; //Preenche o array com uma amostra do banco de dados
    $filhos = array(); //Array para combinar elementos filhos com seus pais
    foreach ($itens como $item) (
    if ($item["parent_id"]) $childs[$item["id"]] = $item["parent_id"]; //Preenche o array
    }
    function printItem($item, $itens, $crianças) (
    /* Exibe o item do menu */
    eco "

  • ";
    echo "".$item["título"]."";
    $ul = falso; // Os filhos foram renderizados?
    enquanto (verdadeiro) (
    /* Um loop infinito onde procuramos todos os filhos */
    $chave = array_search($item["id"], $filhos); //Procurando por um elemento filho
    se (!$chave) (
    /* Nenhum filho encontrado */
    if ($ul) echo ""; // Se os elementos filhos foram exibidos, feche a lista
    quebrar; //Sai do loop
    }
    unset($crianças[$chave]); // Remove o elemento encontrado (para que não seja exibido novamente)
    se (!$ul) (
    eco "
      "; // Inicia a lista interna se ainda não houver elementos filhos
      $ul = verdadeiro; // Define a bandeira
      }
      echo printItem($items[$chave], $items, $filhos); // Exibe recursivamente todos os elementos filhos
      }
      eco "";
      }
      ?>

      Este código está funcionando perfeitamente, entretanto, você deve entender que ninguém escreve desta forma (em particular, saída via eco Etiquetas HTML). E sua tarefa é pegar o algoritmo desse código, mas não o código em si. E então conecte esse algoritmo ao seu mecanismo. Tentei comentar cuidadosamente o código de saída menu multinível em PHP e MySQL, mas, claro, não é o mais transparente e requer um conhecimento inicial bastante bom. Se você ainda não conhece bem PHP e MySQL, então eu recomendo fortemente que você leia este primeiro

      Análise