Met spoed PHP Developer gezocht voor URL Slugs
Ik zoek iemand die voor mij URL Slugs kan maken die SEO Friendly zijn, zoals dit:
www.behelix.com/events/afterflirt
Waarbij www.behelix.com/events ook een pagina is, ik moet dit zelf handig kunnen uitbreiden, dus eventuele uitleg is welkom!
Heb enige kennis van PHP dus dat moet het probleem niet zijn.
Het heeft enige haast, prijs kunnen we samen wel uitkomen!
Interesse? Dan kan je mailen naar: [email protected]
Met vriendelijke groet,
Tonny-Boy Verweij
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.behelix\.com$ [NC]
RewriteRule ^(.*)$ http://behelix.com/$1 [R=301,L]
RewriteRule ^events$ index.php?pagina=events
RewriteRule ^events/$ index.php?pagina=events
RewriteRule ^events/(.*)$ index.php?pagina=events&sub=$1
RewriteRule ^events/(.*)/$ index.php?pagina=events&sub=$1
RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.behelix\.com$ [NC]
RewriteRule ^(.*)$ http://behelix.com/$1 [R=301,L]
RewriteRule ^events$ index.php?pagina=events
RewriteRule ^events/$ index.php?pagina=events
RewriteRule ^events/(.*)$ index.php?pagina=events&sub=$1
RewriteRule ^events/(.*)/$ index.php?pagina=events&sub=$1
index.php
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
dan heb je een opzet hoe het werkt
Gewijzigd op 31/01/2015 17:57:07 door php knipper
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
RewriteEngine On
# als bestaat, dan niets doen
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [L]
# de rest gaat naar index.php
RewriteRule ^(.*)$ index.php [L,QSA]
# als bestaat, dan niets doen
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [L]
# de rest gaat naar index.php
RewriteRule ^(.*)$ index.php [L,QSA]
Vervolgens zorg je in index.php dat er uitgezocht wordt wat er in de url staat
$url = $_SERVER['REQUEST_URI'];
simpel gezegd: je kunt met explode() kijken welke onderdelen je hebt.
Als blijkt dat deel 1 "events" is, dan start je een functie die daarmee zijn ding doet.
Als deel 2 ook bestaat, dan doe je daar iets mee in de genoemde functie, of als hij onbreekt doe je daarmee ook je ding.
Dat maakt dat je .htaccess altijd werkt. Ook als je nog 4 alternatieve termen hebt naast "events".
(dat zou je nog dynamisch kunnen doen in de rewriterules)
Maar vooral is dat handig als je soms 1, soms 2 en soms 5 elementen in je url hebt staan:
/events/afterflirt/aanmelden/2/personen
Met verschillende aantallen elementen worden de rewriterules namelijk al snel ondoorzichtig en als er een fout in zit, is dat vaak heel moeilijk te debuggen.
In PHP heb je daar veel meer controle over in het algemeen.
1. .htaccess met één RewriteRule die alles doorstuurt naar index.php
2. index.php als je single entry point
3. ???
4. PROFIT
De topicstarter vraagt min of meer naar stap 3 (specifiek: het bouwen van slugs, met oog op uitbreidbaarheid), waar ook het meeste werk zit :).
Soortgelijke snippets als de bovenstaande zul je ook nodig hebben, omdat dit toch om een soort van totaaloplossing vraagt.
Waar je voor zou kunnen kiezen is een boomstructuur met nodes, zoiets dus:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
root
|
+---- public
| +---- home
| |
| +---- news
| | +---- artikel 1
| | |
| | +---- artikel 2
| |
| +---- contact
| |
| ...
|
+---- admin
| +---- beheerpagina 1
| |
| +---- beheerpagina 2
...
|
+---- public
| +---- home
| |
| +---- news
| | +---- artikel 1
| | |
| | +---- artikel 2
| |
| +---- contact
| |
| ...
|
+---- admin
| +---- beheerpagina 1
| |
| +---- beheerpagina 2
...
Al deze pagina's hebben nummers (node id's) en titels. Van deze titels wil je slugs maken. Elk niveau in de boom scheid je in de volledige URL van een pagina door een forward slash (/). De volledige URL van een pagina is dus opgebouwd door (de slugs van) de nodes vanaf de root naar de uiteindelijke pagina achter elkaar te zetten.
Er zijn genoeg stukken code te vinden om slugs te maken van titels. Vaak worden alle niet-leesbare karakters gestript, maar er valt ook wat voor te zeggen om toch te proberen om deze karakters om te zetten naar een leesbare variant. Mijn eigen code voor het opbouwen van slugs is afgeleid uit dit artikel.
Per node kun je aangeven wat deze node is: een placeholder (om simpelweg nodes te groeperen), een alias (van een andere node), een redirect (denk aan een shortcut) of een "echte" pagina. Ook zou je per node kunnen aangeven of deze bij moet dragen aan de opbouw van een URL of niet, je wilt niet al je publieke pagina's laten starten met "/public".
Aan deze node kun je nog meer "ophangen": het pagina-type (dit is bijvoorbeeld een class met een specifiek doel, bijvoorbeeld "article", en deze pagina-types hebben vervolgens weer eigenschappen (bijvoorbeeld artikel-id)). Het fijne van deze opzet is dat je deze types kunt instantiëren en je code herbruikbaar wordt (je kunt meerdere artikelen aanmaken in je boom, maar je artikel pagina-type hoef je maar 1x te schrijven. Authenticatie kun je hier ook in kwijt.
Maar dan komt het: misschien wil je vanuit pagina X binnen je site een interne link leggen naar pagina Y. Dit zou je kunnen "hardcoden" door te refereren aan de volledige URL, maar wat als je de pagina nu verplaatst (of van domein verandert, of de hele site naar een subdirectory verhuist)? Dan heb je een dode link in je site :/. Wat beter zou zijn is dus een soort van "interne link functie" die je voor al je interne navigatie gebruikt. Een heel groot voordeel hiervan is dat je je site "mobiel" houdt: je kunt deze neerzetten waar je wilt, dit is ook enorm fijn als je ontwikkelt op locatie A, en dezelfde site live hebt staan op locatie B. Anders moet je allerlei trucs uithalen met je hosts file, virtual hosts, een URL search-and-replace op je hele database... *brr*
Als je een linkfunctie hebt die refereert aan je node-id dan maakt het niet uit waar die pagina in je site-hierarchie staat of hoe de uiteindelijke URL luidt. Hiermee kun je pagina's dus ook vrij verplaatsen binnen je site zonder dat er iets breekt.
Dit hele verhaal heb ik bij wijze van oefening gebruikt bij het bouwen van mijn webpagina.
afbeelding backend
Hierbij moet je dus wel een aantal onderwerpen tegelijkertijd oppakken als je "van slugs gebruik wilt maken".
Je kunt er natuurlijk ook voor kiezen om voor een bestaand framework te gaan in plaats van je eigen wiel opnieuw uit te vinden.