Oneindig menu

Door Onbekend Onbekend, 20 jaar geleden, 6.020x bekeken

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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
CREATE TABLE `test` (
  `id` int(255) NOT NULL auto_increment,
  `name` varchar(255) NOT NULL,
  `url` varchar(255) NOT NULL,
  `parent` int(255) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

Voorbeeld: http://phphulp.gamerswiki.nl/listmenu.html

Gesponsorde koppelingen

PHP script bestanden

  1. oneindig-menu

 

Er zijn 12 reacties op 'Oneindig menu'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Iltar van der berg
iltar van der berg
20 jaar geleden
 
0 +1 -0 -1
Zou je tenminste dan nog een correct menu willen maken ?
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
<ul>
    <li><a></a>
        <ul>
            <li><a></a></li>
            <li><a></a></li>
            <li><a></a></li>
        </ul>
    <li><a></a>
        <ul>
            <li><a></a></li>
            <li><a></a></li>
            <li><a></a></li>
        </ul>
    </li>
<ul>
Frank -
Frank -
20 jaar geleden
 
0 +1 -0 -1
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
ENGINE=MyISAM

En zonder foreign keys (die in MyISAM technisch niet mogelijk zijn) kun je met 1 query jouw complete menu-structuur in 1 keer naar de bliksem helpen...

Gebruik een FK en stel hem zo in dat je altijd eerst de childs moet verwijderen voordat je de parent kunt verwijderen.

Mocht je een complexe structuur krijgen, is een andere opzet beter: Nested Set Model
Met een NSM is het wel aan te raden om stored procedures te gaan gebruiken voor het invoegen, bewerken en verwijderen van records, anders gaat dat vroeg of laat ook flink mis.
Kwastie
Kwastie
20 jaar geleden
 
0 +1 -0 -1
Dit is niet een beginners script, je moet echt goed kunnen programmeren wil je dit goed begrijpen.


http://crisp.tweakblogs.net/blog/317/formatting-a-multi-level-menu-using-only-one-query.
Dit is een mooier voorbeeld van jou script alleen word alles doormidden van 1 query binnen gehaald zodat je heel weinig dataverkeer hebt om een simpel menu op te bouwen.
Harmen
Harmen
20 jaar geleden
 
0 +1 -0 -1
Ik was al een tijd op zoek naar iets dergelijks, maar dat artikel dat pgFrank geeft is toch wel erg interessant!
Onbekend Onbekend
Onbekend Onbekend
20 jaar geleden
 
0 +1 -0 -1
Tsja, ik zal ook eens iets maken wat pgFrank zegt, alhoewel ik daar nooit echt ervaring mee heb, dus kan ik weer leren, ik zal het hier bij plaatsen zodat ik commentaar kan krijgen en dus meer kan leren.

Maar dat kan goed morge of zondag worden.
Onbekend Onbekend
Onbekend Onbekend
20 jaar geleden
 
0 +1 -0 -1
Tsja, ik zal ook eens iets maken wat pgFrank zegt, alhoewel ik daar nooit echt ervaring mee heb, dus kan ik weer leren, ik zal het hier bij plaatsen zodat ik commentaar kan krijgen en dus meer kan leren.

Maar dat kan goed morge of zondag worden.
Onbekend Onbekend
Onbekend Onbekend
20 jaar geleden
 
0 +1 -0 -1
Tsja, ik zal ook eens iets maken wat pgFrank zegt, alhoewel ik daar nooit echt ervaring mee heb, dus kan ik weer leren, ik zal het hier bij plaatsen zodat ik commentaar kan krijgen en dus meer kan leren.

Maar dat kan goed morge of zondag worden.
Robert Deiman
Robert Deiman
20 jaar geleden
 
0 +1 -0 -1
@Kwastie

De server load wordt hoger, maar data verkeer wordt niet hoger bij het aanroepen van meerdere query's.
Harmen
Harmen
20 jaar geleden
 
0 +1 -0 -1
pgFrank, werken die queries van Nested Set Model niet in mysql 5?
Bijvoorbeeld deze query:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
SELECT node.name
FROM nested_category AS node,
nested_category AS parent
WHERE node.lft BETWEEN parent.lft AND parent.rgt
AND parent.name = 'ELECTRONICS'
ORDER BY node.lft

Daar krijg ik 0 rijen terug...
Arian Stolwijk
Arian Stolwijk
20 jaar geleden
 
0 +1 -0 -1
Ik heb hier ook een keer een class voor geschreven. Heb je ook maar één query nodig: http://www.phphulp.nl/php/scripts/4/1153/ Hij zou nog wel een beetje geupdate moeten worden, naar PHP5 enzo, gewoon even public/protected ervoor zetten e.d. Ook idd de Foreign Keys erbij zetten!
Onbekend Onbekend
Onbekend Onbekend
20 jaar geleden
 
0 +1 -0 -1
Nieuwe versie, zie code maar, ik had geen zin in stink comments er bij te zetten, je begrijpt het of je begrijpt het niet..

Edit: iemand ideeën wat voor meer snippets ik kan maken? xD
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Arian Stolwijk
Arian Stolwijk
20 jaar geleden
 
0 +1 -0 -1
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
        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++;
        }

?>

dat kan je ook als
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
        while ($menuArray = mysql_fetch_assoc($menuQuery)) {
            $menuData[][ = $menuArray;
         }

?>

doen toch?;)

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Inhoudsopgave

  1. oneindig-menu

Labels

  • Geen tags toegevoegd.

Navigatie

 
 

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.