Scripts
Dynamisch menu
Dit is een script voor een dynamisch menu. Je hebt bij dit menu maar 1 query nodig om alle menu items aan te maken. Heel gunstig dus voor de snelheid. Dit script is recursief (dus het roept zichzelf aan) dus de menu's zijn practisch oneindig. Het is een relatief simpele code, maar voor een beginnend PHP'er zal het misschien nuttig zijn. De output van het menu zal zijn:
menu.php
<?php
/**
* @author Victor
* @copyright 2011
*/
/**
* menu structuur
* parentId 0 is bovenste laag
*/
/**
*
id parentId name
1 0 Vacatures
2 0 Tutorials
3 0 Scripts
4 0 Boeken
5 3 Algemeen
6 3 Overig
7 3 Beveiliging
8 5 Dynamisch menu
*/
/**
* Haal alle menu items op
* met 1 query
*/
$link = mysql_connect('localhost', 'gebruikersnaam', 'wachtwoord');
if(!$link) {
echo 'Kan geen verbinding tot stand brengen.<br />' . mysql_error();
}
$db = mysql_select_db('menu', $link);
if(!$db) {
echo 'Kan geen verbinding maken met database.<br />' . mysql_error();
}
$result = mysql_query("
SELECT
id, parentId, name
FROM
menu
ORDER BY
parentId, name
");
/**
* Maak een array met parent-child relaties
*/
$menuData = array(
'items' => array(),
'parents' => array()
);
while ($menuItem = mysql_fetch_assoc($result))
{
$menuData['items'][$menuItem['id']] = $menuItem;
$menuData['parents'][$menuItem['parentId']][] = $menuItem['id'];
}
/**
* Bouw het menu, $parentId 0 is de bovenste laag.
*/
function buildMenu($parentId, $menuData)
{
$html = '';
if (isset($menuData['parents'][$parentId]))
{
$html = '<ul>';
foreach ($menuData['parents'][$parentId] as $itemId)
{
$html .= '<li>' . $menuData['items'][$itemId]['name'];
/** Vind child items recursief **/
$html .= buildMenu($itemId, $menuData);
$html .= '</li>';
}
$html .= '</ul>';
}
return $html;
}
/**
* weergeef het menu op het scherm
*/
echo buildMenu(0, $menuData);
Reacties
0