Pagina 13 di 22 primaprima ... 3 11 12 13 14 15 ... ultimoultimo
Visualizzazione dei risultati da 121 a 130 su 217
  1. #121
    Utente di HTML.it L'avatar di M4rko
    Registrato dal
    Dec 2000
    Messaggi
    619
    [supersaibal]Originariamente inviato da mircov
    Ok, mi sono studiato un po' la classe e quindi ho molte domande da fare:

    1) Perchè creare un delNode ed un delRoot se alla fine fanno la stessa cosa utilizzando lo stesso metodo? Per una sorta di coerenza?

    2) Perchè non dichiarare un unico metodo pubblico invece di dichiararne uno pubblico che ne richiama uno privato?

    3) Perchè utilizzi le {} nelle query per racchiudere le variabili invece di utilizzare gli apici?

    Lo so che forse sno domande banali però credo che mi renderanno le idee molto più chiare riguardo le classi e vi sarei grato se poteste rispondermi! grazie mille! Ciao! [/supersaibal]
    1) Per una sorta di coerenza suppongo, più che altro perchè la radice è un nodo "particolare" e la sua cancellazione comporta la cancellazione dell'intero albero. In questo modo si evitano chiamate a delNode() che tentano di cancellare per errore la radice

    2) In questo caso il metodo privato fa un'operazione in maniera sicura, mentre il metodo pubblico, quello cioè che si interfaccia con "l'esterno", si preoccupa di verificare i dati che vengono passati. Nel codice che ha postato andrea questo si traduce nel fare un semplice (ma doveroso) casting a intero dell'ID che viene passato, ma potrebbe esere esteso facendo ulteriori controlli (ed eventualmente restituendo informazioni diverse). Una volta che i controlli sono stati passati, può essere eseguito il metodo privato in maniera sicura.

    3) Qui più che altro è questione di stile.. c'è chi preferisce concatenare le stringhe, c'è chi preferisce mettere l'intera stringa tra doppi apici ed utilizzare le graffe. E' vero che l'utilizzo degli apici singoli su una stringa è piu veloce degli apici doppi, ma in questo caso ci sarebbe la concatenazione di stringhe a "rallentare" (di quanto? non credo poi di molto) gli apici singoli. Alla fine è probabilmente piu una questione di leggibilità, e per come ha scritto il codice andrea mi sembra ben leggibile.

    ovviamente ho espresso pareri che potrebbero allontanarsi dal pensiero di andrea ma che mi sembravano verosimili
    Tutti hanno bisogno di credere in qualcosa.
    Io credo che mi farò un'altra birra.


  2. #122
    Ho, capito.
    Grazie mille per le delucidazioni! Ciao!

  3. #123
    Cmq io nel frattempo mi sto rifacendo la classe.
    Potrei estendere quella di andr3a ma in questo modo mi alleno anche io ad utilizzare gli alberi con questo metodo.

    Sto anche aggiungendo altri metodi (come quello che mostra il path relativo ad un nodo o che mostra l'intero albero).

    Alla fine mi sono anche accorto che una classe del genere può essere utilizzata anche per scopi diversi dalla gestione delle categorie (per esempio per una struttura tipo quella del manuale di php o di qualsiasi altro manuale). Quindi la sto facendo nel modo più generale possibile e seguendo il metodo di andr3a di dividere i parametri (sx e dx) dalle proprietà (nome, descrizione, ecc).
    Alla fine ve la posto così me la correggete!
    Ciao!

  4. #124
    Ciao a tutti,

    nessuno ha realizzato un metodo che permette di estrarre tutto l'albero e memorizzarlo in un array?

    Ciao,
    Paplo

  5. #125
    Codice PHP:
    /* getTree
               * restituisce l'albero
               * relativo ad un nodo passato
               * $node è la variabile che indica
               * l'id del nodo da scorrere
            */
            
    function getTree($node 0)
                    {
                       
    $where "";
                       
                       
    // Se viene passato l'id di un nodo
                       // imposto $where per mostrare solo
                       // quel nodo
                       
    if ($node != 0)
                         {
                            
    // Ottengo i flag dx e sx del nodo
                            
    $node $this->_getProperties($node);
                            
                            
    // Costruisco la clausola WHERE
                            
    $where "WHERE " $this->_prefix "tree.sx >= '$node[sx]'
                                        AND " 
    $this->_prefix "tree.dx <= '$node[dx]'";
                         } 
    // END if $node != 0
                       
                       
    $query "SELECT " $this->_prefix "tree.id AS id,
                                        " 
    $this->_prefix "tree.sx AS sx,
                                        " 
    $this->_prefix "tree.dx AS dx,
                                        " 
    $this->_prefix "details.name AS name
                                   FROM " 
    $this->_prefix "tree
                              LEFT JOIN " 
    $this->_prefix "details ON " $this->_prefix "details.node = " $this->_prefix "tree.id
                               
    $where
                               ORDER BY " 
    $this->_prefix "tree.sx ASC";
                       
                       
    // Esecuzione della query
                       // e restituzione del risultato
                       
    $result mysql_query($query);
                       
                       
    // Costruisco l'array da esportare
                       
    $i 0// Contatore dell'indice dell'array
                       
    $lastSx 1// Ultimo valore del flag sx
                       
    $tab 0// numero di ripetizioni del carattere di indentazione
                       
    while ($row mysql_fetch_array($result))
                            {
                               
    // Inizio procedimento di indentazione
                               
    $sx = (int)$row['sx'];
                               if ( 
    $sx === ( $lastSx ) )
                                 {
                                    
    $tab++;
                                 }
                               else if ( 
    $sx > ( $lastSx ) && $tab >= ( $sx - ( $lastSx ) ) )
                                 {
                                    
    $tab -= $sx - ( $lastSx );
                                 }
                               
    // Fine procedimento di indentazione
                               
                               // Assegnazione dei valori all'array da esportare
                               
    $export[$i]['id'] = $row['id'];
                               
    $export[$i]['name'] = str_repeat'' $tab ) . $row['name'];
                               
    $export[$i]['sx'] = $row['sx'];
                               
    $export[$i]['dx'] = $row['dx'];
                               
                               
    $i++;
                               
    $lastSx $row['sx'];
                            }
                        return 
    $export;
                    } 
    // End getTree() 
    Eccolo qua, fresco fresco (l'ho fatto circa tre ore fa )

    Se vuoi utilizzare le tabelle della classe di andr3a dovrai rinominare alcune tabelle all'interno del metodo perchè questo è quello che ho creato per la mia classe.
    Inoltre dovri cambiare il metodo che ottiene i valori dei flag sx e dx (io utilizzo $this->_getProperties mentre andr3a utilizzava firstQuery() se non sbaglio)

    Non dovrebbe essere difficile cmq.

    Il metodo accetta opzionalmente l'id di un nodo e ti restituisce l'albero relativo.

  6. #126
    Originariamente inviato da mircov
    [PHP]
    Il metodo accetta opzionalmente l'id di un nodo e ti restituisce l'albero relativo.
    e' quello che fa il getNode della mia, no ? :master:



    comunque sia, riguardo le risposte ti ha gia' detto tutto m4rko, unico appunto e' che se si tratta di numeri interi , gia' castati dai metodi pubblici, non ha alcun senso usare gli apici e la mia classe si basa tutta sulla tabella tree, che sono tutti INT(10) UNSIGNED ed il tree_id o il branch_id, che sono anch' essi INT(10) UNSIGNED ... e se non erro usare gli apici significa castare a stringa in query per poi far ricastare ad INT dentro mysql ... insomma, piu' lento e forse inutile, correggetemi se sbaglio , la mia idea di suddividere in 2 tabelle questa tipologia di gestione database ad albero era basata proprio sul fatto di dover lavorare unicamente su interi ed una tabella con soli interi, piu' veloce per qualunque tipo di operazione
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  7. #127
    Originariamente inviato da andr3a
    e' quello che fa il getNode della mia, no ? :master:
    Non me ne ero accorto! Ero così preso dal metodo di spostamento che ho tralasciato il resto. Cmq io utilizzo una query. Rimane da capire quale sia più veloce se le tue due query la mia unica query che però fa un casino da pazzi. Stava sull'articolo se non sbaglio e l'ho adattata alla nuova struttura.

    Cmq grazie mille per il chiarimento.
    In conclusione conviene di più utilizzare le {} che gli apici?!

  8. #128
    Originariamente inviato da mircov
    Cmq io utilizzo una query
    $node = $this->_getProperties($node);

    questo non fa un' altra query ??? :rollo:


    Originariamente inviato da mircov
    . Rimane da capire quale sia più veloce se le tue due query la mia unica query che però fa un casino da pazzi. Stava sull'articolo se non sbaglio e l'ho adattata alla nuova struttura.
    allora rileggilo perche' nell' articolo dice che per un intero branch ti servono sempre e comunque 2 query o almeno 2 ... o ho letto male io ? :master:
    e il mio getNode ne fa esattamente 2 , almeno mi sembra ...


    Originariamente inviato da mircov
    Cmq grazie mille per il chiarimento.
    In conclusione conviene di più utilizzare le {} che gli apici?!
    no, non c' entra niente ... le graffe servono per racchiudere in modo leggibile variabili php all' interno di stringhe a doppi apici, gli apici, singoli o doppi che siano, servono per query su campi date, text, char o varchar, anche blob , ma non servono a niente, anzi sono dispendiose e piu' lente, per campi INT o BIGINT , perche' non sono stringhe da mettere tra apici, sono numeri che se castati non possono essere altro che numeri
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  9. #129
    Certo che certe volte sono proprio st****o!
    Avevo davanti il metodo getPath e non getTree!
    Cmq sia hai ragione.
    Ancora grazie per l'ulteriore chiarimento.

  10. #130
    Originariamente inviato da andr3a
    no, non c' entra niente ... le graffe servono per racchiudere in modo leggibile variabili php all' interno di stringhe a doppi apici, gli apici, singoli o doppi che siano, servono per query su campi date, text, char o varchar, anche blob , ma non servono a niente, anzi sono dispendiose e piu' lente, per campi INT o BIGINT , perche' non sono stringhe da mettere tra apici, sono numeri che se castati non possono essere altro che numeri
    esempio pratico

    create table test ( id INT(10), test VARCHAR(200) );


    $id = isSet( $_POST['id'] ) ? (int)$_POST['id'] : 1;
    $test = isSet( $_POST['test'] ) ? mysql_real_escape_string( $_POST['test'] ) : 'nulla';


    $sql = "INSERT INTO test VALUES( {$id}, \"{$test}\" )";
    mysql_query( $sql );






    Originariamente inviato da mircov
    Certo che certe volte sono proprio st****o!
    Avevo davanti il metodo getPath e non getTree!
    Cmq sia hai ragione.
    Ancora grazie per l'ulteriore chiarimento.
    hai letto la classe superficialmente
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

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.