Beste mede-scripter,

ik heb zelf een script geschreven waarmee door middel van php een menu wordt opgebouwd. Er wordt gebruikt gemaakt van een array waarin je je menu opties kunt zetten. Dit script zorgt er voor dat er een net menu wordt gemaakt zoals onderstaand voorbeeld:


<ul>
  <li><a href="Websiteurl">Item1</a></li>
  <li><a href="Websiteurl">Item2</a></li>
  <li><a href="Websiteurl">Item3</a></li>
</ul>


De php code hiervoor is:

          <ul class="menu">
			            <?php
               $aPages = array('Item1', 'Item2', 'Item3'); // De pagina's in die in het menu moeten verschijnen
                                                                            
               foreach($aPages as $page){
               $current = ((!empty($_GET['pagina']) && in_array($_GET['pagina'], $aPages) && $_GET['pagina'] == $page) || (!isset($_GET['pagina']) && $page == 'Home'))? ' class="current"':'';
               echo '<li'.$current.'><a href="?pagina='.$page.'">'.$page.'</a></li>'.PHP_EOL;
              }
            ?>
          </ul>


Nu wil ik dit menu echter uitbreiden. Wat ik dus extra wil maken zijn submenu's in deze menu structuur. Kan iemand mij een stuk opweg helpen? Je zult ergens moeten invoeren welke hoofdmenu-opties er zijn en welke opties een submenu zijn, en waarbij deze submenu's horen, denk ik.

(Ik bedoel een menu zoals hier bovenaan bij phphulp.nl ook gebruikt wordt.) Alvast hartstikke bedankt.
@Bart

Ik denk dat hij meer bedoeld hoe hij kan zorgen dat dat op de juiste manier opgebouwd wordt. Daarvoor kan hij zoeken op recursief of recursieve array. (in het nederlands dan, maar het kan ook handig zijn om op de engelse variant te zoeken)
door Recursief uitlezen maakt het niet uit hoe diep een array is.
De menu's zijn goed, maar niet dynamisch. Ik wil dus enkel in een array aangeven de hoofd items en sub-items(en daarbij aageven welk hoofd item hierbij hoort). Misschien gebruik maken van string uitlezen steeds in de foreach loop? Dat je bijvoorbeeld zoekt of ergens sub staat.

Ik dacht bijv zoiets:

$aPages = array('Item1', 'Item2', 'Item3'); // De pagina's in die in het menu moeten verschijnen
                                                                            
$aSubs = array('sub1', 'sub2', 'sub3'); // Hier de sub-items


Alleen moet je dus deze aan elkaar linken of iets dergelijks en dan dus in een volgende lus laten bekijken waar het menu moet worden aangepast.
@Tom

daarom wees ik je naar een recursieve functie. Voor het werken met een submenu kan je ook prima met multidimensionale arrays werken:



$aPages= array('Item1' => array('sub1','sub2'),'Item2');
Ok en dan moet ik dus een multidimensionale array uit gaan lezen. Maar kun je me een eindje opweg helpen hoe ik dan de structuur van mijn menu kan opbouwen? Dan kom ik er verder zelf wel uit denk ik :)
<?php

/**
* @author Robert Deiman
* @copyright 2008
*/

function generate_menu($array_items)
{
if(!isset($return_string)){
$return_string = '<ul>';
}
foreach($array_items AS $key => $value)
{
if(!is_array($value))
{
$return_string .= '<li>'.$value.'</li>';
}
if(is_array($value))
{
$return_string .= '<li>'.$key.'</li>';
$return_string .= generate_menu($value);
}
}
$return_string.= '</ul>';
return $return_string;
}

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

echo generate_menu($menu);
?>
Dit komt inderdaad wel in de buurt Robert, maar bij mij werkt hij nog niet. Ik zit uit te zoeken hoe ik hem werkend kan krijgen. heb ook wel een url gevonden.

In ieder geval bedankt dat je met me meedenkt !! toppie!

http://www.phpinsider.com/smarty-forum/viewtopic.php?t=11686

ps. voor degene met css oplossingen. Dit is niet wat ik zoek. Dit heb ik al onder de knie, en ook al werkend. Maar een menu maken en helemaal uittypen in html kost meer tijd. Wanneer je een php script hebt scheelt dit tijd :) En werkt het fijner.
@Tom

Mag ik vragen wat er nog niet werkt? ;) Ben wel benieuwd eigenlijk want wat ik net heb bekeken in de bron die die genereert klopt helemaal. Als er nog een foutje in zit, wil ik die er natuurlijk ook wel uithalen. :)
Robert, hij werkt inderdaad goed, waarschijnlijk zal ik nu enkel css moeten toepassen. Er zat wel een heel klein foutje in maar deze is zo verholpen:


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


moet zijn

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


Bij de eerste code komt er nog "2" te staan (dus de hoeveelheid in de 2e geneste array. Nu is hij goed. Ik zal hem nog wel uitbreiden en dan het complete script hier posten (inclusief css). Zodat mensen hem kunnen gebruiken. Ik wil hem zo uitbreiden dat elke sub-items de volgende url krijgen:
?pagina=item1&section=subitem1 . Maar daar kom ik wel uit denk.

Complete code nu dus:

<?
				function generate_menu($array_items)
				    {
				        if(!isset($return_string)){
				            $return_string = '<ul>';
				            }
				        foreach($array_items AS $key => $value)
				        {
				               if(!is_array($value))
				            {
				                   $return_string .= '<li><a href="?pagina='.$value.'">'.$value.'</li>';
				            }   
				               if(is_array($value))
				            {
				                   $return_string .= '<li><a href="?pagina='.$key.'">'.$key.'</li>';
				                $return_string .= generate_menu($value);
				            }
				           }
				           $return_string .= '</ul>';
				           return $return_string;
				    }
				      
				$menu = array('home','nieuws'=>array('archief','laatste'=>array('vandaag','gisteren')),'contact');

				echo generate_menu($menu);
				?> 


Altijd handig :)

In ieder geval bedankt voor je zetje Robert, ik stel het erg op prijs!

Reageren