itora web

11Apr/100

Friendly URL con CakePHP

Per una corretta indicizzazione del nostro sito sui motori di ricerca, le URL dovrebbero contenere delle parole chiave coerenti con i contenuti.
Ecco quindi che una pagina dalla url:
www.miosito.com/view/24
dovrebbe diventare
www.miosito.com/view/come-ottenere-friendly-url
per essere più appetibile al motore di ricerca.

Per ottenere delle Friendly URL in cakePHP basta scaricare dal repo su github di Mariano Iglesias "sluggable behavior" e metterlo in app/model/behavior/sluggable.php.

Aggiungrere questa linea nel model 'articolo', che dice a cake di usare il behaviors prima scaricato:

var $actsAs = array('Sluggable');

Ora l'articolo può essere richiamato da un nome significativo e non dall'id. Aggiungiamo quindi nella tabella 'Articoli' il campo 'slug'. Se volete cambiare il nome di questo campo, o utilizzare il campo title, o vedere altre opzioni, qui le potete trovare http://bakery.cakephp.org/articles/view/sluggable-behavior
Dovete poi modificare la funzione view del vostro controller, aggiungendo il campo slug.

function view($slug = null) {
    if(!$slug){
            $this->Session->setFlash(__('Invalid Articolo', true));
            $this->redirect(array('action' => 'index'));
    }
    $articolo = $this->Articolo->findBySlug($slug);
    $this->set('articolo', $articolo);
}

Per richiamare l'articolo, passiamo al metodo view il valore del campo slug anzichè l'id.

<?php echo $html->link('Articolo bello', array('controller'=>'Articoli', 'action'=>'view', 'valore del mio campo slug'))  ?>

Per far si che ogni volta che aggiungete un nuovo articolo, o che vogliate modificarne uno esistente, venga aggiornato il valore del campo 'slug', dovete settare il valore di a true nel vostro model

var $actsAs = array('Sluggable' => array( 'overwrite' => true));

Una volta fatto questo, potremmo anche decidere di migliorare ulteriormente l'url, passando da:
www.miosito.com/view/come-ottenere-friendly-url
a
www.miosito.com/articoli_SEO/come-ottenere-friendly-url

per far questo basta aggiungere un alias nel file routes.php

Router::connect('/articoli_SEO/*', array('controller' => 'articoli', 'action' => 'view'));

In CakePHP si possono fare tante cose modificando il file routes.php.
Una buona lettura la trovate qui