oneindig-menu
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?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
?>
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 (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<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>
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>
ABU..