Vriendelijke URL's in CakePHP

Introductie tot vriendelijke url's

Deze serie artikelen behandelt CakePHP, specifiek versie 1.3 (met veel toepasbaarheid in 1.2). We beginnen met het uitleggen van vriendelijke URL's, ook wel bekend als Search Engine Friendly URLs (SEO-vriendelijke URL's). Deze URL's verbeteren de indexering van je website door zoekmachines zoals Google. Een bijkomend voordeel is dat de URL's zelf duidelijker de inhoud weergeven.

Basis setup: controller en view

Laten we een voorbeeld nemen. We gaan ervan uit dat je de basisprincipes van CakePHP kent. Zo niet, raadpleeg dan de CakePHP Cookbook. We gebruiken de conventie van Engelse namen. Stel, we hebben een controller 'Posts' en een model 'Post' (een artikel in dit geval). Om een link naar een specifiek artikel te maken, creëren we een 'view' methode in de controller. De code vult de data en stelt de view in.

Eenvoudige view en basis url

De code om een artikel te tonen is relatief eenvoudig: $this->Post->id = $id; $post = $this->Post->find('first'); $this->set('post', $post);. Vervolgens maken we een view met de volgende code: . Een basislink naar dit artikel zou er als volgt uitzien: http://localhost/posts/view/1. Deze URL is echter niet informatief voor de gebruiker en niet geoptimaliseerd voor zoekmachines.

Het gebruik van de router voor vriendelijke url's

We willen een URL zoals http://localhost/artikelen/id-titel. Om dit te bereiken, gebruiken we de CakePHP router. Open het bestand /app/config/routes.php. Hier gebeurt de magie. We beginnen met het creëren van de URL http://localhost/artikelen/id door de volgende code toe te voegen: Router::connect('/artikelen/:id', array('controller' => 'posts', 'action' => 'view'), array('pass' => array('id'), 'id' => '[0-9]+'));.

Slug generatie en finale url structuur

Om de finale URL te krijgen, veranderen we het fragment naar: Router::connect('/artikelen/:id-:slug', array('controller' => 'posts', 'action' => 'view'), array('pass' => array('id', 'slug'), 'id' => '[0-9]+', 'slug' => '.+'));. De 'slug' is een korte, beschrijvende string zonder spaties of speciale tekens, geoptimaliseerd voor SEO. Dit kan de titel van het artikel zijn, maar dan bewerkt.

Link generatie in de view

In de view kunnen we de link genereren met: link('Link', array('controller' => 'posts', 'action' => 'view', 'id' => $id, 'slug' => $slug)); ?>. De Inflector::slug() methode in CakePHP is handig om de titel om te zetten in een slug. De eerste parameter is de string die moet worden ‘schoongemaakt’, de tweede is het karakter om speciale tekens mee te vervangen.

Omgaan met diakritische tekens (accenttekens)

CakePHP 1.3 heeft geen ingebouwde ondersteuning voor het omzetten van diakritische tekens (zoals é, à, ü) naar hun latijnse equivalenten. Je kunt een eigen functie maken of de inflector.php file aanpassen. We kunnen de standaardwaarde van $default in de slug-methode veranderen om dit te bereiken. Houd er rekening mee dat deze wijziging verloren kan gaan bij CakePHP updates. Er is al een ticket ingediend voor deze functionaliteit in toekomstige versies.

Met deze aanpassingen kunnen we nu vriendelijke URL's genereren, wat zowel de gebruikerservaring als de SEO verbetert. Ik hoop dat dit artikel nuttig is!