Mul on kasutuses paar funktsiooni.
Andmete lugemine baasist massiivi
function getMenu($sql,$juur='1') {
$db_conn=new db;
$db_conn->connect();
$db_conn->query($sql);
// Elementide tunnuste järgi indekseeritud massiivi tekitamine
while ($row = $db_conn->fetch_row($db_conn->result)) {
$Items[$row[0]] = array(
'ItemID' => $row[0],
'ParentID' => $row[1],
'Name' => $row[2],
'Children' => array()
);
}
if(empty($Items))
return array();
// Puu ehitamine
foreach ($Items as $item) {
if ($item['ParentID'] == $juur) {
// Puu madalaimad oksad
$MyTree[] =& $Items[$item['ItemID']];
} elseif (isset($Items[$item['ParentID']])) {
// Lisa omanikelemendi harudesse viide käesolevale elemendile
$Items[$item['ParentID']]['Children'][] =& $Items[$item['ItemID']];
} else {
// Orbudega tegelemine
trigger_error('Item #'.$item['ID'].' parent not found.', E_USER_WARNING);
}
}
return $MyTree;
$db_conn->free_result($db_conn->result);
$db_conn->close_db;
}
Ja selle massivi baasil näiteks optionide tegemine
function formatMenuOption(&$Items,$valitud='',$item_id='',$disabled_on='') {
global $mitmes;
$o = '';
if(!empty($Items))
{
$mitmes++;
//$o .= "\n<ul>";
foreach($Items as $k=>$i)
{
$liide="";
for ($m = 3; $m <= $mitmes; $m++) $liide.=" ";
if ($mitmes>="2")
$liide.="|-- ";
//$o.=" id=".$i['ItemID']."ja nimi=".$i['Name'];
$selected="";
if (is_array($valitud)){
if(in_array($i['ItemID'],$valitud))
$selected="selected";
}else{
if($i['ItemID']==$valitud)
$selected="selected";
}
if ($i['ItemID']==$item_id){
$disabled="DISABLED";
}else{
$disabled="";
}
if ($disabled_on=="DISABLED")
$disabled=$disabled_on;
$o.="<option $selected $disabled value='".$i['ItemID']."'>".$liide.$i['Name']."</option>";
//$o .= sprintf('<li><a href="index.php?id=%s">%s</a>', $i['ItemID'], $i['Name']);
$o .= formatMenuOption($i['Children'],$valitud,$item_id,$disabled);
//$o .= "</li>";
}
//$o .= "</ul>\n";
$mitmes--;
}
return $o;
}
Või siis li nimekirja tegemine
function formatMenuList(&$Items,$link='') {
$o = '';
if(!empty($Items))
{
$o .= "\n<ul>";
foreach($Items as $k=>$i)
{
$o .= sprintf('<li><a href="$link%s">%s</a>', $i['ItemID'], $i['Name']);
$o .= formatMenuList($i['Children']);
$o .= "</li>";
}
$o .= "</ul>\n";
}
return $o;
}
Kasutamine on umbes nii
$menu = getMenu("select id as ItemID, parent_id as ParentID, amet as Name from struktuur order by orderfield");
$opt_parent="<option value='1'>Juur</option>";
$opt_parent.=formatMenuOption($menu,$menu_array['parent_id'],$menu_array["id"]);
echo '<select name="amet">'.$opt_parent.'</select>';