Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    Creare menu ad albero (sottocategorie illimitate)

    Sto cercando di creare uno script ASP che mi estragga i records contenuti in una tabella "categorie" SQL-Server.

    La tabella è gerarchica per mezzo di 2 campi:

    1) MenuId (contatore)
    2) ParentId (int)

    se ParentId = 0 allora è padre, se è presente uno degli ID del campo MenuId allora è figlio.

    Detto questo sto cercando di creare uno script che mi stampi (Response.Write) a video tutto il menu organizzatto in gerarchia.

    Ecco la bozza di codice dove mi sono arenato. Vi avverto che è piena di errori, bisogna riorganizzarla:
    ************************************************** ***************************

    <%
    strSql ="SELECT * FROM vistaCategorie WHERE lang='it';"
    Call prendiRecordset()

    Call leggiMenu()
    '------------------------------------------------------------------------
    Public Sub leggiMenu()

    Dim arrayRecordset
    arrayRecordset=objRs.GetRows()

    While Not objRs.Eof
    For Each figlio in arrayRecordset
    If objRs("ParentId") = figlio Then
    Response.Write "[*]" & objRs("MenuName") & ""
    Else
    leggiMenu(figlio) 'ricorsione
    End If
    Next
    objRs.MoveNext
    Wend

    End Sub
    '------------------------------------------------------------------------
    ************************************************** ***************************
    Grazie a tutti

  2. #2
    Moderatore di ASP e MS Server L'avatar di Roby_72
    Registrato dal
    Aug 2001
    Messaggi
    19,559
    Devi creare una funzione ricorsiva.
    Cerca nel forum, se ne parlò...

    Roby

  3. #3
    Ti ringrazio per la risposta.

    Purtroppo sono 3 giorni consecutivi che cerco documentazione proprio della funzione ricorsiva. Ma tra estrarre i dati dal DB, salvare il recordset in un array e ciclare in modo ricorsivo mi stanno venendo i capelli bianchi.

    Ti posto il codice allo stato attuale che sto facendo.

    Manca la funzione ricorsiva... (credo)

    ------------------------------------------------------------------------------
    <head>
    <link rel="stylesheet" type="text/css" href="css/style.css">
    </head>

    <script type="text/javascript">
    <!--
    function mmenu(mID) {
    var menu = document.getElementById(mID);
    var display = menu.style.display;
    menu.style.display = (display == "block") ? "none" : "block";
    menu.parentNode.style.listStyleImage = (display == "block") ? "url(cartellachiusa.gif)" : "url(cartellaaperta.gif)";
    }

    window.onload = function() {
    var uls = document.getElementsByTagName("ul");
    for (i=0;i<uls.length;i++) {
    if(uls[i].className=="submenu_verticale")uls[i].style.display = "none";
    }
    }
    //-->
    </script>
    <div class="menu_verticale">
    <ul>
    <%
    Call disegnaMenu(0)
    '--------------------------------------------------------------------------------------
    Sub disegnaMenu(valoreParentId)


    strSql ="SELECT * FROM vistaCategorie WHERE lang = '"+lang+"' AND ParentId = "&valoreParentId&";"
    Call prendiRecordset()

    Dim arrayRecordset, nRighe, iRighe
    arrayRecordset=objRs.GetRows()
    nRighe = ubound(arrayRecordSet, 2)

    For iRighe = 0 to nRighe
    Response.Write "[*]" & arrayRecordSet(2, iRighe) & "" & vbCrLf
    Response.Write"<ul class=""submenu_verticale"" id=""submenu-1"">"
    Response.Write"[*]Link"
    Response.Write"[/list]"
    Next
    End Sub
    '--------------------------------------------------------------------------------------
    %>[/list]
    </div>
    ------------------------------------------------------------------------------

  4. #4
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.