Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
Je cherche à mettre en place du SEO sur un site réalisé avec Zend, mais je suis confronté à un problème.
Avec le Zend_Router, j'arrive à gérer sans problème des url de type
http://localhost/monsite/produits/nomduproduit-22
avec dans mon cas 22 et l'identifant du produit.
Ce que je voudrais faire c'est avoir une url du type :
http://localhost/monsite/monProduit.html
a partir de cette url, je cherche dans une table en base de données l'identifiant qui correspont à mon produit et redirige vers le controller produit et l'action voir, avec en paramètre mon identifiant, en gros passer de ça:
http://localhost/monsite/monProduit.html
à ça:
http://localhost/monsite/produit/voir/id/22
Est-il possible de faire ça avec le Zend_Router?
Merci,
Pierre
Hors ligne
Salut,
Je dirais qu'il faut plutôt faire un sanitize sur le nom du produit au moment de son entrée dans la bdd (grâce à un filtre perso) ou alors ajouter un champ spécifique dans le formulaire du produit. Ensuite il faudrait ajouter un index sur ce champ en bdd et requêter directement là dessus.
Ce champ doit être unique.
A+ benjamin.
Hors ligne
Ecris ta propre classe Zend_Controller_Router_Route_Seo par exemple.
Tu peux t'inspirer d'une autre classe comme Zend_Controller_Router_Route_Module. La méthode match() sert à traduire l'url en paramètre, et assemble() l'inverse. Tu récupères le segment monProduit dans l'url, tu recherches en base l'identifiant, et tu renvoies un tableau avec l'action fixée à voir, et ton identifiant.
Pense à définir la ressource Db avant la ressource Router dans ton bootstrap (dépendance).
Après cela dépend aussi de tes besoins, si tu as seulement besoin d'une url SEO. Tu peux utiliser une route regex ([a-zA-Z]+).html. Tu rediriges cette dernière systématiquement sur ton action voir. Dans l'action, tu convertis en base monProduit par son id.
Hors ligne
Bonjour,
Merci pour ses réponses, avec une classe de route perso, ça marche à peu près, quelques ajustements et c'est bon.
Pierre
Hors ligne