Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19
  1. #1

    Secondo me non è possibile

    Dopo essermi scervellato all'inifito sono arrivato alla conclusione in oggetto. Ora vi spiego di che si tratta.
    Devo tentare di rapprensentare su una pagina la struttura di un archivio. O meglio delle sue categorie. Mi sono cimentato nel tentativo di fare una cosa a livelli virtualmente infiniti. Per cui la tabella categorie ha i seguenti campi:

    ID (contatore)
    IDPadre (numerico)
    NomeCategoria (testo)

    Ora volevo in un unica pagina poter rappresentare tutte le categoria scorrendo dentro il db, ma mi sono accorto che non è possibile (o almeno io non riesco) disporle tutte in senso logico.

    ID IDPadre Nome
    1 0 Letteratura
    2 1 Poesia
    3 2 Straniera
    4 0 Musica
    5 4 Italiana
    6 5 Rock
    7 1 Prosa
    8 0 Cinema

    Io ovviamente vorrei che venissero mostrate come di seguito:

    Letteratura
    Poesia
    Straniera
    Prosa
    Musica
    Italiana
    Rock
    Cinema

    Ma a quanto pare non c'è via... qualcuno ha qualche idea a riguardo?
    Enrico Frison
    El signore ghe da e suche a chi che no ga i porsei!

  2. #2
    Utente di HTML.it L'avatar di [trodat]
    Registrato dal
    Oct 2004
    Messaggi
    2,135
    Non si capisce bene.
    Come estrai le categorie?

  3. #3
    1)Piccolo appunto:

    Secondo me non è possibile....................


    ..................aprire 3d il cui titolo non specifica la problematica del post! :rollo:


    2) Indizio tecnico:

    Ad ogni modo, devi fare dei loop annidati ricorsivi per generare l'albero.
    Provare paura per un qualcosa che ti possa capitare nel futuro non ti evita quell'evento,ti fa soltanto vivere un presente sbagliato!

  4. #4
    Originariamente inviato da maximum

    2) Indizio tecnico:

    Ad ogni modo, devi fare dei loop annidati ricorsivi per generare l'albero.
    Su questo siamo d'accordo. Quello in cui io trovo la difficoltà è sul fatto che i livelli non so a priori quanti sono, per cui non posso annidare uno dentro l'altro i loop all'infinito... non so se mi spiego. Se sapessi che ho al massimo 3 livelli fare il ciclo delle categorie generali, ad oggi passaggio del loop chiamerei le sottocategorie e infine dentro questo loop ad ogni passaggio chiamerei a sua volta le sottosottocategorie.
    E sarei apposto con 3 loop annidati, ma ciò non è possibile se non so quanti saranno i livelli e se volessi lasciare libera la struttura.
    Enrico Frison
    El signore ghe da e suche a chi che no ga i porsei!

  5. #5
    Utente di HTML.it L'avatar di willybit
    Registrato dal
    May 2001
    Messaggi
    4,367
    Ciao freezone,

    se non sai a priori i livelli di annidamento puoi fare una sub ricorsiva
    ti faccio un esempio
    codice:
    Sub VisualizzaCategorie(idPadre,livello)
    	dim rs,rsx,sep,i
    	sep = ""
    	for i=1 to livello
    		sep = sep & "-->"
    	next
    	set rs = server.CreateObject("ADODB.Recordset")
    	rs.Open "SELECT * FROM categorie WHERE idPadre=" & idPadre & " ORDER BY nome",Conn,3,3
    	if not rs.EOF then
    		do while not rs.EOF
    			Response.Write sep & rs("Nome") & "
    "
    			set rsx = Server.CreateObject("ADODB.Recordset")
    			rsx.Open "SELECT * FROM categorie WHERE idPadre=" & rs("id"), Conn,3,3
    			if not rsx.EOF then
    				VisualizzaCategorie rs.fields("id").value,(livello+1)
    			end if
    			rsx.Close
    			rs.MoveNext
    		loop
    	end if	
    End Sub
    
    VisualizzaCategorie 0,1

  6. #6
    Posso dire che ti amo?
    Grandioso!!!
    Enrico Frison
    El signore ghe da e suche a chi che no ga i porsei!

  7. #7
    Utente di HTML.it
    Registrato dal
    Mar 2001
    Messaggi
    145
    ciao,
    volevo utilizzare il codice sopra descritto per creare un menu ad albero.
    Ho trovato un applet java che, con dei semplici parametri tipo:

    <ul>[*]Gif animate
    <ul>
    [*]Prova
    [/list]
    [*]Sfondi e background[*]Javascript[*]Applet Java[*]ASP[*]XML[*]True type font[*]Guida HTML[*]Dynamic HTML[*]Link[/list]

    crea un bel menu che farebbe al caso mio.
    Ora...il mio database è così costruito:
    id_struttura, sub_1, sub_2, sub_3, sub_4 e sub_5
    il risultato è un codice che, unito da punti, genera questo risultato:
    6.0.0.0.0.0 - struttura principale numero 6
    6.1.0.0.0.0 - sotto struttura 1
    6.1.1.0.0.0 - sotto struttura annidata ....
    ...e così via.
    con questi risultati, il codice da mandare all'applet java sarebbe qualcosa tipo:

    <ul>[*]6.0.0.0.0.0
    <ul>[*]6.1.0.0.0.0
    <ul>[*]6.1.1.0.0.0[/list][*]6.2.0.0.0.0[/list][/list]

    ...non so se sono riuscito a spiegarmi...
    è possibile creare un codice utilizzando quella sub?

    * OPPURE *

    creare un javascript (sempre preso in giro su questo forum), che faccia sempre un menu, scrivendo questo array:

    var Tree = new Array;
    // nodeId | parentNodeId | nodeName | nodeUrl

    Tree[0] = "1|0|Page 1.0.0.0.0.0|#";
    Tree[1] = "2|1|Page 1.1.0.0.0.0|#";
    Tree[2] = "3|1|Page 1.2.0.0.0.0|#";
    Tree[3] = "4|3|Page 1.2.1.0.0.0|#";
    Tree[4] = "5|1|Page 1.3.0.0.0.0|#";
    Tree[5] = "6|2|Page 1.1.1.0.0.0|#";
    Tree[6] = "7|6|Page 1.1.1.1.0.0|#";
    Tree[7] = "8|6|Page 1.1.1.2.0.0|#";
    Tree[8] = "9|1|Page 1.4.0.0.0.0|#";
    Tree[9] = "10|9|Page 1.4.1.0.0.0|#";
    Tree[10] = "11|0|Page 2.0.0.0.0.0|#";

    ...si può fare qualcosa??
    Grazie!!!

  8. #8
    Utente di HTML.it L'avatar di willybit
    Registrato dal
    May 2001
    Messaggi
    4,367
    Questa struttura è diversa da quella di freezone quindi non si può usare una sub ricorsiva.
    Per creare l'albero con gli elenchi potresti fare così
    codice:
    query = "SELECT * FROM strutture ORDER BY id_struttura,sub_1,sub_2,sub_3,sub_4,sub_5"
    set rs = server.CreateObject("ADODB.Recordset")
    rs.Open query,Conn,3,3
    if not rs.EOF then
    	livello=1
    	Response.Write "<ul>" & vbCrLf
    	do while not rs.EOF
    		if rs("sub_" & (livello))>0 then
    			Response.Write "<ul>" & vbCrLf
    			livello=livello+1
    		end if
    		if livello>1 then
    			if rs("sub_" & (livello-1))=0 then
    				for i=livello-1 to 1 step -1
    					if rs("sub_" & i)=0 then
    						Response.Write "[/list]" & vbCrLf
    						livello=i
    					end if
    				next
    			end if
    		end if
    		Response.Write "[*]" & rs("nome_struttura") & " " & rs("id_struttura") & "." & rs("sub_1") & "." & rs("sub_2") & "." & rs("sub_3") & "." & rs("sub_4") & "." & rs("sub_5") & "" & vbCrLf
    		rs.MoveNext
    	loop
    	if livello>1 then
    		for i=livello-1 to 1 step -1
    			Response.Write "[/list]" & vbCrLf
    		next
    	end if
    	Response.Write "[/list]" & vbCrLf
    end if
    dovrebbe essere così se ho capito bene

  9. #9
    Utente di HTML.it
    Registrato dal
    Mar 2001
    Messaggi
    145
    ...la pagina và in errore...

    Tipo di errore:
    ADODB.Recordset (0x800A0CC1)
    Impossibile trovare l'oggetto nell'insieme corrispondente al nome o al numero richiesto.

    il problema è in questa riga:

    if rs("sub_" & (livello))>0 then

    il primo record, se interrogo sub_1, mi restituisce 0, quindi va in blocco...se provo a cambiare, al posto di >0 metto =0 la pagina viene compilata ma totalmente sballata...

  10. #10
    Utente di HTML.it L'avatar di willybit
    Registrato dal
    May 2001
    Messaggi
    4,367
    secondo me non va in errore al primo record ma quando arrivi al quinto livello di sub (per verificare metti un Response.Buffer=0 all'inizio della pagina)
    Nello script controllo giustamente se il livello successivo è MAGGIORE di 0
    effettivamente non ho pensato a quando si raggiunge il quinto e ultimo livello
    così dovrebbe essere ok
    codice:
    query = "SELECT * FROM strutture ORDER BY id_struttura,sub_1,sub_2,sub_3,sub_4,sub_5"
    set rs = server.CreateObject("ADODB.Recordset")
    rs.Open query,Conn,3,3
    if not rs.EOF then
    	livello=1
    	Response.Write "<ul>" & vbCrLf
    	do while not rs.EOF
    		if livello<=5 then
    			if rs("sub_" & (livello))>0 then
    				Response.Write "<ul>" & vbCrLf
    				livello=livello+1
    			end if
    		end if
    		if livello>1 then
    			if rs("sub_" & (livello-1))=0 then
    				for i=livello-1 to 1 step -1
    					if rs("sub_" & i)=0 then
    						Response.Write "[/list]" & vbCrLf
    						livello=i
    					end if
    				next
    			end if
    		end if
    		Response.Write "[*]" & rs("nome_struttura") & " " & rs("id_struttura") & "." & rs("sub_1") & "." & rs("sub_2") & "." & rs("sub_3") & "." & rs("sub_4") & "." & rs("sub_5") & "" & vbCrLf
    		rs.MoveNext
    	loop
    	if livello>1 then
    		for i=livello-1 to 1 step -1
    			Response.Write "[/list]" & vbCrLf
    		next
    	end if
    	Response.Write "[/list]" & vbCrLf
    end if
    famme sape'

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 © 2026 vBulletin Solutions, Inc. All rights reserved.