---
title: "Hjälp med meny utskrift."
type: "forum-thread"
url: "https://www.webforum.nu/amne/asp/123019-hjälp-med-meny-utskrift"
topic: "ASP"
topic_url: "https://www.webforum.nu/amne/asp"
author: "ConnyFox"
published: "2005-02-22T11:50:56.000Z"
updated: "2005-02-22T22:53:43.000Z"
replies: 10
views: 434
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/asp/123019-hjälp-med-meny-utskrift"
---

# Hjälp med meny utskrift.

## #1 — ConnyFox, 2005-02-22T11:50Z

Jag använder mig utav ett meny script jag hittade här på forumet som jag modifierat lite. Hur som helst så ser databasbyggnaden ut såhär

id - menyalternativets id (doh)

namn - namnet som syns när menyn skrivs ut (doh\*2)

belongto - ifall menyalternativet är undermeny till något annat alternativ så står det alternativets id här, annars 0.

folder - Innehåller en 1 eller 0 som visar på om alternativet endast är en innehållare åt andra alternativ eller om den kan vara både och. (denna kan ni ignorera egentligen)

Nu det jag vill göra är att skriva ut alla menyalternativ i en select ungefär såhär

```
<select>
<option name="menyid" value="5">Bilar</option>
  <option name="menyid" value="7"> - Volvo</option>
  <option name="menyid" value="24"> - saab</option>
<option name="menyid" value="12">Blommor</option>
  <option name="menyid" value="1">tussilago</option>
</select>
```

value skall alltså vara det menyalternativets idnummer.

Dvs att menyalternativen skrivs ut med sina underalternativ efteråt.
Skall tilläggas att menyn kan ha onändligt antal undernivåer.

Någon som kan hjälpa mig med detta?

Permalänk: https://www.webforum.nu/p/123019

## #2 — toha, 2005-02-22T12:04Z

Om du använder dig av SQLServer så skulle jag byggt en SP som hämtar ut alla items med en extra kolumn: itemLevel. Som visar på vilken nivå i strukturen ett item ligger. För att göra dett så skapar man en temptabell som man insertar item i flera steg. Kan visa i sql om så behövs.

Är det bara två nivåer på menyn så kan du köra en UNION på två select satser, en för root-nivå items och en för dess underliggande items och sortera på belongto.

Annars kan du skriva en rekursiv function som responsar ut option-taggar. nackdelen är att man få hämta item i flera omgångar.

Permalänk: https://www.webforum.nu/p/1558340

## #3 — ConnyFox, 2005-02-22T12:11Z

Använder mysql =/ tycker väll att det borde gå o hämta ut alla o sedan sortera dom så dom hamnar i rätt ordning o skriva ut.. eller nått.. :D har ju sett detta göras på så många sidor.

Och dom gör ju det i scriptet när dom skriver ut menyn..

Permalänk: https://www.webforum.nu/p/1558344

## #4 — toha, 2005-02-22T13:17Z

Ja det är klart bättre har du rätt i. Hämta alla och sätta .Filter-egenskapen på recordsetet.

```
Dim itemLevel
Dim rs   <-- dimma globalt
Set rs = .... <- hämta alla items
itemLevel = 0

%>

<select><% Call renderChildNodes(0) %></select>

<%

Function renderChildNodes(ByVal parentId)

   rs.Filter = "belongto = " & parentId
   If rs.RecordCount = 0 then Exit Function
   Do Until rs.Eof
      Response.Write "<option value=""" & rs("id") & """>" & String(itemLevel, "-") & rs("namn") & "</option>"
      Call renderChildNodes(rs("id"))
   Loop

End Function

%>
```

Permalänk: https://www.webforum.nu/p/1558379

## #5 — ConnyFox, 2005-02-22T16:37Z

Hmm det där fungerade inte alls.. den skrev bara ut ett menyalternativ.. Kanske e jag som inte förstog helt iofs..

Permalänk: https://www.webforum.nu/p/1558500

## #6 — toha, 2005-02-22T19:23Z

Sorry men jag testade inget, skrev det helt ad-hoc. Hoppades mest att det skulle hjälpa dig på traven.

Hur recordsetet ut om du skriver ut det?

Permalänk: https://www.webforum.nu/p/1558558

## #7 — ConnyFox, 2005-02-22T19:30Z

brukar vanligtvis använda getrows så kanske är därför jag inte förstår allt..

hur skall detta egentligen se ut?

