Visualizzazione risultati 1 fino 12 di 12

Discussione: albero javascript con php

  1. #1
    Guest

    Predefinito albero javascript con php

    Salve ragazzi, sto cercando di riempire una tabella di configurazione di un albero javascript usando i dati recuperati da mysql attraverso php.

    Qualcuno mi da una mano?
    Non riesco a sequenziare i dati...

    Per esempio

    Ottengo file1 e chiedo la discendenza file11, file21, file31; per continuare chiedo i discendenti di file11 e continuo... il punto è che devo potere ritornare a file 21 ad un certo punto e ricominciare per trovare tutte le altre dipendenze...

    Qualche idea? Grazie!

  2. #2
    L'avatar di funcool
    funcool non è connesso Utente storico
    Data registrazione
    05-02-2004
    Residenza
    Qui... Non lì, qui!
    Messaggi
    15,433

    Predefinito

    Ma lo script è in PHP o in JavaScript?
    Prova a scrivere qualche linea di codice che stai usando.
    Mattia vi manda a FunCool - Matriz - Directory Gogol - Sfondo rosso per la Birmania
    «Tu mi dai fastidio perché ti credi tanto un Dio!» «Bè, dovrò pur prendere un modello a cui ispirarmi, no?» Woody Allen

  3. #3
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Non è molto chiaro il tuo problema, provo a scriverti qui di seguito i tre metodi principali per la "visita" di un albero (ovvero l'elencazione unica di tutti i nodi che lo compongono)

    In ordine anticipato (o in preordine, pre-order):
    - elenca la radice
    - visita in ordine anticipato ciascuno dei sottoalberi

    In ordine posticipato (o in postordine, post-order):
    - visita ciascun sottoalbero in ordine posticipato
    - elenca la radice

    In ordine per livelli:
    - elenca la radice
    - inserisci i sottoalberi in una coda, uno alla volta
    - estrai un sottoalbero alla volta dalla coda e visitalo per livelli

    Può essere un aiuto per iniziare a buttare giù qualcosa...

    Stammi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  4. #4
    Guest

    Predefinito

    In effetti non era molto chiaro...

    Allora, vorrei fare vari alberi javascript a partire de dati immagazzianti in mysql, per leggere i dati utilizzo quindi php.

    COn php vorrei creare il config degli alberi.

    A partire della radice visitando tutti i sottoalberi.
    Il problema è che devo costruire questa struttura:

    'items':[
    ['Fruits (NA)',0, //no action
    ['Citrus (NA)',, //no action
    ['Orange (NA)',null],//no action
    ['Grapefruit (Ref)', 'demo.html'], //reference
    ['Lemon (JS)', "javascript:alert('Lemon Tree')"] //javascript
    ],
    ['What\'s fruit (NA)'] //no action
    ]
    ],

    Quindi comincio con il chiedere chi sono i figli della radice, apro una quadra e li inserisco, ma per ogni figlio potrei/dovrei aprire un'altra quadra che contiene i suoi figli e così via. Quindi ho difficoltà a riempire automaticamente il file...

    Penso che una possibile soluzione sia quella di creare un vettore ausiliario in cui impilare i vari risultati. Per esempio
    $i=1; aus=[radice]
    chi sono i figli di aus[$i]?
    radice ha 3 figli -> aus=[radice,1,2,3]
    $i++;
    chi sono i figli di aus[$i]?
    figlio 1 ha 3 figli -> aus=[radice,1,4,5,6,2,3]
    $i++;

    e così via per ogni sottoalbero fino alla completa lettura di aus!

    Se l'identificativo (1,2,3,...) cresce, vuole dire che scendo nell'albero, se invece scende viceversa. Quindi quando sale e non è contiguo apro una quadra se invece scende la chiudo

    E' possibile secondo voi utilizzare un metodo del genere o mi sto uccidendo per niente perché esiste già un algoritmo?

    Grazie per un qualunque aiuto mi possiate dare!!

  5. #5
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Citazione Originalmente inviato da PIG
    ...
    E' possibile secondo voi utilizzare un metodo del genere o mi sto uccidendo per niente perché esiste già un algoritmo?
    ...
    Citazione Originalmente inviato da dementialsite
    In ordine anticipato (o in preordine, pre-order):
    - elenca la radice
    - visita in ordine anticipato ciascuno dei sottoalberi
    Provo a scriverti qui l'implementazione, ammesso che prelevando i dati da MySQL esista un campo id_superiore nel quale è indicato il nodo superiore dell'albero (tramite il suo id):
    Codice PHP:
    <?php
    function pre_order_visit ($next_node)
    {
    if (!isset (
    $next_node)) $next_node = 0;
    $query = "SELECT * FROM TABELLA WHERE id_superiore = $next_node";
    $result = mysql_query ($query, $db);
    $echo ($nextnode + " ");
    while (
    $line = mysql_fetch_array ())
    pre_order_visit ($line['id_superiore']);
    }
    ?>
    Tutto qui. Ti basta chiamare una prima volta la funzione pre_order_visit e hai elencati tutti i nodi una sola volta!

    Stammi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  6. #6
    Guest

    Predefinito

    In pratica per risolvere avrei bisogno di assegnare ad ogni nodo un elemento identificativo e poi elencare secondo tale elemento.

    Ti spiego allora cosa voglio fare e riassumo un po...

    Vorrei creare un sito genealogico e ho bisogno di ricostruire tutto l'albero di tutti i parenti... per il momento mi limiterò a scegliere un cognome ed elencare le persone con tale cognome e le loro discendenze.

    Ogni persona è identificata da un id e una tabella che li associa ad altre persone nel database(id_padre id_madre id_coniuge) , quello che mi mancherebbe, secondo te, sarebbe un'altro campo in cui determini "l'id del matrimonio"... e richiedere di mostrare tutti gli id...

    Temo che un problema nasca dal fatto che la tabella deve essere evolutiva... gli id dei matrimoni non sono consecutivi nel tempo e quindi non è possibile classificare i nodi a priori...

    Però il problema potrebbe essere sviato creando una tabella ausiliaria ogni volta che voglio creare l'albero...

    Ripensandoci bene è quello che stavo facendo con gli indici di prima... radice è il matrimonio 1, i filgi sono 2,3,4 e così via... Poi richiedo di scrivere tutti coloro che erano sotto 1, sotto 2,3 e 4 e così via... esatto?

    Si credo che quest'idea alla fine sia la vincente... anche se devo ancora capire se fattibile... altre idee?

    Mi dareste una mano a costruire il codice?

    Grazie!

    PS
    Io mi ci metto dalla mia naturalmente e appena ho fatto qlc ve lo posto, così da capire dove sono i problemi.

  7. #7
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Se si aggiungono queste ipotesi:
    - non è possibile che una persona si sposi più volte
    - la dinastia viene ricostruita in modo "patriarcale" (cioè solo sulla base dei discendenti maschi)
    ti basta modificare di poco lo script che ti ho postato sopra, inserendo id_padre laddove c'è scritto id_superiore.

    Se invece preferisci una dinastia "matriarcale" allora devi usare come id_superiore quello che tu hai chiamato id_madre.

    Tutto qui. Stammi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  8. #8
    Guest

    Predefinito

    Ti chiedo sinceramente scusa per sembrare così di coccio!

    In effetti se uso la tua proc e parto dal + giovane faccio:

    trovo il padre
    trovo i fratelli
    memorizzo il tutto in una stringa in cui $st="[fr,fr,io]";
    trovo il padre del padre
    trovo i fratelli del padre
    memorizzo su $sr1="[fr,fr,fr,padre]";
    e poi se esistone i fratelli $str="[".$str.",".$str1."]";

    Il problema è che in questo modo i cugini non compaiono...

    Immagina che io abbia uno zio (o più zii) e che lui abbia dei figli, questi hanno lo stesso cognome, ma non compaiono nel tuo schema.

    Ho quindi bisogno di ridiscendere il ramo per scovarli, ma allora come lo scrivo questo?

    Non sembra ma è da diverso tempo che mi ci sbatto la testa...

  9. #9
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Citazione Originalmente inviato da PIG
    Ti chiedo sinceramente scusa per sembrare così di coccio!

    In effetti se uso la tua proc e parto dal + giovane...
    Guarda che è praticamente impossibile che non ti funzioni: è uno degli algoritmi "classici" dell'elaborazione di alberi e non dovrei aver sbagliato a riportarlo...

    Questo, però, funziona solo se esiste un nodo al vertice di tutta la gerarchia (cioè la radice), se parti da un nodo qualsiasi, quindi, dovrai trovare il nodo radice prima di iniziare la visita, così:
    Codice PHP:
    <?php
    function start_preorder ()
    {
    // si suppone che il nodo senza genitori sia unico...
    $query = "SELECT * FROM TABELLA WHERE id_superiore IS NULL";
    $result = mysql_query ($query, $db);
    if (
    $line = mysql_fetch_array ($result))
    pre_order_visit ($line['id']);
    else
    die (
    "Nessuna radice: impossibile visitare l'albero!");
    }
    ?>
    Stammi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  10. #10
    Guest

    Predefinito

    In tale caso diciamo che parto dal bisnonno (prendo il più anziano con il cognome designato) e che applichi la tua procedura...

    Richiedo chi sono i figli
    Poi richiedo chi siano i figli del primo figlio e scendo giù per un ramo automaticamente, ma la tua procedura in questo caso non mi permette di visitare tutte le altre possibilità (i figli del secondo figlio per esempio)...

    Mi dispiace, ma non vedo come possa funzionare, ti ho mostrato dove credo che sia fallace, potresti dirmi come la vedi te in questi due casi? Forse ho solamente gli occhi foderati di prosciutto e non vedo... ti ringrazio per l'aiuto.

    PS
    Il mio problema è comunque la visualizzazione di questo vettore che stai creando e non la sua impilazione... E' forse più facile se dimentico javascript e faccio delle tabelle?

    PPS
    Ho trovato su internet il codice che mi consigli, ma funziona se enumeri i nodi a destra e a sinistra, in pratica hai bisogno di definire il cammino da effettuare sull'albero a sinistra scendi e a destra sali.

    http://www.sitepoint.com/article/hie...ata-database/2

    Questo mi sembra un po pesante da fare con i miei dati...
    Ultima modifica di PIG : 19-07-2006 alle ore 16.59.10

  11. #11
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Citazione Originalmente inviato da PIG
    Richiedo chi sono i figli
    Poi richiedo chi siano i figli del primo figlio e scendo giù per un ramo automaticamente, ma la tua procedura in questo caso non mi permette di visitare tutte le altre possibilità (i figli del secondo figlio per esempio)...

    Mi dispiace, ma non vedo come possa funzionare, ...
    Dipende, possiamo avere ragione entrambi, visto che non ho mai scritto funzioni ricorsive in PHP non so dirti se con la nuova chiamata alla funzione le variabili precedenti vengono conservate (gestione corretta della ricorsione) oppure sovrascritte (gestione sbagliata).
    Citazione Originalmente inviato da PIG
    PS
    Il mio problema è comunque la visualizzazione di questo vettore che stai creando e non la sua impilazione... E' forse più facile se dimentico javascript e faccio delle tabelle?
    Questa non l'ho capita... nella visita non ci sono gli echo() che ti stampano in ordine i dati? Una volta che hai avuto accesso al database puoi stampare quelli che vuoi, no?
    Citazione Originalmente inviato da PIG
    PPS
    Ho trovato su internet il codice che mi consigli, ma funziona se enumeri i nodi a destra e a sinistra, in pratica hai bisogno di definire il cammino da effettuare sull'albero a sinistra scendi e a destra sali.

    http://www.sitepoint.com/article/hie...ata-database/2

    Questo mi sembra un po pesante da fare con i miei dati...
    Quella pagina che hai linkato è una cosa completamente diversa da quella che ti ho proposto io: ti spiega come memorizzare i dati di un albero in base alla sua visita in preordine, non come rilevare dati già memorizzati in un database legati da un vincolo di gerarchia (il campo id_superiore o id_padre che dir si voglia). Ha inoltre un brutto difetto: quando dovrai estendere l'albero sarai costretto a cambiare una marea di campi nel database...

    Stammi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  12. #12
    Guest

    Predefinito

    OK, forse ho trovato...
    http://www.sitepoint.com/article/hie...-data-database
    Anche se il titolo è "storing" in effetti poi parla di visualizzazione dei dati.

    Devo creare una tabella in cui mettere da una parte l'id_padre e dall'altra l'id_figlio e usare la tua procedura per iterare, come scritto nella pagina.

    Devo quindi creare una tabella dinamica per ogni volta che qlc richiede i dati e poi "srotolarla" con la procedura iterativa... vediamo un po cosa mi darà

    Grazie per il supporto e l'aiuto!

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •