Scripts
Oneindig menu
Ooit een probleem gehad dat je bijvoorbeeld een webshop wilde waar het menu met categorieën oneindig was, dus dat je zoveel categorieën onder elkaar kon maken als je wilt? Dit is een simpele oplossing! MySQL:
oneindig-menu
<?php
function builder($parent=0) { // als $parent niet is opgegeven dan wordt deze automatisch naar 0 gezet, duidelijk is dus dat de hoofd items 0 als parent moeten hebben, de rest moet het id van de ouder hebben.
$menuQuery = mysql_query("SELECT id, name, url FROM menu WHERE parent = '" . $parent . "'"); // alle informatie van de betrefende children van $parent ophalen
$menuItems = mysql_num_rows($menuQuery); // totaal aantal childeren van $parent ophalen, bepalen of een sub menu nodig is.
if ($menuItems >= 1) {
if ($parent != 0) { echo '<li><ul>'; } else { echo '<ul>'; } // begin van een nieuwe lijst
while ($menuArray = mysql_fetch_array($menuQuery)) {
echo '<li><a href="' . $menuArray[2] . '">' . $menuArray[1] . '</a></li>';
builder($menuArray[0]); // hier zit het 'oneindige' 'em in, doordat hier een recursieve functie wordt gebruikt wordt van ieder item direct de subitems opgehaald.
}
if ($parent != 0) { echo '</li></ul>'; } else { echo '</ul>'; }
}
}
builder(); // haal de hoofd item op
?>
Nieuwe versie met één query en zonder comments:
[code]<ul><?php
function menuData() {
$menuQuery = mysql_query("SELECT id, name, url, parent FROM test");
$i = 0;
while ($menuArray = mysql_fetch_array($menuQuery)) {
$menuData[$i]['id'] = $menuArray[0];
$menuData[$i]['name'] = $menuArray[1];
$menuData[$i]['url'] = $menuArray[2];
$menuData[$i]['parent'] = $menuArray[3];
$i++;
}
return $menuData;
}
function builder($menuData, $parent=0) {
$count = 0;
foreach ($menuData as $childCounter) if ($childCounter['parent'] == $parent) $count++;
if ($parent != 0 && $count >= 1) echo '<li><ul>'.PHP_EOL;
foreach ($menuData as $menuItem)
if ($menuItem['parent'] == $parent) {
echo '<li><a href="' . $menuItem['url'] . '">' . $menuItem['name'] . '</a></li>'.PHP_EOL;
builder($menuData, $menuItem['id']);
}
if ($parent != 0 && $count >= 1) echo '</ul></li>'.PHP_EOL;
}
$menuData = menuData();
builder($menuData);
?></ul>[/code]
ABU..
Reacties
0