webForumDet fria alternativet

krånglig if-sats

ASPur ASP

9 svar · 651 visningar · startad av magnusfeldth

Medlem sedan jan. 20034 480 inlägg
Frågan#1

I en meny jag bygger kommer flera olika nivåer användas. Huvudnivå, undernivå 1, undernivå 2 osv. De kommer finnas i en accessdatabas och hämtas från ett fält som heter "level". När level = 1 är det på huvudnivån. Level 2 är undernivå 1, Level 3 är undernivå 2 osv.

När man kommit upp till Level 3 och högre vill jag lägga till en bild, blank.gif. Dock vill jag öka utrymmet för varje level högre än 3. Jag kan tänka mig att man antingen lägger till ytterligare en bild för varje högre level, eller ökar bildens storlek för varje ökande level - eller enklare uttryckt - vid level 3 är koden utskriven så här
"blank.gif" - "Menytext"
Level 4 blir
"blank.gif" - "blank.gif" - "Menytext"

Enklast kanske är att göra bilden större? Den kommer vara transparant och bara funka som placeholder i alla fall så det gör inget att bilden blir bredare. - Men hur skriver jag den koden? Själva matematiken bakom förstår jag
Om Level > 3 så skriv ut följande: "img src="blank.gif" width="bildens orginalstorlek X (Level MINUS 2)"

men hur tusan skulle den faktiska koden se ut?

Hilfe mina vänner!

Medlem sedan juni 20019 519 inlägg
#2

jag hade löst det med CSS och en ul-listor för att skapa noderna under och om ul ul ul finns så skall den ha en margin-left på x antal pixlar...

Medlem sedan jan. 20034 480 inlägg
#3

Jo, fast måste jag inte då skriva in vad varje undernivå specifikt skall innehålla? vill att det skall vara möjligt att ha 100 undermenynivåer om man nu nån gång skulle få för sig en sån galen idé

Medlem sedan juni 20019 519 inlägg
#4

Vad är det för typ av meny du bygger? är det inte en träd-meny du gör? För varje nivå du "kommer" upp i lägger du bara in en ny ul-lista.

Medlem sedan jan. 20034 480 inlägg
#5

hade förvisso inte tänkt att använda mig av listor men om koden ser bra ut är jag öppen för förändring... hur skulle din kod se ut voigtann1?

Medlem sedan juni 20019 519 inlägg
#6

Om det är en navigering som skall vara som en treeview lösning (meny i huvudtaget vill jag ha som en ul-lista) hur ser din ASP kod ut just nu?

Medlem sedan jan. 20034 480 inlägg
#7

så här ser den ut i dagsläget:

<%	Set Connect = Server.CreateObject("ADODB.Connection")
	Connect.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" &Server.MapPath("db/rohdinsdb.mdb")

	Set RecSet = Server.CreateObject("ADODB.Recordset")
    Visa = "SELECT all * FROM menydb WHERE visa = 'ja' order by niva ASC"
   RecSet.Open Visa, Connect, adOpenStatic, adLockOptimistic %>
  
   <% Do Until RecSet.EOF %> 
   <% if RecSet("link") = page then%><div id="meny2">
   <%else%><div id="meny"><%end if%>
   <%if RecSet("underniva") = 1 then %><div id="meny">&nbsp;</div><b><a class="black" href="<%= RecSet("link")%>"><%= UCase(RecSet("namn"))%></a></b>
   <%else%><img border="0" src="images/submeny.gif" width="7" height="8"><a class="black" href="<%= RecSet("link")%>"><%= UCase(RecSet("namn"))%></a><%end if%></div> <% RecSet.Movenext
                loop
             %>
	
	
	<% 
Recset.Close
Connect.Close

Set Recset = Nothing
Set Connect = Nothing
%>
Medlem sedan aug. 2008816 inlägg
#8

<% Do Until RecSet.EOF %> 
   <% if RecSet("link") = page then%><div id="meny2">
   <%else%><div id="meny"><%end if%>
   <%if RecSet("underniva") = 1 then %><div id="meny">&nbsp;</div><b><a class="black" href="<%= RecSet("link")%>"><%= UCase(RecSet("namn"))%></a></b>
   <%else %><img border="0" src="images/submeny.gif" width="<%=RecSet("underniva")*7%>" height="8"><a class="black" href="<%= RecSet("link")%>"><%= UCase(RecSet("namn"))%></a><%end if%></div> <% RecSet.Movenext
                loop

Då ökar bildens bredd med 7px för varje underniva ökar!

Medlem sedan juni 20019 519 inlägg
#9

Om du nu måste köra med en sådan struktur:

dim lRepeat
lRepeat = RecSet("underniva") - 2
If lRepeat>0  Then

	Response.Write(String(lRepeat,"<img border=""0"" src=""images/submeny.gif"" width=""7"" height=""8">""))
End If

Otestad men den borde skriva ut img elementet så många gånger den behöver, 3 => 1 gång, 4 => 2 ggr osv.

redigerad, nej String() är tecken, inte ord. noshornin är inte helt fel lösning.

Annars om du måste ha en bild för varje nivå du kör, kör en for sats:

dim lRepeat
lRepeat = RecSet("underniva") - 2
If lRepeat > 0  Then
	For i = 0 To lRepeat
		Response.Write("<img border=""0"" src=""images/submeny.gif"" width=""7"" height=""8">"")
	Next
End If
Medlem sedan feb. 20034 441 inlägg
#10

Kan du inte bygga det som en funktion som kallar på sig själv (rekursivt)? Så hade jag gjort och sen skriva ut det som en ul li lista.

Lite beroende på hur din databas ser ut i övrigt skulle det även funka att ta bort "level" helt, förutsatt att du har t.ex. "parent_id" istället.

130 ms totalt · 3 externa anrop · v20260731065814-full.25f56b17
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)