Jump to content


Photo

Como Fazer Um Menu Com Submenu?


  • Faça o login para participar
6 replies to this topic

#1 Hudson

Hudson

    Turista

  • Usuários
  • 40 posts
  • Sexo:Não informado

Posted 08/05/2005, 09:12

Olá pessoal, meu problema é o seguinte: quero fazer um menu listando as opções de submenu contida dentro dele, assim:

- Menu1
- Sub-menu1
- Sub-menu1
- Sub-menu1
- Sub-menu1
- Menu2
- Sub-menu2
- Sub-menu2
- Sub-menu2
- Sub-menu2
-Menu3
- Sub-menu3
- Sub-menu3
- Sub-menu3
- Sub-menu3
- Sub-menu3
-MenuN
- Sub-menuN
- Sub-menuN
- Sub-menuN
- Sub-menuN

É praticamente igual ao menu da esquerda do site submarino.com.br

A estrutura do meu banco de dados (Access2000) está da seguinte forma:

Tabela Categorias com relacionamento de integridade referencial com a Tabela Produtos.
Tabela SubCategorias com relacionamento de integridade referencial com a Tabela Produtos.
As tabelas Categorias e SubCategorias possuem a Chave Primária.

Eu tentei fazer assim:

<%
Sql = "SELECT * FROM tbCategorias, tbSubCategorias WHERE tbCategorias.cod_categoria = tbSubCategorias.cod_categoria ORDER BY nomecategoria ASC"
Set rs = cn.Execute(Sql)
%>

<table width="250" border="0" cellspacing="0" cellpadding="0">
<%Do While Not rs.eof%>
<tr>
<td>&nbsp;<%=rs.Fields("nomecategoria")%></td>
</tr>
<%do while not rs.eof%>
<tr>
<td>&nbsp;<%=rs.fields("nomesubcategoria")%></td>
</tr>
<%rs.movenext%>
<%rs.movenext%>
<%loop%>
<%loop%>
</table>

Só que está listando o nome da categoria com codigo 1 e junto as subcategorias com codigo 1 e 2 saltando um registro de cada linha.

Segue em anexo uma cópia do banco de dados para referencia

Attached Files

  • Attached File  bd1.zip   9.69KB   10 downloads


#2 felipecm

felipecm

    Expert

  • Usuários
  • 541 posts
  • Sexo:Não informado
  • Localidade:ABC / SP

Posted 08/05/2005, 20:30

Essa abaixo é uma das formas alternativas que vc pode trabalhar com isso evitando Loop sobre Loop (que seria uma tremenda perda de performance, abrir recordset dentro do Loop).

strConnString = "Provider=SQLOLEDB; Data Source=(local); User Id=sa; Password=; Initial Catalog=pubs"

Set objConn = Server.CreateObject("ADODB.Connection")
Set objRs = Server.CreateObject("ADODB.Recordset")

'A ideia neste SELECT é selecionar todas as SubCategorias e suas respectivas categorias
'Com Left Outer Join, todas as categorias serão mostradas, tendo ou não uma sub-categoria

strSql = "SELECT a.nomecategoria, b.nomesubcategoria "
strSql = strSql & "FROM tbCategorias a LEFT OUTER JOIN "
strSql = strSql & "tbSubCategorias b ON a.cod_categoria = b.cod_categoria "
strSql = strSql & "ORDER BY a.nomecategoria ASC, b.nomesubcategoria ASC"

objConn.Open(strConnString)
objRs.Open strSql, objConn

If Not objRs.EOF Then
  strHtml = "<table>"

  'Guarda o nome da Categoria Anterior
  'O Loop fará da seguinte forma, no primeiro registro, já começa mostrando a categoria e a sub-categoria
  'Depois do MoveNext se nao for EOF, verifica se a categoria alterou com a guardada na variavel strCatAnterior
  'Se nao mudou mostra a proxima sub-categoria
  'Se mudou mostra o cabeçalho da atual e já mostra o registro da sub-categoria

  strCatAnterior = objRs("nomecategoria")
  strHtml = strHtml & "<tr><td>" & strCatAnterior & "</td></tr>"
  Do While Not objRs.EOF
    'Tratando o Caso de uma categoria sem sub-categoria
    If Not IsNull(objRs("nomesubcategoria")) Then
     strHtml = strHtml & "<tr><td> &raquo; " & objRs("nomesubcategoria") & "</td></tr>"
 	 End If

    objRs.MoveNext

    If Not objRs.EOF Then
      strCatAtual = objRs("nomecategoria")
      If strCatAnterior <> strCatAtual Then
        strCatAnterior = strCatAtual
     	 strHtml = strHtml & "<tr><td>" & strCatAnterior & "</td></tr>"
      End If
    End If
  Loop

  strHtml = strHtml & "</table>"
End If

objRs.Close
objConn.Close

'No Final de tudo processa o Response.Write com o conteúdo da Variável
'Ou seja, vc processa essa ação no começo do WebForm, fecha a Connection e o Recordset e quando for usar ..
'Lança um Response.Write na variavel strHtml

Response.Write (strHtml)

MCAD, MCP

#3 Hudson

Hudson

    Turista

  • Usuários
  • 40 posts
  • Sexo:Não informado

Posted 09/05/2005, 10:47

Obrigado pela ajuda Felipe.

#4 viniciusjau

viniciusjau

    Veterano

  • Usuários
  • 1492 posts
  • Sexo:Masculino
  • Localidade:Jaú
  • Interesses:Web Designer em Geral

Posted 09/05/2005, 12:41

Vê se te ajuda:
http://www.superasp..../artigo_466.asp

qualquer coisa posta ae

#5 Hudson

Hudson

    Turista

  • Usuários
  • 40 posts
  • Sexo:Não informado

Posted 10/05/2005, 09:04

Vocês acham que esse relacionamento entre as tabelas que eu fiz está correto ou pode ser melhorado?

#6 Prog

Prog

    ...

  • Ex-Admins
  • 3761 posts
  • Sexo:Masculino
  • Localidade:Rio de Janeiro/RJ
  • Interesses:TI, Software Livre, Design Digital e Rock'n'Roll.

Posted 10/05/2005, 09:16

Isto depende um pouco da solução que você quer criar.
Mas a estrutura de menu poderia ser criado com uma unica tabela, relacionada com ela mesma.

Se tiver um pouco mais de paciência, o menu pode ser criado com uma função recursiva.
------
Mero mortal!

#7 Hudson

Hudson

    Turista

  • Usuários
  • 40 posts
  • Sexo:Não informado

Posted 10/05/2005, 16:20

Como que funciona essa função recursiva?




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq