Hey allemaal,

ik was bezig met het gebruiken van de switch case structuur in mijn index.php. Nu heb ik een menu waar een menu knop van kleur moet veranderen. Wanneer bijvoorbeeld de contact pagina wordt weer gegeven moet de contact button duidelijk een andere kleur hebben zodat de gebruiker weet dat deze zich op de contact pagina bevind. Dit is met de switch case structuur in mijn ogen een probleempje.

Door deze structuur wordt alles in de index.php geladen.


				<li class="current"><a href="index.php?p=item1"><b>Item1</b></a></li>
				<li><a href="index.php?p=Item2"><b>Item2</b></a></li>
				<li><a href="index.php?p=Item3"><b>Item3</b></a></li>
				<li><a href="index.php?p=Item4"><b>Item4</b></a></li>
				<li><a href="index.php?p=Item5"><b>Item5</b></a></li>
				<li><a href="index.php?p=Item6"><b>Item6</b></a></li>


Zoals hierboven te zien zijn moet "<li class="current">" verschuiven naar de pagina die ge-include wordt. Moet ik iets toe gaan voegen bij de switch-case structuur?
Nee, je moet niet je switch aanpassen, maar juist het menu zelf. Je zou het op deze manier aan kunnen pakken:

<li <?php if(isset($_GET['p']) && $_GET['p'] == 'item1') echo 'class="current"'; ?>><a href="index.php?p=item1"><b>Item1</b></a></li>
<li <?php if(isset($_GET['p']) && $_GET['p'] == 'item2') echo 'class="current"'; ?>><a href="index.php?p=Item2"><b>Item2</b></a></li>
<li><a href="index.php?p=Item3"><b>Item3</b></a></li>
<li><a href="index.php?p=Item4"><b>Item4</b></a></li>
<li><a href="index.php?p=Item5"><b>Item5</b></a></li>
<li><a href="index.php?p=Item6"><b>Item6</b></a></li>

Ik heb de eerste 2 voorgedaan, de rest mag je zelf doen ;-)
Ok erg bedankt ,ik zal eens kijken of het werkt ;)

Edit: Thanks!
Yep, weggooien die switch! Dat is niet te onderhouden en levert alleen maar meer werk op.
<?php
$aPages = array('item1', 'item2', 'item3'); // kun je eenvoudig uitbreiden

foreach($aPages as $page){
$current = (!empty($_GET['p']) && in_array($_GET['p'], $aPages) && $_GET['p'] == $page)? ' class="current"':'';
echo '<li'.$current.'><a href="index.php?p='.$page.'"><b>'.$page.'</b></a></li>'.PHP_EOL;
}
?>
Hey dat is nog makkelijker! Dan bouw je je menu dus gewoon op met een array?

Edit: De bovenstaande code is dus eigenlijk als ik het goed begrijp de oplossing op mijn vraag met in het menu als het ware een switch case methode voor de pagina's ingebouwd. Toch?

Inderdaad, wel zo eenvoudig.
De code van Frank zorgt natuurlijk alleen voor het genereren van het menu. Het doet verder nog niets met $_GET['p'] om de juiste paginas te includen...

Hoe je dat op een efficiente manier kunt doen, kun je in dit script zien.
Nog even 1 vraagje dan :D, ik begin het trucje door te krijgen ;)

euh als ik op home aankom zeg maar. Hoe kun je het dan mogelijk maken dat ook de home button al anders word? Dus eigenlijk de status "current" krijgt?

@ blanche, ja ik zag het al ja ;)
Maak van regel 5 uit Frank zijn voorbeeld dit:
<?php
if((!empty($_GET['p']) && in_array($_GET['p'], $aPages) && $_GET['p'] == $page) || (!isset($_GET['p']) && $page == 'home')) ? ' class="current"':'';
?>
Als er geen pagina opgegeven is wordt het menu element dat bij pagina 'home' hoort actief gemaakt.
nu nog een vraag over deze pagina. Hierin wordt bij aanvang van het script de melding weegegeven: "Geen pagina opgegeven".

(regel 70 in dat script)

Ik zou dit uit willen breiden dat er dan de index pagina verschijnt. Aangezien ik vrij nieuw ben in php ;)

Is het mogelijk om het alsvolgt te doen? (regel 70 vervangen met iets in deze trend)

$aContent[] = file_get_contents("naam van de locatie van home")

Alleen zal er dan op "naam van de locatie van home" iets anders moeten komen... iemand die mij op weg kan helpen? ;)
Als de home pagina een statische pagina is kun je dat inderdaad op die manier oplossen. Als het een dynamische pagina is, zul je daar een include() uit moeten voeren.

In de home pagina zal de output dan echter wel in $aContent[] opgeslagen moeten worden om het te laten werken.

Reageren