salve a tutti.
ho provato a fare un menu a tendina gerarchico tramite asp ma non riesco a rigirarmici.
l'idea progettuale è questa.
nel database ho i seguenti campi
id, etichetta, ordine, subvoce, link, sottSioNo
a me serve anche sapere se una voce di menu è la prima o l'ultima e la stessa cosa con le voci dei sottomenu
ho messo la tabella in un array
quindi ho fatto un ciclo che mi trovi la prima voce che formatterò in modo speciale.
poi cerco una voce diversa da prima e ultima e cerco tutte le voci correlate mettendole in un array diverso.
dopodichè stampo la voce root e le relative (eventuali) voci di sottomenu.
poi stampo l'ultima voce
ovviamente si fa prima a dirsi che a farsi, infatti mi mette i dati in un ordine che non capisco proprio.
potreste darmi una mano?
grazie
PS per il momento fa solo un elenco ricavando i dati da database senza nessuna formattazione.
codice:
<%
'individuo la prima voce di menu
for i=0 to contovoci-1
if arrvocy(i, 3)=0 then
response.Write("<li class=""first"">"& arrvocy(i, 1) &"")
' i=contovoci
end if
next
'individuo voci di menu centrali
dim vocisot()
for t=0 to contovoci-1
'verifico che NON sia la prima o l'ultima voce di menu
if arrvocy(t, 3)<>0 AND arrvocy(t, 3)<>999 then '999=ultima voce di menu. stabilito arbitrariamente
'ricerco sottomenu per la voce t attuale
dim sot
sot=0
for s=0 to contovoci-1 'conto quante voci di sottomenu ci sono
if s<>t AND arrvocy(s, 3)<>0 AND arrvocy(s, 6)<>0 AND arrvocy(s, 3)<>999 AND arrvocy(s, 4)=arrvocy(t, 0) then
sot=sot+1
end if
next
redim vocisot(sot+1, 6)
for y=0 to sot
if y<>t AND arrvocy(y, 3)<>0 AND arrvocy(y, 6)<>0 AND arrvocy(y, 3)<>999 AND arrvocy(y, 4)=arrvocy(t, 0) then
vocisot (y, 0) = arrvocy(y, 0) 'id
vocisot (y, 1) = arrvocy(y, 1) 'etichetta
vocisot (y, 2) = arrvocy(y, 2) 'lingua
vocisot (y, 3) = arrvocy(y, 3) 'ordine
vocisot (y, 4) = arrvocy(y, 4) 'subvoce
vocisot (y, 5) = arrvocy(y, 5) 'link
vocisot (y, 6) = arrvocy(y, 6) 'sottomenuSioNo
end if
next
response.Write( arrvocy(t, 1) &"
" )
for q=0 to ubound(vocisot)-1
if vocisot(q, 1)<>"" then
response.Write("
"&vocisot(q, 1)&"
" )
end if
next
end if
next