Naar aanleiding van het 'page in page' item , het volgende, ik hink nog steeds op 2 gedachten om volledige php website's te maken:
- A Een index pagina met de buitenlayout die verder gevuld wordt dmv. van een include page (zie bv item 'page in page')
- B Een index pagina met layout die verder gevuld wordt dmv. ?action=voorraadpage&id=..
waarbij ik dan voor de betreffende actions meestal een functie aanroep
Hoe doen jullie het, en waarom ? is er bij A of bij B een belangrijk voordeel/nadeel ?
[edit] @gerben ja dat zat ik ook net te denken toen ik het opschreef, het verschil is een beetje oppervlakkig, als je erdoorheen kijkt gebeurd haast zelfde ....
Maar toch een goede reden voor A of juist voor B ??
Gewoon een index pagina met layout en dan op de 'content' plekken zet ik include's voor statische pagina's zoals menu's en een switch() om andere pagina's in te laden.
Dus bijv. index.php?mod=register index.php?mod=login
Je kan ook nog nog mod_rewrite gebruiken voor nette URLs dan heb je gewoon site.nl/register en site.nl/login
Een index.php die de layout bevat. Verder wordt in de url met ?page=pagina bepaald welke pagina er weergegeven moet worden in het content gedeelte.
Natuurlijk wel controleren of het een pagina is die geinclude mag worden en of de pagina wel bestaat. Mocht de te includen pagina ook nog GET variabelen nodig hebben, dan worden die gewoon in de URL geplaatste: ?page=pagina&var=waarde
Tot slot met behulp van mod-rewrite de URL's een vriendelijker uiterlijk geven. Dus bijvoorbeeld jouwsite.nl/pagina/waarde/.
ps. Nog een scriptje dat laat zien hoe je pagina's veilig kunt includen.
Dus als er geen ?page is aangeroepen dan gewoon de standaard pagina, is ie wel aangeroepen en komt niet voor in mijn andere cases (pagina's die ik gedefineerd heb) dan is het dus een niet bestaande pagina.
Ik zou zelf geen switch statement gebruiken. Zet alle toegstane pagina's in een array en controleer of de GET variabele in die array voorkomt. Zo ja, controleer of de pagina bestaat en als dat het geval is include je hem. In alle andere gevallen geef je een foutmelding.
Voordeel van de array is dat je script veel makkelijker uit te breiden is. Kwestie van even de paginanaam toevoegen aan de array.
Wil je niet de paginanaam in de url vermelden, gebruik dan een associatieve array om de waarde in de url te koppelen aan de jusite pagina.
Een voordeel (en waarom ik dus switch() gebruik) is dat je pagina-specifieke dingen kan opgeven.
Voor bijvorobeeld de profiel pagina:
<?php
case "profile":
if (needLogin() > 0)
if($poet->needRights(array(1)))
include('profile.php');
else
include('notenoughrights.php');
else
include('notloggedin.php');
break;
?>
? heb je ook nog andere pagina specifieke dingen ?
Het inloggen doe ik door in de include pagina de status te controleren en bij onvoldoende status link ik door naar login page en geef tevens het return pad door (zodat je automatisch na inlog weer op de betreffende pagina komt)
Het enige wat ik op mijn pagina's bovenaan moet zetten is een scriptje dat er voor zorgt dat de pagina alleen vanuit de index aangeroepen kan worden.
Dan hoef ik in de pagina's niks meer aan te passen.