My idea is simple: if child->indent, if parent->make bold.
Lets say p0 is the parent of p1 and p2, p3 and p4 are the childs of p1. p5 is the independent page like p0. So what i wanna get is
p0 (bold font)
[3px]p1(bold font)
[ 6px ]p3
[ 6px ]p4
[3px]p2
p5 (bold font)
The problem is, I can't figure out. how to realize my idea. Tried given functions. No success. It works but indents only first level childs. My recursive php function looks like that
function generateOptions($parent, $level, $padding, $db)
{
$result=$db->query("SELECT id, name FROM menu WHERE parent='$parent' AND showinmenu!='0'");
if($level == 0) {$padding=''; $optstyle='bold';}
else {$optstyle='std'; $padding=' ';}
while($data=$result->fetch_row()){
echo generateOption($optstyle.'option', $data, $padding);
generateOptions($data[0], $level++, $padding, $db);
}
}
function generateOption($type,$data, $padding){
switch($type){
case 'boldoption': return '<option class="bold" value="'.$data[0].'">'.$padding.$data[1]."</option>\n"; break;
case 'stdoption': return '<option class="std" value="'.$data[0].'">'.$padding.$data[1]."</option>\n"; break;
}
}
And here is the screenshot of my db table. http://prntscr.com/39461
The final working result
function generateOptions($parent, $level, $padding, $db)
{
$result=$db->query("SELECT id, name FROM menu WHERE parent='$parent' AND showinmenu!='0'");
$spacer = ' ';
$padding = str_repeat($spacer, $level);
while($data=$result->fetch_row()){
$children_html = generateOptions($data[0], $level+1, $padding, $db);
$optstyle = empty($children_html) ? 'std' : 'bold';
$html .= generateOption($optstyle.'option', $level, $data, $padding);
$html .= $children_html;
}
return $html;
}
function generateOption($type, $level, $data, $padding){
$bgcolor=array('0'=>'#f66e02','1'=>'#FF9C4D', '2'=>'#FF9C4D');
$fontcolor=array('0'=>'#fff','1'=>'#000', '2'=>'#000');
switch($type){
case 'boldoption': return '<option class="bold" style="background-color:'.$bgcolor[$level].'; color:'.$fontcolor[$level].'" value="'.$data[0].'">'.$padding.$data[1]."</option>\n"; break;
case 'stdoption': return '<option class="std" value="'.$data[0].'">'.$padding.$data[1]."</option>\n"; break;
}
}