Basic URL Routing
Ik ben bezig met het maken van een eigen, zeer simpel, CMS. Via .htaccess zorg ik ervoor dat alles wat achter het domein staat naar index.php wordt gestuurd. Ik werk eigenlijk niet met echte rewrites, maar met URL Routing (ipv Rewriting).
Dit is eigenlijk de kern van mijn .htaccess:
# rewrite alles naar de template controller index.php (behalve bestaande paden)
RewriteRule ^$ index.php
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule .* index.php [L]
Wordpress en andere CMS'en werken hier ook mee geloof ik.
Nou heb ik bijvoorbeeld een URL: www.mijnwebsite.nl/diensten/webdesign/prijzen.
Met...
$requestURI = explode('/', $_SERVER['REQUEST_URI']);
... kan ik de verschillende menuitems stuk voor stuk verifiëren. Ik krijg dan een array met daarin 'diensten', 'webdesign' en 'prijzen'. Elk van deze items is een pagina. Diensten is de bovenliggende pagina. Deze heeft een subpagina genaamd webdesign, die op zijn beurt weer de onderliggende pagina 'prijzen' bevat.
Nu is mijn vraag: hoe kan ik nou het beste kijken of deze pagina wel of niet bestaat? Moet ik per item (diensten, webdesign, prijzen) bekijken of deze bestaan en in welke volgorde? Ik kom er niet zo goed uit, het lijkt wat omslachtig om het op die manier te doen.
Ik kom wel wat op internet tegen, maar dan gaat het over controllers die werken met parameters: dat is hier eigenlijk niet van toepassing, omdat ik met pagina's werk en niet zozeer met paginering o.i.d.
Ik hoop dat jullie me hierbij kunnen helpen en dat ik het goed heb uitgelegd :)
Vriendelijke groeten,
Robbert
id
pagina
module
tekst
dan ga je controleren if($_GET['param1'] == $row['pagina']){
if(!$row['module'] == ""){
include($row['module']);
}else{
$content .= nl2b4$row['tekst'])
}
zo iets :D
Gewijzigd op 18/02/2011 19:17:10 door Mitchel V
je zou in jouw geval de paden, dus alles wat na document_root komt, kunnen opslaan in de DB, en dat veld met paden het primaire zoekveld laten zijn. Wordt dat pad niet gevonden kun je zelf een alternatieve 404 pagina laten aanroepen, wordt het pad wel gevonden zoek je uit het betreffende record de verschillende pagina-elementen bij elkaar, (title, index-follow metatag, description meta-tag, te laden css, de 'highlight-menu-item css, header, page-content, footer) en stel je de pagina samen.
Ik vind het wel een leuke benadering, die URL-routing, maar je oorspronkelijke URL, die blijft toch wel in de adresregel staan op deze manier?
Gewijzigd op 18/02/2011 20:00:14 door Harry nvt
Ik heb een tabel "pages" waarin alle pagina's staan.
Elke pagina heeft een:
id, titel, subtitel, parent (id van bovenliggende pagina), paginatype en een 'slug'.
De slug is het stukje dat in de URL verschijnt. Zo heeft bijvoorbeeld een pagina "Prijslijst & Kortingen" de slug "kortingen". De slug is de URL vriendelijke versie van de pagina.
Nu zeg jij, Harry nvt, dat het gehele pad opgeslagen zou moeten worden ipv alleen de pagina-slug. Dit zou op zich kunnen, maar ik ben bang dat het lastig wordt wanneer de slug van een bovenliggende pagina verandert. Dan zou je ook telkens het pad van de onderliggende pagina's aan moeten passen. Maar het is inderdaad waarschijnlijk een stuk sneller om een pagina op die manier op te zoeken. Om voor elk item nu een database call te maken, dat is wat ik nu doe. Dat wil ik dus liever niet.