Hi, I am trying to make a website with a categorised menu system,
I have elements in the database in binary tree format
|id|cateogory|parent_id|
http://mdonnici.no-ip.com/~muralik/p...//menutest.php
I want the result exactly like above .. and my i made solution like below , i want to know if there is any better solution, basically i want to put entire result in an array, and use a template (smarty) to display the result. at the moment, i am displaying in the function itself. any other ideaS?
function getRelatedItems($id)
{
//$rootelement = array(0, $id);
//$rootelements = getImmediateChildren(0);
$allparents = getAllParents($id);
$parentsSubOrdinates = parentsub($allparents);
$getfinal = array_merge(getImmediateChildren($id),getSubOrdina tes($id),$parentsSubOrdinates);
//echo showelements($getfinal);
return $getfinal;
}
$myarrays = array();
function parentsub($myarray)
{
global $myarrays;
$i=0;
foreach ($myarray as $val)
{
foreach(getSubOrdinates($val) as $v)
{
array_push($myarrays,$v);
}
//$myarrays = array_merge_recursive(getSubOrdinates($val));
}
//print_r($myarray);
//echo "" . $i . "" ;
return $myarrays;
}
function getSubOrdinates($id)
{
global $catalogtable;
$dbs = new dbSession();
//echo $id;
//echo getParent(1);
if ($id == 0)
{ $parent = 0; }
else
{
$parent = getParent($id);
}
//echo getParent($id);
$sql = "SELECT CategoryID FROM $catalogtable where ParentID = $parent";
//echo $sql;
//echo $sql;
$result = $dbs->getResult($sql);
while ($row = mysql_fetch_array($result))
{
if ( !is_array($myarray) ) $myarray= array();
array_push($myarray, $row["CategoryID"]);
//echo showelements($myarray);
// echo "hello" . getSubOrdinates($row["CategoryID"]);
}
return $myarray;
}
$myarrayx = array();
function getAllParents($id)
{
global $catalogtable, $myarrayx;
$dbs = new dbSession();
//$parent = getParent($id);
$sql = "SELECT * FROM $catalogtable where CategoryID = $id";
//echo $sql;
$result = $dbs->getResult($sql);
while ($row = mysql_fetch_array($result))
{
//if ( !is_array($myarray) ) $myarray= array();
//$row["ParentID"] ;
array_push($myarrayx, $row["ParentID"]);
//array_merge($myarrayx, getSubOrdinates($row["ParentID"]));
getAllParents($row['ParentID']);
//print_r($myarrayx) . "<br>";
$id = $row['ParentID'];
}
return $myarrayx;
}
//echo count($subarray);
$myid = getcurrentElement();
$subarray = getSubOrdinates($myid);
//echo $myid;
//echo showelements($subarray);
//parentsSubordinates($subarray);
function parentsSubordinates($myarray)
{
foreach ($myarray as $val)
{
echo showelements(getSubOrdinates($val));
}
}
function getImmediateChildren($id)
{
global $catalogtable;
$dbs = new dbSession();
$sql = "SELECT CategoryID FROM $catalogtable where ParentID = $id";
//echo $sql;
$result = $dbs->getResult($sql);
while ($row = mysql_fetch_array($result))
{
if ( !is_array($myarray) ) $myarray= array();
array_push($myarray, $row["CategoryID"]);
}
if (count($myarray) == 0)
{
$myarray = array();
}
return $myarray;
}
function displayrootElements($id, $myelements)
{
global $imgpath, $siteroot, $catalog, $catalogtable, $baseURL,$catalogURL, $currentid;
$dbs = new dbSession();
$currentid = getcurrentElement();
//echo $currentid;
$sql = "SELECT * FROM $catalogtable where ParentID = $id";
$relatedrec = array();
//echo showelements($myelements);
if (!$result = $dbs->getResult($sql) )
{
$dbs->printError();
}
else
{
while ($row = mysql_fetch_array($result))
{
// $relatedrec = getrelated($row['CategoryID']);
// $relatedrec = $myelements;
if (in_array( $row['CategoryID'], $myelements )) {
//echo showelements($myelements);
$retvalue .= "<table cellspacing=0 cellpadding=0 border=0 width=\"100%\">\n";
$retvalue .= "<tr><td width=\"10\"><img valign=top src=\"". $baseURL . "images/trans.gif\" width=\"10\"></td><td valign=\"top\" align=\"left\" width=\"200\" >\n";
$retvalue .= "<table border=0 cellspacing=0 cellpadding=\"2\" >\n";
$retvalue .= "<tr>\n";
$retvalue .= "<td valign=\"top\" align=\"left\">\n";
//$retvalue .= "<b>\n";
$retvalue .= "<a href=\"". $baseURL . "/menutest.php?id=" . $row['CategoryID']."\">";
$retvalue .= $row['Category'] ;
$retvalue .= "</a>";
} //for inarray loop
//echo showelements($relatedrec);
$currentElement = $row['CategoryID'];
if ($currentElement != 0)
{
if (getParent($row['CategoryID']) != $currentElement)
{
if ( $currentid != 0 )
{
if (in_array( $row['CategoryID'], $myelements )) {
//echo "".showelements($relatedrec)."";
$retvalue .= displayrootElements($row['CategoryID'], $myelements);
}
}
//echo $currentid;
//echo "hello";
}
}
if ( in_array( $row['CategoryID'], $myelements )) {
$retvalue .= "</td></tr></table>\n";
$retvalue .= "</td></tr>\n";
$retvalue .= "</table>\n";
}
}
}
return $retvalue;
}
function getParent($id)
{
global $catalogtable;
$dbs = new dbSession();
$sql = "SELECT ParentID FROM $catalogtable where CategoryID = $id";
if (!$result = $dbs->getResult($sql) )
{
$dbs->printError();
}
else
{
while ($row = mysql_fetch_array($result))
{
$parent = $row['ParentID'];
}
}
return $parent;
}
function showelements($relatedx)
{
foreach ($relatedx as $val)
{
$txt .= $val . ",";
}
return $txt;
}
//$smarty->assign('menu', displayrootElements($id, $myelements) );
function getcurrentElement()
{
//$myarray = processURI();
//$currentElement= array_pop($myarray);
$currentElement= $_GET["id"];
if (!$currentElement || !is_numeric($currentElement) )
{
$currentElement=0;
}
return $currentElement;
}
$currentid = getcurrentElement();
//get related items to display only items related to the current selected id
$getfinal = getRelatedItems($currentid);
//passing the array to make it check if it is in array
$menu = displayrootElements(0, $getfinal);
echo $menu;
?>