```
Dim itemLevel
Dim rs   <-- dimma globalt
Set rs = .... <- hämta alla items
```

för mig ser det ut såhär

```
Dim itemLevel
Dim rs 
mysql = "select * from meny"
Set rs = connect.execute(mysql)
itemLevel = 0
```

Hur skriver jag ut recordsetet?

Scriptet jag använder (om än modifierat) är detta : 
<http://www.webforum.nu/showthread.php?s=&forumid=148&threadid=76224&highlight=meny>
Macce linktree

Permalänk: https://www.webforum.nu/p/1558564

## #8 — jonnyz, 2005-02-22T19:50Z

Har du flera nivåer? Är det bara en nivå nedåt bör du kunna göra så här:

   hämta alla där belongto=0 
   börja loopa 
      anropa databasen och hämta alla som har belongto=aktuellt id
      loopa igenom och skriv ut alla underkategorier
   avsluta loopen

visserligen inte optimalt, men ganska enkelt.

Permalänk: https://www.webforum.nu/p/1558581

## #9 — ConnyFox, 2005-02-22T19:57Z

Mjo tyvärr kan jag inte garantera att det bara kommer vara 2 nivåer :( har försökt modifiera koden i macce linktree för den gör ju ungefär så som jag vill bara det att alla undernivåer inte visas och att den skriver ut länkar och inte options.. hmm med andra ord inte alls samma och inte heller så optimalt antagligen.. men jag lyckades hur som helst inte så jag vände mig hit..

Permalänk: https://www.webforum.nu/p/1558588

## #10 — ConnyFox, 2005-02-22T21:27Z

Ok har fixat denna koden nu,en modifierad version av koden som kan hittas på andra sidan i denna tråden.

<http://www.webforum.nu/showthread.php?s=&threadid=96541&perpage=25&highlight=meny%20under&pagenumber=2>

Den fungerar utmärkt och gör exakt det jag vill ha gjort.
bara ett problem, den måste ju markera att det är undermenyer på något vis. Jag får bara inte till det.
Tror jag lyckats markera dom mest konstiga kombinationerna utan just underkategorina.

```
Sub PrintTree(intParent)
  strSQL = "SELECT id, me_belongto, me_namn FROM meny WHERE me_belongto = " & intParent
  Set objRubrik = objConn.Execute(strSQL)

  Do Until objRubrik.EOF
  
    strSQL = "SELECT me_belongto FROM meny WHERE me_belongto = " & objRubrik(0)
    Set objNode = objConn.Execute(strSQL)

    If NOT objNode.EOF Then
      Response.Write("<option>" & objRubrik(2) & "</option>")
	  PrintTree objNode(0)
	   Else
      Response.Write("<option>" & objRubrik(2) & "</option>")
	  End If

    objNode.Close : Set objNode = Nothing : 
	objRubrik.MoveNext
  Loop

  objRubrik.Close : Set objRubrik = Nothing

End Sub

PrintTree 0

objConn.Close : Set objConn = Nothing
```

Permalänk: https://www.webforum.nu/p/1558646

## #11 — ConnyFox, 2005-02-22T22:53Z

JAAAAAAAAAAAAAa!!!!
jag löste det, fy helvete vad bra jag är ;D

```

response.write "<select>"

call dbopen(connect)

Sub PrintTree(intParent,intSub)
  MySQL = "SELECT id, me_belongto, me_namn FROM meny WHERE me_belongto = " & intParent & " Order by me_namn"
  Set objRubrik = connect.Execute(MySQL)

  Do Until objRubrik.EOF
  
    MySQL = "SELECT me_belongto FROM meny WHERE me_belongto = " & objRubrik(0)
    Set objNode = connect.Execute(MySQL)

if intSub = 1 then
strSub = "-"
else
strSub = ""
end if

    If NOT objNode.EOF Then
	Response.Write("<option>" & objRubrik(2) & "</option>")
		PrintTree objNode(0), 1
	Else
      Response.Write("<option>"& strSub & objRubrik(2) & "</option>")
	  End If

    objNode.Close : Set objNode = Nothing : 
	objRubrik.MoveNext
  Loop

  objRubrik.Close : Set objRubrik = Nothing

End Sub

PrintTree 0, 0

call dbclose(connect)

response.write "</select>"
```

Permalänk: https://www.webforum.nu/p/1558690

---

Tråden på webben: https://www.webforum.nu/amne/asp/123019-hjälp-med-meny-utskrift
