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

    Costruzione class categories

    Salve. Ho creato questa classe

    Codice PHP:
    class Categories
         
    {
            function 
    Categories()
                    {
                       
    $this->categories = array();
                    } 
    // END Categories
            
            
    function tree($id $name '' $level 0)
                    {
                       
    $query "SELECT id,name,parent FROM categories WHERE parent=$id ORDER BY name";
                       
    $result mysql_query($query);
                       while (
    $this->row mysql_fetch_array($result))
                            {
                               
    $this->_buildCategoryName($id $name $level);
                               
    $this->tree ($this->row['id'],$name,$level+1);
                            }
                       return 
    $this->categories;
                    } 
    // END function tree
                    
            
    function _buildCategoryName($id $name $level)
                    {
                       
    $name str_repeat("",$level) . $this->row['name'] .  "\n";
                       
    $this->categories["$name"] = $this->row['id'];
                    }
         } 
    Ora vorrei estendere questa classe in modo da modificare il modo di agire del metodo privato _buildcategoryName in modo che aggiunga anche i tag <option></option> in modo da riutilizzare la classe per costruire il menù di una select. Solo che non so come fare!

    Per caso devo creare prima una classe base?

  2. #2
    Ho modificato il tutto in questo modo:
    Codice PHP:
    class AbstrCategories
         
    {
            function 
    AbstrCategories()
                    {
                       
    $this->categories = array();
                    } 
    // END Categories
            
            
    function tree($id $name '' $level 0)
                    {
                       
    $query "SELECT id , name , parent FROM categories WHERE parent = $id ORDER BY name";
                       
    $result mysql_query($query);
                       while (
    $this->row mysql_fetch_array($result))
                            {
                               
    $this->_buildCategoryName($id $name $level);
                               
    $this->tree($this->row['id'],$name,$level+1);
                            }
                       return 
    $this->categories;
                    } 
    // END function tree
         

    Codice PHP:
    class TreeCategories extends AbstrCategories
         
    {
            function 
    TreeCategories()
                    {
                       
    parent::AbstrCategories();
                    } 
    // END Categories
            
            
    function tree($id $name '' $level 0)
                    {
                       
    parent::tree();
                    } 
    // END function tree
                    
            
    function _buildCategoryName($id $name $level)
                    {
                       
    $name str_repeat("",$level) . $this->row['name'] .  "\n";
                       
    $this->categories["$name"] = $this->row['id'];
                    }
         } 
    Mi dice che il documento non contiene dati.
    Incomma, la prima classe che ho postato funziona perfettamente. Però ora dovrei modificare il metodo. Come faccio? Nessuno Lo sa? Come è possibile!

  3. #3
    Utente di HTML.it L'avatar di M4rko
    Registrato dal
    Dec 2000
    Messaggi
    619
    Nella classe derivata
    codice:
    function tree($id = 0 , $name = '' , $level = 0)
    {
        parent::tree();
    }
    dovrebbe essere piuttosto
    codice:
    parent::tree($id, $name, $level);
    Però hai veramente bisogno di ridefinire il metodo, visto che l'unica cosa che fai nella classe figlia è richiamare il metodo della classe padre?
    Se sarà cosi per ogni classe derivata, non ti conviene ogni volta ridichiarare tree()
    Tutti hanno bisogno di credere in qualcosa.
    Io credo che mi farò un'altra birra.


  4. #4
    Ho aggiornato la classe in questo modo prima di leggere il post

    Codice PHP:
    class AbstrCategories
         
    {
            function 
    AbstrCategories()
                    {
                       
    // Array che conterrà l'albero
                       
    $this->categories = array();
                    } 
    // END Categories
            
            
    function output()
                    {
                       while (list(
    $name$id) = each ($this->_tree()))
                            {
                               echo 
    $name ' [' $id ']
    '
    ;
                            }
                    }
            
            
    ///// METODI PRIVATI /////
            
    function _tree($id $name '' $level 0)
                    {
                       
    $query "SELECT id , name , parent FROM categories WHERE parent = $id ORDER BY name";
                       
    $result mysql_query($query);
                       while (
    $this->row mysql_fetch_array($result))
                            {
                               
    $this->_buildCategoryName($id $name $level);
                               
    // Ricorsione
                               
    $this->_tree ($this->row['id'],$name,$level+1);
                            }
                       return 
    $this->categories;        
                    } 
    // END function tree
                    
            
    function _buildCategoryName($id $name $level)
                    {
                       
    $name str_repeat("",$level) . $this->row['name'] .  "\n";
                       
    $this->categories["$name"] = $this->row['id'];
                    } 
    // END function _buildCategoryName
         

    Codice PHP:
    class CategoriesOption extends AbstrCategories
         
    {
            function 
    CategoriesOption()
                    {
                       
    parent::AbstrCategories();
                    } 
    // END Categories
            
            
    function output()
                    {
                       while (list(
    $name$id) = each ($this->_tree()))
                            {
                               echo 
    '<option value="' $id '">' $name '</option>';
                            }
                    }
         } 
    Credi che debba definire prima una classe generale ma onestamente questa è la prima classe che faccio e quindi non sono ancora molto pratico. Secondo te come potrei migliorarla?

  5. #5
    Ancora una modifica. Ho creato tre classi: una generale che si occupa di inserire l'intero albero in un array e di costruire il nome. Altre due che si occupano rispettivamente di creare l'albero pronto per la stampa a video e l'albero che andrà inserito poi nel select. Di seguito inserisco le classi.

    Class AstrCategories
    Codice PHP:
    class AbstrCategories
         
    {
            function 
    AbstrCategories()
                    {
                       
    // Array che conterrà l'albero
                       
    $this->categories = array();
                    } 
    // END Categories
            
            
    function output()
                    {
                    }
            
            
    ///// METODI PRIVATI /////
            
    function _tree($id $name '' $level 0)
                    {
                       
    $query "SELECT id , name , parent FROM categories WHERE parent = $id ORDER BY name";
                       
    $result mysql_query($query);
                       while (
    $this->row mysql_fetch_array($result))
                            {
                               
    $this->_buildCategoryName($id $name $level);
                               
    // Ricorsione
                               
    $this->_tree ($this->row['id'],$name,$level+1);
                            }
                       return 
    $this->categories;        
                    } 
    // END function tree
                    
            
    function _buildCategoryName($id $name $level)
                    {
                       
    $name str_repeat("",$level) . $this->row['name'] .  "\n";
                       
    $this->categories["$name"] = $this->row['id'];
                    } 
    // END function _buildCategoryName
         

    Class CategoriesOption
    Codice PHP:
    class CategoriesOption extends AbstrCategories
         
    {
            function 
    CategoriesOption()
                    {
                       
    parent::AbstrCategories();
                    } 
    // END Categories
            
            
    function output()
                    {
                       while (list(
    $name$id) = each ($this->_tree()))
                            {
                               echo 
    '<option value="' $id '">' $name '</option>';
                            }
                    }
         } 
    Class CategoriesTree
    Codice PHP:
    class CategoriesTree extends AbstrCategories
         
    {
            function 
    CategoriesTree()
                    {
                       
    parent::AbstrCategories();
                    } 
    // END Categories
            
            
    function output()
                    {
                       while (list(
    $name$id) = each ($this->_tree()))
                            {
                               echo 
    $name ' [[url="default.php?section=administration&module=categories&op=edit&step=view&id=' $id '"]modifica[/url] | [url="default.php?section=administration&module=categories&op=delete&step=view&id=' $id '"]cancella[/url]]
    '
    ;
                            }
                    }
         } 

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.