Automatisch menu genereren vanuit database

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Mark moes

mark moes

07/03/2009 15:41:00
Quote Anchor link
Hoi,
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
 
PHP hulp

PHP hulp

29/03/2024 00:54:37
 

07/03/2009 15:44:00
 
Mark moes

mark moes

07/03/2009 16:14:00
Quote Anchor link
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
 
- -

- -

07/03/2009 16:16:00
Quote Anchor link
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


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.
Gewijzigd op 01/01/1970 01:00:00 door - -
 
Mark moes

mark moes

07/03/2009 16:40:00
Quote Anchor link
hehe sorry was een beetje een domme reactie van mij... Ik dacht even snel te reageren, moest even weg. Jonathan je hebt gelijk.
Ik zal even de reactie van karl doorspitten.
 
Mark moes

mark moes

09/03/2009 19:14:00
Quote Anchor link
Ik heb nu gepoogd om de volgende functie te maken uit de reactie van Karl. Dit geeft alleen een foutmelding:

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)
PHP script in nieuw venster Selecteer het PHP script
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
<?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;
    }
}

?>


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.
 
Eddy E

Eddy E

09/03/2009 19:21:00
Quote Anchor link
Je query is gewoon niet in orde.
Als je die query ("SELECT id, parentId, name FROM menu ORDER BY parentId, name") in bijvoorbeeld phpMyAdmin uitvoert... doet ie het dan wel?
 
- SanThe -

- SanThe -

09/03/2009 19:33:00
Quote Anchor link
Maak een nette foutafhandeling.
 
Mark moes

mark moes

09/03/2009 19:42:00
Quote Anchor link
@ eddy erkelens: ja dan doet ie het wel. dus wat dat aangaat is het voor elkaar.

@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
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.