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
Nog geen reacties.