
PHP expert |
|
Door recursie juist aan te pakken.
Ik heb hetzelfde gedaan bij een tutorialsysteem waar ik mee bezig was met oneindig diepe categoriën. Ik heb een functie geschreven die dit probleem oplossen.
function print_option($wat, $level=0, &$tpl) {
if(($level == 0 && is_array($wat)) || $level != 0) {
if(is_array($wat)) {
$level++;
foreach($wat as $v) {
print_option($v,$level,$tpl);
}
} else {
$option = '<option value="'. $wat .'"';
if((int)$_GET['id'] == $wat) {
$option .= ' selected = "selected"';
}
$option .= '>'. str_repeat('-', ($level == 0) ? 0 : $level-1) . " ". get_category_titel($wat) .'</option>';
$tpl->newblock('categorien');
$tpl->assign('option', $option);
}
}
}
/* en deze hoort er bij om de categorie op te halen, dat zie je natuurlijk zelf maar */
function get_category_titel($id) {
if(is_numeric($id)) {
$titel = mysql_query("SELECT titel FROM categorien WHERE id = ". $id);
if(mysql_num_rows($titel) > 0) {
return mysql_result($titel, 0);
} else {
return 'geen titel';
}
}
return 'geen titel';
}
function print_option($wat, $level=0, &$tpl) { if(($level == 0 && is_array($wat)) || $level != 0) { $level++; foreach($wat as $v) { print_option($v,$level,$tpl); } } else { $option = '<option value="'. $wat .'"'; if((int)$_GET['id'] == $wat) { $option .= ' selected = "selected"'; } $option .= '>'. str_repeat('-', ($level == 0) ? 0 : $level-1) . " ". get_category_titel ($wat) .'</option>'; $tpl->newblock('categorien'); $tpl->assign('option', $option); } } } /* en deze hoort er bij om de categorie op te halen, dat zie je natuurlijk zelf maar */ function get_category_titel($id) { $titel = mysql_query("SELECT titel FROM categorien WHERE id = ". $id); } else { return 'geen titel'; } } return 'geen titel'; }
Zoals je ziet werk ik met een template-engine maar het idee blijft hetzelfde. Hopelijk heb je er wat aan. |