Bardziej przyjazne linki w CakePHP

Załóżmy, że mamy naszego nieśmiertelnego bloga.
Aby wyświetlić dany post, generujemy mniej więcej taki link za pomocą helpera html:
http://domena.pl/posts/show/23

Powiedzmy, że chcemy być SEO friendly i doklejamy na końcu tytuł postu:
http://domena.pl/posts/show/23/bardziej_przyjazne_linki_w_cakephp

Niby wszystko ładnie, pięknie, ale słowa posts i show w adresie zmniejszają siłę pozostałych słów, i strona będzie się pozycjonować w google gorzej np. na słowa linki + cakephp.

Lepszym byłby link:
http://domena.pl/23/bardziej_przyjazne_linki_w_cakephp

Można łatwo sprawić, żeby tak to działało, bez większych problemów.

Przede wszystkim edytujemy app/config/routes.php
i dodajemy do nich linię:

$Route->connect('/:id/*', array('controller' => 'posts', 'action' => 'show'));

dzięki temu zabiegowi ruter będzie nam linkował adresy w takiej postaci do kontrolera posts, metody show.

Teraz należy zmodyfikować metodę show, aby działała przy takim przekierowaniu:
1. umożliw wywołanie funkcji bez podania parametru id:

function show($id=null){
//...
}

2. w wypadku nowego przekierowania id znajduje się w $this->params[‘id’] :

$id = (isset($this->params['id']))? $this->params['id']: $id;

Bardzo fajnie, ale teraz przestaje działać stary (standardowy) sposób przekierowania taki adres:
http://domena.pl/posts/show/23
zwróci błąd missing controller.

Łatwo temu zaradzić dodając jeszcze jedną linię w pliku routes.php:


$Route->connect('/static_pages/view/:id/*', array('controller' => 'static_pages', 'action' => 'view'));

Koniecznie powyżej tej poprzednio dodanej!

Share Button

Leave a Reply

Your email address will not be published. Required fields are marked *