Agence web et solutions IT, Experts Symfony contact@avanim-prod.com

4 etapes pour encoder les URL avec Symfony

14 février 2011 jravouna Symfony Étiquettes : , , 0 Comments

Je viens de découvrir une exigence drôle. C’est une sorte de catalogue de produits quevous pouvez filtrer pour divers attributs, comme une marque la taille, la couleur ou le type.

Normalement, je dirais que tout type de recherche est une requête POST, et donc les pages de résultats ne sont pas accessibles par n’importe quel moteur de recherche de toute façon vous n’avez donc pas besoin de penser au SEO. Mais dans ce cas, l’exigence SEO friendly URL est insisté dessus.

Alors voici mes propositions.

Voyons ensemble des exigences plus en détail.

L’URL doit être SEO friendly
Il ya un certain nombre d’environ 10 paramètres qui peut être étendue plus tard
L’utilisateur n’utilisera quelques paramètres de sorte que toute combinaison doit êtreconsidérée
Voici mes quatre solutions.

1. Très simple requête URL

products:
  url: /products
  params: { module: product, action: filterList }

Ceci produira

<?php

echo url_for('@product');
// -> /products

echo url_for('@product?color=black');
// -> /products?color=black

echo url_for('@product?brand=apple&size=13inch');
// -> /products?brand=apple&size=13inch

echo url_for('@product?model=sunglasses&style=cool');
// -> /products?model=sunglasses&style=cool

Toutes les combinaisons de travail et sera le nombre de paramètres n’est pas limité. Mais c’est très old school et pas SEO friendly. Même un peu gênant


2. Structure des dossier URL KEY/VALUE

products:
  url: /products/*
  params: { module: product, action: filterList }

Ce qui produit

<?php

echo url_for('@product');
// -> /products

echo url_for('@product?color=black');
// -> /products/color/black

echo url_for('@product?brand=apple&size=13inch');
// -> /products/brand/apple/size/13inch

echo url_for('@product?model=sunglasses&style=cool');
// -> /products/model/sunglasses/style/cool

C’est beaucoup mieux, mais les noms des paramètres supplémentaires ne sont pas pertinents aux moteurs de recherche et pourrait les confondre lors de la tentative de construire un arbre de contexte.

3. URL plus courte avec des valeurs par défaut pour les paramètres inutilisés

products:
  url: /products/:brand/:model/:color/:size/:style
  params: { module: product, action: filterList, brand: all-brands, model: all-models, color: all-colors, size: all-sizes, style: all-styles }

Ce qui donne

<?php

echo url_for('@product');
// -> /products

echo url_for('@product?color=black');
// -> /products/all-brands/all-models/black

echo url_for('@product?brand=apple&size=13inch');
// -> /products/apple/all-models/all-colors/13inch

echo url_for('@product?model=sunglasses&style=cool');
// -> /products/all-brands/sunglasses/all-colors/all-sizes/cool

Cela ressemble beaucoup mieux. Comme les valeurs de chacun des paramètressusceptibles de se chevaucher, nous devons compter dessus l’ordre des paramètres.Définir les valeurs par défaut permet de maintenir une telle ordonnance et d’un point de vue SEO friendly c’est logique.

4. URL complète avec les valeurs par défaut pour les paramètres inutilisés

products:
  url: /products/:brand/:model/:color/:size/:style
  params: { module: product, action: filterList, brand: all-brands, model: all-models, color: all-colors, size: all-sizes, style: all-styles }
  options:
    generate_shortest_url: false
<?php

echo url_for('@product');
// -> /products/all-brands/all-models/all-colors/all-sizes/all-styles

echo url_for('@product?color=black');
// -> /products/all-brands/all-models/black/all-sizes/all-styles

echo url_for('@product?brand=apple&size=13inch');
// -> /products/apple/all-models/all-colors/13inch/all-styles

echo url_for('@product?model=sunglasses&style=cool');
// -> /products/all-brands/sunglasses/all-colors/all-sizes/cool

Si vous préférez que votre URL un peu plus détaillée ce serait votre option. Je préfèrealler pour le plus court, mais SEO friendly sage il devrait y avoir aucune différence.

Voir l’article original : http://test.ical.ly/2011/02/03/4-ways-to-encode-a-variable-number-of-parameters-in-a-url-using-symfony-routing/

Submit a comment