Ok... jeg har brug for hjælp til en rekursiv funktion, der skal vise noget menustruktur på et site... det bliver mildest talt ved med at drille...
Hvis man forstiller sig en struktur i denne dur: - Hovedpunkt 1 - Underpunkt 1 - Underpunkt 1.1 - Underpunkt 1.1.1 - Underpunkt 2 - Hovedpunkt 2
Så skal jeg have konstrueret noget, der KUN viser umiddelbare 'børn' til det punkt, man vælger. Dvs. har jeg valgt Hovedpunkt 1, skal menuen se sådan ud: - Hovedpunkt 1 - Underpunkt 1 - Underpunkt 2 - Hovedpunkt 2
Og vælger jeg Underpunkt 1, skal menuen så se sådan ud: - Hovedpunkt 1 - Underpunkt 1 - Underpunkt 1.1 - Underpunkt 2 - Hovedpunkt 2
... og så fremdeles.
Det er ikke noget problem at lave en funktion, der fx. viser hele strukturen. Heller ikke noget problem at lave en funktion, der viser Hovedpunkt 1 og 2 og deres underpunkter, hvis man vælger dem, men det bliver (synes jeg) lidt mere tricky, når man står på Underpunkt 1, og skal have vist strukturen efter ovenstående eksempel.
En funktionsstruktur, der kan lede mig lidt på vej, vil blive overordenligt værdsat!
Data kommer fra et Array, der har både ID på det valgt niveau og dets parentid... (som er 0 for hovedpunkter)
I lang tid har samarbejdsbranchen fokuseret på at forbedre enhedsfunktioner – bedre kameraer, klarere lyd og smartere software. Men den virkelige forvandling handler ikke om funktioner.
en tegn funktion. function tegn(MenuID, OpenID, level) 'tegn menu punktet if IsParent(MenuID, OpenID) then 'find alle børn call tegn(ChildID,OpenID, level+1) end if ... ... end function
og en funktion som undersøger om det aktuelle MenuID er parent til det punkt som skal åbnes.
function IsParent(ParentID,ChildID) ... return true OR false end function
Hvis du ikke selv kan få det lavet, har jeg funktionerne til at ligge et sted (hvis jeg kan finde dem). De gør brug af database, med det burde kunne laves om til et array.
mortency > det er jo bare en fulstændig straight rekursiv funktion, som jeg ser det... Den del forstår jeg meget godt. Dit script vil ikke, som jeg ser det, kunne løse min problematik...
har fundet et af mine script, men det er et gammelt skod script, så det er vist bedre at lave et nyt, end at få det tilpasset. Jeg vil derfor lige høre om du har fået taget hul på opgaven....
sidder netop nu og forsøger at komme op med en kodestump, der kan løse problemet... nu kan den ikke vente længere... skal nok poste noget her, hvis der er gennembrud i sagen... :-/
dette virker umiddelbart... det er nok ret specifikt til mit behov, men tilpas og brug, hvis det er:
function displayTopSpanMenu(arrPages, intMenuId, intParentPageId, intTopParentPageId, intThisPageId, intCssMenuNumber, intLevel) dim i, strOutput, strActive if isarray(arrPages) then for i = 0 to ubound(arrPages,2) if int(arrPages(1,i)) = int(intMenuId) then if int(arrPages(2,i)) = int(intParentPageId) then if cbool(arrPages(5,i)) then if cbool(arrPages(3,i)) then if cbool(arrPages(4,i)) then strOutput = strOutput & "<a href=""/" & arrPages(8,i) & "/" & arrPages(0,i) & "/" & arrPages(7,i) & ".html"" class=""menu"">" & vbcrlf end if if int(intThisPageId) = int(arrPages(0,i)) or int(intTopParentPageId) = int(arrPages(0,i)) then strActive = "Active" else strActive = "" end if strOutput = strOutput & vbtab & "<span class=""spanMenu" & intCssMenuNumber & "ContainerLevel" & intLevel & strActive & """>" & vbcrlf strOutput = strOutput & vbtab & vbtab & "<span class=""spanMenu" & intCssMenuNumber & "ContentLevel" & intLevel & strActive & """>" & vbcrlf strOutput = strOutput & vbtab & vbtab & vbtab & arrPages(6,i) & vbcrlf strOutput = strOutput & vbtab & vbtab & "</span>" & vbcrlf strOutput = strOutput & vbtab & "</span>" & vbcrlf if cbool(arrPages(4,i)) then strOutput = strOutput & "</a>" & vbcrlf end if strOutput = strOutput & "<br>" & vbcrlf
if displaySubsBln(arrPages,arrPages(0,i),intThisPageId) then strOutput = strOutput & displayTopSpanMenu(arrPages, intMenuId, arrPages(0,i), intTopParentPageId, intThisPageId, intCssMenuNumber, intLevel +1) end if
end if end if end if end if next end if displayTopSpanMenu = strOutput end function
function displaySubsBln(arrPages, intCurrentPageIdInLoop, intThisPageId) displaySubsBln = false dim i, intParentPageId intParentPageId = int(intThisPageId)
if int(intCurrentPageIdInLoop) = int(intThisPageId) then displaySubsBln = true else while intParentPageId <> 0 for i = 0 to ubound(arrPages,2) if int(arrPages(0,i)) = int(intParentPageId) then intParentPageId = int(arrPages(2,i))
if intParentPageId = int(intCurrentPageIdInLoop) then displaySubsBln = true exit function end if end if next wend end if end function
Det skal lige nævnes, min funktion laver links på en lidt speciel måde... <a href="/1/118/side 2.html" class="menu"> <span class="spanMenu1ContainerLevel0"> <span class="spanMenu1ContentLevel0"> Side 2 </span> </span> </a>
Hej... Jeg plejer at generere mine arrays med en funktion, som jeg desværre ikke har lige her...
Men i princippet er det en standard SQL sætning, der bliver eksekveret vha. adodb.recordset's GetRows funktion - den må du kunne finde noget om et sted (Sidder ikke på min maskine med alle kodestumperne, så jeg kan ikke helt huske den korrekte syntax i hovedet (det er ikke så tit jeg lige sidder med asp mere - laver mere frontend nu)
Men ja, vha. den funktion, får du alle dine rækker ud som et todimensionalt array, som du kan referere til med arrRecords(x,y)
Jeg er lidt i tvivl om nogle af dine variable: arrPages, intMenuId, intParentPageId, intTopParentPageId, intThisPageId
Jeg formoder, at intMenuId er menupunktets unikke ID; intParentPageId bestemmer, hvor menupunktet hører under, men hvad med de andre, hvad bruges disse til?
Puha... det var en menustyring til et Content Management System min gamle arbejdsgiver havde, som jeg ikke har arbejdet med i snart 1 år... men jeg prøver:
arrPages = arrayet med alle sider intMenuId = deres system kunne håndtere flere menuer på samme sider, så denne var i i brug til at holde styr på, hvilken menu man arbejdede i
intParentPageId = forrige sides unikke id
intTopParentPageId = øverste niveaus for denne side... den kan jeg ikke helt huske, hvorfor var med... men hvis man var på 3. eller 4. niveau, så kunne man med denne vide, hvad 1. niveau var...
intThisPageId = denne sides unikke id... hmm. hvorfor skulle jeg mon bruge den... ?
Beklager, det er virkelig lang tid siden, jeg har siddet med den funktion... :o)
#Mailand
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.