Menu bij index.php?p=blabla

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Tom

Tom

04/02/2008 16:24:00
Quote Anchor link
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.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
                <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?
Gewijzigd op 01/01/1970 01:00:00 door Tom
 
PHP hulp

PHP hulp

21/11/2024 20:53:23
 
Joren de Wit

Joren de Wit

04/02/2008 16:28:00
Quote Anchor link
Nee, je moet niet je switch aanpassen, maar juist het menu zelf. Je zou het op deze manier aan kunnen pakken:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<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 ;-)
 
Tom

Tom

04/02/2008 16:29:00
Quote Anchor link
Ok erg bedankt ,ik zal eens kijken of het werkt ;)

Edit: Thanks!
Gewijzigd op 01/01/1970 01:00:00 door Tom
 
Frank -

Frank -

04/02/2008 16:30:00
Quote Anchor link
Yep, weggooien die switch! Dat is niet te onderhouden en levert alleen maar meer werk op.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?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;
}

?>
 
Tom

Tom

04/02/2008 16:36:00
Quote Anchor link
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?
Gewijzigd op 01/01/1970 01:00:00 door Tom
 
Frank -

Frank -

04/02/2008 16:37:00
Quote Anchor link
Inderdaad, wel zo eenvoudig.
 
Joren de Wit

Joren de Wit

04/02/2008 16:41:00
Quote Anchor link
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.
 
Tom

Tom

04/02/2008 16:42:00
Quote Anchor link
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 ;)
Gewijzigd op 01/01/1970 01:00:00 door Tom
 
Joren de Wit

Joren de Wit

04/02/2008 16:50:00
Quote Anchor link
Maak van regel 5 uit Frank zijn voorbeeld dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?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.
 
Tom

Tom

04/02/2008 17:04:00
Quote Anchor link
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? ;)
 
Joren de Wit

Joren de Wit

04/02/2008 17:08:00
Quote Anchor link
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.
 
Tom

Tom

04/02/2008 17:11:00
Quote Anchor link
Nee de home pagina is gewoon (simpele) html :) alleen een fotopagina die php is.
Gewijzigd op 01/01/1970 01:00:00 door Tom
 
Joren de Wit

Joren de Wit

04/02/2008 17:15:00
Quote Anchor link
HTML is per definitie statisch. Dus ga je voor de file_get_contents() oplossing.
 
Tom

Tom

04/02/2008 17:32:00
Quote Anchor link
Ik ben al een eind opweg.

ik heb nu het volgende php script 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
                      <?php
                        if(isset($_GET['p']))
                        {

                            $page = $sDir.$_GET['p'].[b]'.html'[/b];
                                if(file_exists($page)) {
                                    include($page);
                                }
else {
                                    include('home.html' );
                                }
                        }
else {
                            include($sDir.'home.html');
                        }

                      ?>


op regel 4 is te zien dat ik tot nu toe alleen .html bestanden kan includen.

Toch wil ik bovenaan in mijn code een soort configuratie uitvoeren. Daar moet in een array in te voeren zijn welke extensies er mogelijk zijn. Vervolgens wordt het script uitgevoerd, komt erachter dat er geen .html is en kijkt vervolgens of er WEL .php bestaat. Wanneer dit ook niet het geval is zal er verder worden gegaan.

Mijn configuratie tot nu toe:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
// Definiëren van de directory waar de pagina's zich bevinden
$sDir = 'pages/';
$aTypes = array (
    '.html',
    '.php',
);

?>


Waarin "$aTypes" natuurlijk de array moet worden met mogelijke extensies.

Iemand een zetje?
Gewijzigd op 01/01/1970 01:00:00 door Tom
 
Joren de Wit

Joren de Wit

04/02/2008 17:53:00
Quote Anchor link
Dat wordt dan toch zoiets:
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
<?php
$found
= false;
foreach($aTypes as $sType)
{

    $page = $sDir.$_GET['p'].$sType;
    
    if($file_exists($page))
    {

        include($page);
        
        $found = true;
        break; // Beëindig de foreach loop
    }
}


if(!$found)
{

    // Doe iets als pagina niet bestaat
}
?>
 
Tom

Tom

04/02/2008 21:27:00
Quote Anchor link
Het werkt echt geweldig nu! Heb de code nog wel op een paar punten aan moeten passen. Maar dat is niet erg, zo leer ik ook weer!

Thnx :)
 
Joren de Wit

Joren de Wit

04/02/2008 21:34:00
Quote Anchor link
Het zijn natuurlijk ook maar voorbeeldjes die ik geef, kleine kans dat die in 1x werken.

Maar goed, mooi dat het gelukt is ;-)
 



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.