Menu uit array

Door Robert Deiman, 20 jaar geleden, 6.685x bekeken

Met deze snippet kan je eenvoudig een menu laten genereren vanuit een multidymensionale array. Het maakt niet uit hoe diep het menu is, hij maakt er keurig een unordered list van, ook op diepte.

edit: 9 jan 15:00:
Een aantal opmerkingen verwerkt:
- XHTML valid opbouw nu.
- Geeft de actieve link een class="active" mee.

Gesponsorde koppelingen

PHP script bestanden

  1. menu-uit-array

 

Er zijn 9 reacties op 'Menu uit array'

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
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
            if(!is_array($value))
            {

                   $return_string .= '<li>'.$value.'</li>'."\n";
            }
  
                       //wanneer het item een array is: kan de key worden toegevoegd als tekst en wordt de functie aangeroepen om het submenu te verwerken
            if(is_array($value))
            {

                   $return_string .= '<li>'.$key.'</li>'."\n";
                $return_string .= generate_menu($value);
            }

?>


Kan als

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php

if(is_array($value)) {
    $return_string .= '<li>'.$key.'</li>'."\n";
    $return_string .= generate_menu($value);
}
else {
    $return_string .= '<li>'.$value.'</li>'."\n";
}

?>



Overigens is de html niet xhtml valid, dit komt eruit:
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
<ul>
    <li>home</li>
    <li>nieuws</li>
    <ul>
        <li>archief</li>
        <li>laatste</li>
        <li>recent</li>
        <ul>
            <li>vandaag</li>
            <li>gisteren</li>
        </ul>
    </ul>
    <li>contact</li>
</ul>


En je wilt dit eruit hebben

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
<ul>
    <li>home</li>
    <li>nieuws
        <ul>
            <li>archief</li>
            <li>laatste</li>
            <li>recent
                <ul>
                    <li>vandaag</li>
                    <li>gisteren</li>
                </ul>
            </li>
        </ul>
    </li>
    <li>contact</li>
</ul>


Anders staan er ul in ul, en dat mag niet.
Onbekend Onbekend
Onbekend Onbekend
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
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
<?php
error_reporting(E_ALL);
ini_set('error_reporting',1);
/**
 * @author Robert Deiman
 * @copyright 2008
 * @param $array_items Array Contains a multidymensional array with the items for the menu
 */


function generate_menu($array_items, $sub=false)
    {

        if(!isset($return_string))
        {

            //eerste keer aangeroepen, dus beginnen met een '<ul>'
            $return_string = '<li>."\n" . '<ul>'."\n";
        }
                //elk item doorlopen, en er een menu-item van maken
        foreach($array_items AS $key => $value)
        {
                       //wanneer het item geen array is: kan de value worden toegevoegd als tekst
            if(!is_array($value))
            {
                   $return_string .= '
<li>'.$value.'</li>'."\n";
            } else {
                   $return_string .= '
<li>'.$key.'</li>'."\n";
                $return_string .= generate_menu($value, true);
            }
        }
        //altijd eindigd een list met </ul>
        $return_string.= '
</li>."\n".'</ul>'."\n";
        return $return_string;
    }

      
$menu = array('home','nieuws'=>array('archief','laatste','recent'=>array('vandaag','gisteren')),'contact');

echo generate_menu($menu);
?>


Niet mijn stijl van programmeren, maar oké, het kan handig zijn.
Robert Deiman
Robert Deiman
20 jaar geleden
 
0 +1 -0 -1
@Tommy
Jij bedoeld wat meer opmaak erin zetten (in de terugggegeven HTML) prima idee, maar let wel even op de kleurtjes.

@iltar
Je hebt gelijk, ik had het eerst anders staat en even vlug aangepast, maar niet handig zo, zal het aanpassen.
Ik zal hem ook XHTML valid maken, moet ook nog wel lukken denk ik zo, was me niet eens zo opgevallen, maar daar heb je ook wel gelijk in.
(aanpassen wordt morgen pas)
Tom
Tom
20 jaar geleden
 
0 +1 -0 -1
Is het ook mogelijk om het script zo aan te passen dat je bij een submenu item bijv de url kijgt: ?page=item1&section=suburl

Heb het zelf geprobeerd maar kwam er niet echt uit..
RvW Of toch niet
RvW Of toch niet
19 jaar geleden
 
0 +1 -0 -1
xhtml valid heb je hem zo gemaakt.
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
<?php
if(is_array($value))
{

 $return_string .= '<li>'.$key.'</li>'."\n";
 $return_string .= generate_menu($value);
}


// wordt !

 if(is_array($value))
{

 $return_string .= '<li>'.$key. generate_menu($value). '</li>'."\n";          
}

?>

ik wil hier in alleen nog en mogelijk in bouwen dat je kunt aangeven welk item actief is.
Robert Deiman
Robert Deiman
19 jaar geleden
 
0 +1 -0 -1
En dat is het mooie, als je er een linkje in zet, waarbij je (bijvoorbeeld) ?hoofdpagina=titel&sub=subtitel gebruikt, dan kan je in de loop vergelijken of de pagina (of sub) overeenkomt, en dan geef je die een class="active" mee.

Overigens ben ik bezig, heb ik de (X)HTML valide manier nu ingebouwd en ben ik nu het voorbeeld (script) met linkjes aan het uitbreiden, zodat je ook de actieve items kan laten zien.
RvW Of toch niet
RvW Of toch niet
19 jaar geleden
 
0 +1 -0 -1
dan zou je alleen problemen krijgen als je menu items hebt met de zelfde naam :)
Robert Deiman
Robert Deiman
19 jaar geleden
 
0 +1 -0 -1
@rvw
Daar heb je gelijk in, maar dat blijft toch (bijna) altijd als je iets automatiseert.
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
RvW Of toch niet
RvW Of toch niet
19 jaar geleden
 
0 +1 -0 -1
dit is toch niet de ideale oplossing.
want je ken nu href en de naam niet verschillend doen
je krijgt dingen zo als dit.
<li><a href="?pag=titel&sub=subtitel>titel&sub=subtitel </a>

is toch geen gezicht?

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

Inhoudsopgave

  1. menu-uit-array

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.