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 = 0 , $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]]
';
}
}
}