Automatisch menu genereren vanuit database
Ik heb een menu wat bestaat uit Items en Sub-items. De items bevatten een kort overzicht van de sub-items, de sub-items rollen uit de items. In eerste instantie zijn alleen de items zichtbaar.
De namen van de knoppen worden uit mysql gehaald, handmatig aangegeven via id.
N ou wil ik graag dat (door middel van een while loop?) de knoppen automatisch worden aangemaakt naar gelang het aantal items in de database.
Enkel met items is dit heel makkelijk, alleen met de sub items netjes per item gerangschikt wordt het een ander verhaal.
Het moet dus zo worden:
|ITEM1| -> 1e item naam uit de database
|SUB-ITEM1| -> 1e naam uit de database
|SUB-ITEM2| -> 2e naam uit de database
|SUB-ITEM3| -> 3e naam uit de database
|ITEM2| -> 2e item naam uit de database
|SUB-ITEM1| -> 1e naam uit de database
|SUB-ITEM2| -> 2e naam uit de database
|SUB-ITEM3| -> 3e naam uit de database
|ITEM3| -> 3e item naam uit de database
|SUB-ITEM1| -> 1e naam uit de database
|SUB-ITEM2| -> 2e naam uit de database
|SUB-ITEM3| -> 3e naam uit de database
etc.
Nou moet er ook de mogelijkheid zijn om binnen het menu later nog andere sub-items toe te voegen.
Houd dit dan dus in dat ik elke keer als ik een nieuw menu item wil maken, dus een nieuw onderwerp, dat ik dan een nieuwe tabel aan moet maken?
Of valt dat op een een of andere manier ook te koppelen binnen 1 of 2 tabellen?
Mijn gevoel zegt dat dat laatste de snelste methode moet zijn.
Ik ben heel benieuwd!
Gr. mark
Gewijzigd op 01/01/1970 01:00:00 door Mark moes
id parentId name
1 0 Nieuws
2 0 Reviews
3 0 Meuk
4 1 Games
5 1 Internet
6 5 Browsers
en dan bijvoorbeeld tussen reviews en meuk wat invoegen, dan schuift de id dus op. dan moet de parent id dus ook opschuiven
mark moes schreef op 07.03.2009 16:14:
Moet m even wat beter door lezen, maar ja, dat is aardig in de juiste richting. Alleen kan ik dan ook zeg maar er wat tussen voegen? Want dat wordt dan lastig volgens mij. Dus gezien het voorbeeldje in jou voorbeeld:\
id parentId name
1 0 Nieuws
2 0 Reviews
3 0 Meuk
4 1 Games
5 1 Internet
6 5 Browsers
en dan bijvoorbeeld tussen reviews en meuk wat invoegen, dan schuift de id dus op. dan moet de parent id dus ook opschuiven
id parentId name
1 0 Nieuws
2 0 Reviews
3 0 Meuk
4 1 Games
5 1 Internet
6 5 Browsers
en dan bijvoorbeeld tussen reviews en meuk wat invoegen, dan schuift de id dus op. dan moet de parent id dus ook opschuiven
Het ID heeft totaal niets te maken met iets. Het is dus ook niet je volgorde. Het ID gebruik je alleen om die rij te benoemen, that's all. Als jij dus zelf een bepaalde volgorde wilt hebben, dan moet je een kolom erbij maken waarin je die volgorde aangeeft.
Daarnaast mag je voor altijd onthouden: jij zult nooit het ID wijzigen of zelf bepalen, dat is in geen enkel geval nodig. Er zijn geen uitzonderingen. De database doet dat voor jou, en jij hoeft er niet aan te zitten.
Quote:
ModEdit
Klein typfoutje verholpen.
Was naar mijn menig wel belangrijk.
net => niet
SanThe.
Klein typfoutje verholpen.
Was naar mijn menig wel belangrijk.
net => niet
SanThe.
Gewijzigd op 01/01/1970 01:00:00 door - -
Ik zal even de reactie van karl doorspitten.
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in C:\xampp\htdocs\website\Classes\Algemeen.php on line 103
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
35
36
37
38
39
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
35
36
37
38
39
<?php
class Menu extends DbConnect
{
function buildMenu($parentId, $menuData)
{
$result = mysql_query("SELECT id, parentId, name FROM menu ORDER BY parentId, name");
// prepare special array with parent-child relations
$menuData = array(
'items' => array(),
'parents' => array()
);
while ($menuItem = mysql_fetch_assoc($result))
{
$menuData['items'][$menuItem['id']] = $menuItem;
$menuData['parents'][$menuItem['parentId']][] = $menuItem['id'];
}
$html = '';
if (isset($menuData['parents'][$parentId]))
{
$html = '<ul>';
foreach ($menuData['parents'][$parentId] as $itemId)
{
$html .= '<li>' . $menuData['items'][$itemId]['name'];
// find childitems recursively
$html .= buildMenu($itemId, $menuData);
$html .= '</li>';
}
$html .= '</ul>';
}
return $html;
}
}
?>
class Menu extends DbConnect
{
function buildMenu($parentId, $menuData)
{
$result = mysql_query("SELECT id, parentId, name FROM menu ORDER BY parentId, name");
// prepare special array with parent-child relations
$menuData = array(
'items' => array(),
'parents' => array()
);
while ($menuItem = mysql_fetch_assoc($result))
{
$menuData['items'][$menuItem['id']] = $menuItem;
$menuData['parents'][$menuItem['parentId']][] = $menuItem['id'];
}
$html = '';
if (isset($menuData['parents'][$parentId]))
{
$html = '<ul>';
foreach ($menuData['parents'][$parentId] as $itemId)
{
$html .= '<li>' . $menuData['items'][$itemId]['name'];
// find childitems recursively
$html .= buildMenu($itemId, $menuData);
$html .= '</li>';
}
$html .= '</ul>';
}
return $html;
}
}
?>
Dit volg ik niet helemaal, want als ik de bovenstaande code in een los bestandje plaats dan krijg ik de foutmelding niet. Ik begrijp dat er iets mis is met de mysql_fetch_assoc(): in line 103, hierboven in line 13. Maar wat: ik begrijp het niet.
Als je die query ("SELECT id, parentId, name FROM menu ORDER BY parentId, name") in bijvoorbeeld phpMyAdmin uitvoert... doet ie het dan wel?
Maak een nette foutafhandeling.
@SanThe: Hoe bedoel je precies? Ik zal er even bij vermelden dat ik dit alles nog 'at home', dus lokaal aan het testen ben, aangezien ik het eerst goed wil hebben voor ik t echt online zet. Foutmelding komt nog wel, maar ben er nog niet mee bezig geweest. Kan eerst genoeg leren van deze foutmeldingen volgens mij...
EDIT:
@SanThe: Sorry, grove fout... ik begrijp nu pas wat je bedoelt... volgens mij. Tenminste dat wil zeggen,ik heb achter de regel met de mysql opdracht de or die (mysql_error()) gezet, en ja, dan wordt een boel duidelijk...
Ga er nu vandoor, nog even klussen met wat anders als internet, zit er nu niet lekker voor volgens mij... Bedankt eerst, tot later horens..
Gewijzigd op 01/01/1970 01:00:00 door mark moes