Ik ben bezig om een eigen website te programmeren in PHP. Ok, dat klinkt nog vaag maar ik zal het proberen verder uit te leggen.
De pagina is nu als volgt ingedeeld:
[INDEX.PHP]
include boven.php
include menu.php
include $_GET['pagina']
include onderkant.php
Let niet op de php code, gaat mij enkel om indeling.
--
In het geval ik nu een forum/bericht maak zou ik graag willen dat de titel in de browser veranderd. bijv. www.mijnsite.nl/index.php?pagina=bericht. Maar dan komt er een probleem voor. De tags <title></title> worden namelijk in het bestand boven.php opgeven. Terwijl ik de pagina met het bericht pas daaronder oproep (onder header). Nu lukt het bijv. ook niet om een doorverwijzing te maken omdat de header al is gesloten.
Nu is mijn vraag eigenlijk hoe ik dit probleem het beste kan oplossen en wat verstandig is.
Op dit moment roep ik elke pagina op via index.php?pagina=....
Is het op website die geprogrammeerd zijn in php gebruikelijk om templates te gebruiken? Op dit moment heb ik dat namelijk ingedeeld in index.php.
Ook zie ik bijv. hier op het forum dat er in de url egt staat showtopic.php (bestand dus) terwijl de indeling en de pagina er hetzelfde uitziet als de homepage.
Hoe kan ik het beste een pagina bestaande uit PHP indelen?
Ervaring heb ik nog niet, dus ik hoop dat er ervaren mensen zijn hier die mij kunnen helpen.
Alvast bedankt!
Zorg dat je de business logica (php) en de output (html) gescheiden houd in je scripts. Eerst heb je dus een lading php code die de includes verzorgt, output sla je zo lang op een variabele.
Pas als alle logica afgehandeld is, begin je met de output van je html. Het mooie is dat je in het logica gedeelte mooi de titel van de pagina hebt kunnen bepalen en deze in een variabele hebt kunnen zetten. Deze kun je nu echoën tussen de <title> tags in de <head> sectie.
Maar stel: ik maak dan bijv. forum.php en contact.php etc.
Hoe kan ik dan de pagina's hetzelfde eruit laten zien? Als ik bijv. logo wil veranderen zal ik dat in alle bestanden moeten doen.
als de naam van het logo hetzelfde blijft dan moet je gewoon het bestand vervangne he ;)
maar als je de layout eenvoudig wilt veranderen voor alle pagina's zou ik opteren voor een template systeem.
zo kan je als je de layout veranderd weinig of niets verkeerd doen aan je php code. en krijg je toch een andere layout.
Ook bv als je de layout door iemand anders wilt laten doen dat niets van php afkent kun je beter met templates kiezen.
Dus voor dit geval zou ik opteren voor een template systeem.
Ik weet niet of het bekend is, maar hoe werkt bijv. deze website?
Ook door gebruik te maken van templates? Ik vind dit namelijk een erg goed voorbeeld voor hoe ik mijn site zou willen hebben.
Je neemt 1 index.php waarin de hele layout verwerkt zit. Je neemt daarin bijvoorbeeld een div #content waarin je de variabele content van de verschillende pagina's kunt weergeven.
Verder include je, afhankelijk van welke pagina in de url aangegeven is, de betreffende pagina in je index.php en geeft je de inhoud van die pagina weer in je content div.
Hier vind je een scriptje met een voorbeeld van hoe je dat aan zou kunnen pakken:
ps. Dit voorbeeld is overigens alleen geschikt als er op de te includen pagina's alleen maar output staat. Als je ook business logica (php) in die pagina's hebt zitten die eerst uitgevoerd moet worden, zou ik de pagina's ergens aan het begin van mijn script includen. De output sla je dan zolang op in een variabele en echo je pas op een later moment...
... omdat de pagina onder de header tags wordt geinclude ...
Dat is dus niet de juiste aanpak. De <head> tags zijn al onderdeel van de output die je naar de browser verstuurt, dat betekent dat je op dit moment logica en output niet gescheiden houdt...
Includen van de pagina doe je nog voordat je je eerste regel HTML uitgespuugd hebt. De output die de geinclude pagina genereert, sla je op in een variabele om te voorkomen dat deze al geoutput wordt voordat er enige html naar de browser verstuurd is.
In de pagina die je include kun je dus ook bijvoorbeelde een variabele $titel aanmaken. Deze kun je dan in je <head> sectie weer gebruiken om de pagina-titel te maken. Wat jij in $titel zet, bepaal je natuurlijk zelf. In geval van een forum, kan dat bijvoorbeeld de titel van een bericht zijn.
ps. Naar de opbouw van de huidige versie van PHPHulp zou ik niet kijken. Deze is al vrij oud en zit niet altijd even logisch in elkaar. Vandaar ook dat er een nieuwe versie aankomt :)
Als ik paginas wil includen waarin ook business logica voorkomt, zorg ik altijd dat ik de output van die pagina's opsla in een array $aContent. Als ik de pagina dan include in bijvoorbeeld mijn index.php, heb ik de array $aContent waarin alle output van die pagina staat.
Op mijn index.php kan ik dan verder alle logica afhandelen en tenslotte kan ik de html outputten naar de browser. Op het punt waarik wil dat de output van de geïnclude pagina weergegeven wordt, lees ik de array $aContent uit met een foreach loop en echo ik alle content...