Pagina 4 di 22 primaprima ... 2 3 4 5 6 14 ... ultimoultimo
Visualizzazione dei risultati da 31 a 40 su 217
  1. #31
    Utente di HTML.it L'avatar di M4rko
    Registrato dal
    Dec 2000
    Messaggi
    619
    Ho capito pochino di quanto hai scritto :master:

    Qualcosa del genere potrebbe andare?
    Codice PHP:
    function ns_get_path($id)
    {
        global 
    $tabella;
        
    // Assicuriamoci di avere un intero
        
    $id = (int)$id;
        
    // Il percorso dalla radice al nodo
        
    $path = array();

        
    // Recupero i valori "sx" e "dx" del nodo
        
    $sql "SELECT sx, dx FROM {$tabella} WHERE id={$id}";
        
    $res mysql_query($sql);
        
    $line mysql_fetch_assoc($res);
        
        
    // Recupero il percorso
        
    $sql "SELECT id, nome, ROUND((dx-sx-1)/2) AS figli FROM $tabella WHERE sx <= {$line['sx']} AND dx >= {$line['dx']} ORDER BY sx ASC";
        
    $res mysql_query($sql);
        while (
    $line mysql_fetch_assoc($res)) {
            
    $path[] = "<a href=\"index.php?id={$line['id']}\">{$line['nome']}</a> ({$line['figli']})";
        }
        
        
    // Restituisco il risultato
        
    return $path;


    In pratica nella query, oltre al nome ti fai restituire già l'ID e il numero di figli (calcolato dalla funzione ROUND di MySQL, cosi non devi calcolarla lato PHP).

    Ho indovinato?
    Tutti hanno bisogno di credere in qualcosa.
    Io credo che mi farò un'altra birra.


  2. #32
    Si, è quello che volevo fare io!
    Ma ho tre problemi:
    1)Per rendere attivi i collegamenti bisogna linkare l'id successivo, non se stessi... ho provato cosi ma non so se è giusto:
    $path[] = "<a href=\"?action=view&id=".ROUND($line['id']+1)."\">{$line['nome']}</a> ({$line['figli']})";
    2)Se una categoria non ha sottocategorie non dovrebbe essere cliccabile.
    3)Se inserisco una seconda sottocategoria dentro ROOT (es ROOT3) questa non mi viene mostrata quando clicco su ROOT e non capisco il perchè...
    What is the |\/|atrix?

  3. #33
    Utente di HTML.it L'avatar di M4rko
    Registrato dal
    Dec 2000
    Messaggi
    619
    [supersaibal]Originariamente inviato da |\/|atrix
    Si, è quello che volevo fare io!
    Ma ho tre problemi:
    1)Per rendere attivi i collegamenti bisogna linkare l'id successivo, non se stessi... ho provato cosi ma non so se è giusto:
    $path[] = "<a href=\"?action=view&id=".ROUND($line['id']+1)."\">{$line['nome']}</a> ({$line['figli']})";
    2)Se una categoria non ha sottocategorie non dovrebbe essere cliccabile.
    3)Se inserisco una seconda sottocategoria dentro ROOT (es ROOT3) questa non mi viene mostrata quando clicco su ROOT e non capisco il perchè... [/supersaibal]
    Attenzione che la funzione serve per avere il percorso dalla radice ad un determinato nodo (get path, appunto), non per avere una visualizzazione completa dell'albero.

    Non capisco perche si dovrebbe linkare l'id successivo :master:

    Sul fatto di rendere o meno cliccabile una categoria ti basta fare un controllo sul numero di figli (nell'esempio, $line['figli'] == 0)

    E per quanto riguarda l'inserimento di un'ulteriore sottocategoria da quache parte, ripeto, la funzione ti mostra un percorso esatto, non tutto l'albero, quindi se il nuovo nodo fa parte del percorso è giusto visualizzarlo, altrimenti no.

    Forse ti conviene ripescare la funzione display_tree proposta qualche post piu sopra, e modificare quella?
    Tutti hanno bisogno di credere in qualcosa.
    Io credo che mi farò un'altra birra.


  4. #34
    Infatti... sto effettivamente cominciando a rincretinirmi... e non poco!
    Direi di andare per gradi...
    Innanzitutto vorrei rendere l'albero abbastanza gestibile, perciò ho pensato di usare uno scriptino molto carino che ho

    trovato su www.destroydrop.com/javascripts/tree/
    Il problema è che devo riuscire a conoscere l'id del padre nel quale ogni nodo figlio è contenuto...
    Ho un albero del tipo:

    Categoria Principale
    - Abbigliamento
    -- Giacche
    - Calzature
    -- Scarpe
    +++ Nike 707

    ed una tabella cosi composta:
    codice:
    --------------------------------------------
    id |       nome           | sx | dx | tipo |
    --------------------------------------------
     1 | Categoria Principale |  1 | 12 |   0  |
     2 | Abbigliamento        |  2 |  5 |   0  |
     3 | Calzature            |  6 | 11 |   0  |
     4 | Giacche              |  3 |  4 |   0  |
     5 | Scarpe               |  7 | 10 |   0  |
     6 | Nike 707             |  8 |  9 |   5  |
    --------------------------------------------
    Dove ho aggiunto il campo tipo che di default è 0 ma nel caso avesse un numero diverso da 0 vuol dire che il campo non

    rappresenta una categoria, bensì un prodotto ed il numero rappresenta l'id della scheda del prodotto contenuta nella tabella

    schede.

    Ora avendo un db del genere dovrei generare un codice del tipo:
    codice:
    d.add(0,-1,'Categoria Principale','insert_under.php?id=1');
    d.add(1,0,'Abbigliamento','insert_under.php?id=2');
    d.add(2,1,'Giacche','insert_under.php?id=4');
    d.add(3,0,'Calzature','insert_under.php?id=3');
    d.add(4,3,'Scarpe','insert_under.php?id=5');
    d.add(5,4,' Nike 707','scheda.php?id=5','','','img/page.gif');
    che nel dettaglio sarebbe: add(id,id_padre,'nome','link'); che solo per la Categoria Principale id e id_padre devono essere 0

    e -1

    Ma come si fa?

    Il massimo che sono riuscito a fare è di differenziare le categorie dai prodotti... il codice della funzione che ho è

    attualmente questo:

    Codice PHP:
    <?php

    $tabella 
    "personale";

    function 
    display_tree($root) {
       global 
    $tabella;
       
    $sql "SELECT sx, dx FROM $tabella WHERE id={$root}";
       
    $result mysql_query($sql) or die(mysql_error());
       
    $row mysql_fetch_array($result);

       
    $right = array();

       
    $sql "SELECT id, nome, sx, dx, tipo FROM $tabella WHERE sx BETWEEN {$row['sx']} AND {$row['dx']} ORDER BY sx ASC";
       
    $result mysql_query($sql) or die(mysql_error());

       while (
    $row mysql_fetch_array($result)) {
           if (
    count($right)>0) {
               while (
    $right[count($right)-1]<$row['dx']) {
                   
    array_pop($right);
               }
           }

    if(
    $row['tipo'] == 0){

    echo 
    str_repeat('-',count($right)).$row['id']." ".$row['nome']."
    "
    ;

    }else{

    echo 
    str_repeat('+',count($right)).$row['id']." ".$row['nome']."
    "
    ;

    }

           
    $right[] = $row['dx'];
       }
    }

    ?>

    Mi dai una mano perfavore?
    Ti ringrazio!
    What is the |\/|atrix?

  5. #35
    [supersaibal]Originariamente inviato da |\/|atrix
    Dove ho aggiunto il campo tipo che di default è 0 ma nel caso avesse un numero diverso da 0 vuol dire che il campo non
    rappresenta una categoria, bensì un prodotto[/supersaibal]
    grande errore.
    Da una parte vanno le categorie, dall'altra i prodotti.
    Questa cosa che hai tu è inutile, inefficente e difficile da gestire.

  6. #36
    Io ho pensato che fosse il metodo migliore... Come dovrei comportarmi allora?
    What is the |\/|atrix?

  7. #37
    [supersaibal]Originariamente inviato da |\/|atrix
    Io ho pensato che fosse il metodo migliore... Come dovrei comportarmi allora? [/supersaibal]
    tabella prodotti, tabella categorie, e tabella della relazione prodotti-categorie.

    le tabelle non si pagano, si possono usare

  8. #38
    Vediamo se ho capito qualcosa:
    Tabella categorie:
    codice:
    -------------------------------------
    id |       nome           | sx | dx |
    -------------------------------------
     1 | Categoria Principale |  1 | 12 |
     2 | Abbigliamento        |  2 |  5 |
     3 | Calzature            |  6 | 11 |
     4 | Giacche              |  3 |  4 |
     5 | Scarpe               |  7 | 10 |
     6 | Da Ginnastica        |  8 |  9 |
    -------------------------------------
    Tabella relazioni:
    codice:
    -----------------------
    id | cat_id | prod_id |
    -----------------------
     1 |   6    |    1    |
    -----------------------
    Tabella prodotti:
    codice:
    --------------------------------
    id | nome_prod |  descrizione  |
    --------------------------------
     1 | Nike 707  |di colore rosso|
    ---------------------------------
    Intendevi cosi?
    E in questo caso come mi comporto con l'albero? Diventa mille volte più complicato!
    What is the |\/|atrix?

  9. #39
    [supersaibal]Originariamente inviato da |\/|atrix
    Intendevi cosi?
    E in questo caso come mi comporto con l'albero? Diventa mille volte più complicato! [/supersaibal]
    Sì, esattamente così.
    L'albero non si complica per niente, le categorie (che formano l'albero) sono sempre quelle

  10. #40
    [supersaibal]
    E in questo caso come mi comporto con l'albero? Diventa mille volte più complicato! [/supersaibal]
    Intendevo dire: ed ora come faccio a stampare questo codice?
    codice:
    d.add(0,-1,'Categoria Principale','insert_under.php?id=1');
    d.add(1,0,'Abbigliamento','insert_under.php?id=2');
    d.add(2,1,'Giacche','insert_under.php?id=4');
    d.add(3,0,'Calzature','insert_under.php?id=3');
    d.add(4,3,'Scarpe','insert_under.php?id=4');
    d.add(5,4,'Da Ginnastica','insert_under.php?id=5');
    d.add(6,5,'Nike 707','scheda.php?id=1','','','img/page.gif');
    What is the |\/|atrix?

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.