من خیلی وقت پیش این رو واسه کاری نوشتم بهینه نیست اما شاید الگو خوبی باشه
این تابع اطلاعات رو از دیتابیس واکشی میکنه و در آرایه میریزه
function ShowSubCatForMenuCat($id = 0)
{
$q = "SELECT
cat_id, cat_subcat, cat_name,cat_sort,cat_filename
FROM
cat
ORDER BY
cat_subcat, cat_sort DESC";
$CatData = array('NameCat' => array(), 'ParentID' => array());
$result = mysql_query($q);
while ($row = mysql_fetch_assoc($result)) {
$CatData['NameCat'][$row['cat_id']] = $row;
$CatData['ParentID'][$row['cat_subcat']][] = $row['cat_id'];
}
if ($id == 0)
ScanCategoryLevelForMenuCat($CatData, $id);
else
ScanCategoryLevelForMenuCat($CatData, $id, 1);
}
و این تابه به همون صورتی که منظورتون هست نمایش میده
function ScanCategoryLevelForMenuCat($Cat, $parentId = 0, $dep = 0)
{
if (isset($Cat['ParentID'][$parentId])) {
foreach ($Cat['ParentID'][$parentId] as $itemId) {
$link = "/category/" . $Cat['NameCat'][$itemId]['cat_filename'] . ".html";
if ($dep == 0)
$link = "#";
?>
<a href="<? echo $link ?>" <? if ($dep == 0)
echo 'onclick="ShowSubCat(this)" ' ?> class="MenuCatL<? echo
$dep + 1 ?>">
<? echo $Cat['NameCat'][$itemId]['cat_name'];
if ($dep != 0)
echo '<span id="CountOfTotalProInCat"> [ ' . TotalProInCat($itemId) . ' ] </span>';
?> </a><br />
<?
// find childitems recursively
if ($dep == 0)
echo "<div id=\"SubCatHide\">";
ScanCategoryLevelForMenuCat($Cat, $itemId, $dep + 1);
if ($dep == 0)
echo "</div>";
}
}
return $html;
}
البته من با div پیاده سازی کردم