Toutes les clefs pour réussir dans le e-commerce

Mes modules Prestashop

Des url optimisées avec Symfony2

Pour le référencement de vos pages des url optimisées est un plus non négligeable. Voici une solution parmi d’autres pour mettre cela en place dans votre projet Symfony2.

On commence par créer une entité très simple (pour l’exemple) avec une variable titre (et un Id).



class Job
{
/**
* @var integer $id
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;

/**
* @var string $titre
*
* @ORM\Column(name="titre", type="string", length=255)
*/
private $titre;

/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}

/**
* Set Titre
*
* @param string $titre
*/
public function setTitre($titre)
{
$this->titre = $titre;
}

/**
* Get Titre
*
* @return string
*/
public function getTitre()
{
return $this->titre;
}

/**
* get url
*
* @return string
*/

public function getUrl() {
$url=$this->slugify($this->titre);
return $url.".html";
}

private function slugify($text) {
// replace non letter or digits by -
$text = preg_replace('~[^\\pL\d]+~u', '-', $text);
// trim
$text = trim($text, '-');
// transliterate
$text = iconv('utf-8', 'us-ascii//TRANSLIT', $text);
// lowercase
$text = strtolower($text);
// remove unwanted characters
$text = preg_replace('~[^-\w]+~', '', $text);
if (empty($text)) {
//echo 'in';
return 'n-a';
}
return $text;
}

}


La méthode getUrl appelle la methode slugify dont le rôle est de nettoyer le titre de notre entité pour former une chaîne compatible avec le format d’une url.

Il faut ensuite, créer notre route.



OpartJobBundle_show:
pattern: /job/show/{id}/{url}
defaults: { _controller: OpartJobbundle:Default:show }


Désormais pour afficher notre entité la route attend deux variables, l‘id de l’entité et son url.

Dernière étape créer le lien dans notre template twig.



<a href="{{ path('OpartJobBundle_show', {'id': entity.id,'url':entity.url}) }}">{{ entity.titre }}</a>


Et voila, désormais vous allez avoir des url du type:
www.monsite.com/job/show/250/le-titre-de-mon-entite.html

Dans mon exemple j’ai créé un bundle pour gérer des offres d’emplois, d’où le “job” dans l’url mais bien sûr vous pouvez mettre ce que vous voulez dans votre route pour que ce soit cohérent avec votre projet.

Poster un Commentaire

2 Commentaires sur "Des url optimisées avec Symfony2"

Recevoir un email pour
avatar
Trier par:   plus récent | plus vieux | Plus de vote
Ukan
Invité

Génial, merci pour ce petit script efficace. Les URL explicites sont essentielles pour un bon référencement naturel !

François
Invité

Bonjour, tous d’accord pour dire que c’est une phase extrêmement importante. Pour ma part, j’utilise l’extension de Gedmo, qui permets l’annotation Sluggable, c’est vraiment super pratique aussi ;) ! a bientot

wpDiscuz