Salve,
ho bisogno del vostro preziosissimo aiuto per creare una <select> che visualizzi l'albero delle categorie + illimitate sottocategorie.
Lo script che vi posto è in grado di visualizzare l'albero utilizzando ul + li ma ho bisogno di voi per creare la funzione che stampi l'albero nella select in uno dei seguenti modi:
1)
Capitali
-- Capitali Americane
---- Canada
------ Ottawa
-- Capitali Asiatiche
-- Capitali europee
---- Italia
-- Capitali Oceaniche
Dove siamo
2)
Capitali
Capitali -> Capitali Americane
Capitali -> Capitali Americane -> Canada
Capitali -> Capitali Americane -> Canada -> Ottawa
Capitali -> Capitali Asiatiche
Capitali -> Capitali europee
Capitali -> Capitali europee -> Italia
Capitali -> Capitali Oceaniche
*/
Codice PHP:<?php
/*DATABASE:
CREATE TABLE `categorie` (
`categoria_id` int(11) NOT NULL AUTO_INCREMENT,
`parent_id` int(11) DEFAULT '0',
`posizione` int(3) DEFAULT NULL,
`categoria` varchar(255) DEFAULT NULL,
`descrizione` text,
PRIMARY KEY (`categoria_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
//Connection to database
$link = mysql_connect('localhost', 'root', '');
if (!$link) {
die('Not connected : ' . mysql_error());
}
if (! mysql_select_db('esempio') ) {
die ('Can\'t use foo : ' . mysql_error());
}
$refs = array();
$list = array();
$sql = "SELECT categoria_id, parent_id, categoria FROM categorie";
$result = mysql_query($sql);
while($data = @mysql_fetch_assoc($result)) {
$thisref = &$refs[ $data['categoria_id'] ];
$thisref['parent_id'] = $data['parent_id'];
$thisref['categoria'] = $data['categoria'];
$thisref['categoria_id'] = $data['categoria_id'];
if ($data['parent_id'] == 0) {
$list[ $data['categoria_id'] ] = &$thisref;
} else {
$refs[ $data['parent_id'] ]['children'][ $data['categoria_id'] ] = &$thisref;
}
}
function toUL($arr){
$html = '<ul>'.PHP_EOL;
foreach ($arr as $v){
$html .= '[*]' . $v['categoria'];
if (array_key_exists('children', $v)){
$html .= toUL($v['children']);
}
$html .= ''.PHP_EOL;
}
$html .= '[/list]'.PHP_EOL;
return $html;
}
function toSelect($arr){
foreach ($arr as $v){
$html .= '<option value="'.$v['categoria_id'].'">' . $v['categoria'].'</option>';
if (array_key_exists('children', $v)){
// $html .= '<option value="';
// $html .=toSelect($v['children']);
// $html .= '">-';
$html .=toSelect($v['children']);
// $html .=toSelect($v['children']);
// $html .=toSelect('<option value="'.$v['categoria_id'].'">' . $v['categoria'].'</option>');
$html .= '</option>';
}
$html .= ''.PHP_EOL;
}
return $html;
}
echo '<select name="categoria">';
echo toSelect($list);
echo '</select>';
// build the list and output it
echo toUL($list);
?>

Rispondi quotando