Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour @ tous,
Je pensais mettre en place, dan smon module de gesiton de spages, la possibilité de récrire les url avec l'url rewriting via le .htaccess.
Ca marche très bien, et j'ai ainsi accès à mes pages par :
http://www.monsiteZF.com/ma-page-avec-d … -cles.html qui en fait est une réécriture d'url vers
http://www.monsiteZF.com/page/affiche/id/1/
Seul problème, ça fait 2 redirecitons en fat, et je pense que Google en voyant ça, considère la première URL comme une redirection de type 302
D'ailleurs, en utilisant des logiciels de généraiton de SITEMAP (XML), ça me vire carrément ces urls...
Avez-vous une idée ?
Hors ligne
Bonjour,
A priori, t'es pas obligé de faire une redirection 302, tu peux faire une simple réécriture ?
Sinon l'autre solution est de traiter tes URL http://www.monsiteZF.com/ma-page-avec-d … -cles.html avec le ZF directement, on peut imaginer un plugin qui intercepte ces URL et qui choisit les bons controlleur, action et paramètre en fonction de l'URL fournie.
A+, Philippe
Hors ligne
Salut Philippe, merci pour la réponse.
En fait, je veux pas faire de redirection 302, mais vu que tout passe par le bbotstrap index.php, et qu'il y a déjà une interception a cause du rewrite cond, la réécriture simple d'url fonctionne visuellement, mais côté moteur de recherche, ça ne semble pas correct...
Sinon, peux tu developper un peu plus ton idée de plugin ?
Merci d'avance,
Aurélien.
Hors ligne
Pour ceux que ça intéresse, voici un article qui traite de la réécriture d'URL pour le SEO. L'article provient de la devzone de Zend donc en anglais... c'est un peu hard à assimiler mais s'y j'aboutis sur quelque chose qui fonctionne, je reviendrais poster la méthode pour mettre en place un "plugin d'URL-rewriting".
Hors ligne
Avec le zend framework la seul règle de réécriture qu'il faut est celle vers index.php car le frontController utilise l'url saisie, pas l'url rewrité.
Donc ce que je te conseille pour avoir des jolies URLS (perso j'en ai fait des magnifiques vraiment optimisé SEO) c'est de les réécrire directement en php.
Il suffit de bien utiliser le routeur en écrivant des règles avec Zend_Controller_Router_Route_Regex. Cela revient au même que de passer par un htaccess...
Hors ligne
Yes je confirme, Zend_Controller_Router_Route_Regex est vraiment charmant xD
Hors ligne
Et perso j'ai créer un helper Urlize qui formate du texte en jolie-mot-avec-des-tirets-sans-accent et une autre version en Filter bien plus élaboré qui permet de limiter le nombre de mots et de censuré des mots
Voici juste le code du Helper assez simpliste
class Rx_View_Helper_Urlize { public function urlize($string) { return $this->dasherize($this->alphaize($string)); } protected function dasherize ($string) { $search = array('/\W+/', '/-[a-zA-Z]-/', '/--+/', '/^-+/', '/-+$/' ); $replace = array( '-', '-', '-', '', ''); return trim(preg_replace($search, $replace, $string), '-'); } protected function alphaize($string) { $accents = array('À','Á','Â','Ã','Ä','Å','Æ','Ç','È','É','Ê','Ë','Ì','Í','Î','Ï','Ð','Ñ','Ò','Ó','Ô','Õ','Ö','Ø','Ù','Ú','Û','Ü','Ý','Þ','ß','à','á','â','ã','ä','å','æ','ç','è','é','ê','ë','ì','í','î','ï','ð','ñ','ò','ó','ô','õ','ö','ø','ù','ú','û','ý','ý','þ','ÿ'); $noaccents= array('A','A','A','A','A','A','A','C','E','E','E','E','I','I','I','I','D','N','O','O','O','O','O','O','U','U','U','U','Y','b','s','a','a','a','a','a','a','a','c','e','e','e','e','i','i','i','i','d','n','o','o','o','o','o','o','u','u','u','y','y','b','y'); $i=0; foreach($accents as $a) $string = str_replace($a,$noaccents[$i++],$string); return strtolower($string); } }
Si vous êtes intéressez par mon Filtre plus puissant, faites le moi savoir je le mettrais à dispo.
PS: pour la méthode alphaize(), j'ai utilisé un vieux foreach à la place d'un strtr() car ca piné chez moi pas moyen de trouver pourquoi...
Hors ligne
protected function alphaize($string) { $accents = array('À','Á','Â','Ã','Ä','Å','Æ','Ç','È','É','Ê','Ë','Ì','Í','Î','Ï','Ð','Ñ','Ò','Ó','Ô','Õ','Ö','Ø','Ù','Ú','Û','Ü','Ý','Þ','ß','à','á','â','ã','ä','å','æ','ç','è','é','ê','ë','ì','í','î','ï','ð','ñ','ò','ó','ô','õ','ö','ø','ù','ú','û','ý','ý','þ','ÿ'); $noaccents= array('A','A','A','A','A','A','A','C','E','E','E','E','I','I','I','I','D','N','O','O','O','O','O','O','U','U','U','U','Y','b','s','a','a','a','a','a','a','a','c','e','e','e','e','i','i','i','i','d','n','o','o','o','o','o','o','u','u','u','y','y','b','y'); $i=0; foreach($accents as $a) $string = str_replace($a,$noaccents[$i++],$string); return strtolower($string); }
pourquoi ne l'écris tu pas :
protected function alphaize($string) { $accents = array('À','Á','Â','Ã','Ä','Å','Æ','Ç','È','É','Ê','Ë','Ì','Í','Î','Ï','Ð','Ñ','Ò','Ó','Ô','Õ','Ö','Ø','Ù','Ú','Û','Ü','Ý','Þ','ß','à','á','â','ã','ä','å','æ','ç','è','é','ê','ë','ì','í','î','ï','ð','ñ','ò','ó','ô','õ','ö','ø','ù','ú','û','ý','ý','þ','ÿ'); $noaccents= array('A','A','A','A','A','A','A','C','E','E','E','E','I','I','I','I','D','N','O','O','O','O','O','O','U','U','U','U','Y','b','s','a','a','a','a','a','a','a','c','e','e','e','e','i','i','i','i','d','n','o','o','o','o','o','o','u','u','u','y','y','b','y'); $i=0; $string = str_replace($accent,$noaccents,$string); return strtolower($string); }
Hors ligne
Y a beaucoup plus performant que le foreach ou le str_replace pour ce genre de chose.
protected function alphaize($string) { $accents = array('À','Á','Â','Ã','Ä','Å','Æ','Ç','È','É','Ê','Ë','Ì','Í','Î','Ï','Ð','Ñ','Ò','Ó','Ô','Õ','Ö','Ø','Ù','Ú','Û','Ü','Ý','Þ','ß','à','á','â','ã','ä','å','æ','ç','è','é','ê','ë','ì','í','î','ï','ð','ñ','ò','ó','ô','õ','ö','ø','ù','ú','û','ý','ý','þ','ÿ'); $noaccents= array('A','A','A','A','A','A','A','C','E','E','E','E','I','I','I','I','D','N','O','O','O','O','O','O','U','U','U','U','Y','b','s','a','a','a','a','a','a','a','c','e','e','e','e','i','i','i','i','d','n','o','o','o','o','o','o','u','u','u','y','y','b','y'); $string = strtr($string, $accent, $noaccents); return strtolower($string); }
Hors ligne
Je voudrais bien aussi utiliser la réecriture d'url pour mes menu, car c'est pas tres propore http://www.monsite/catalog/view/cat/1
Mai sje comprends pas trop comment ca marche tout ca, et j'ai pas trouvé de tutorial en francais.
Est ce que c'est possible de connaitre le deroulement de tous ca SVP ?
Hors ligne
Poruquoi je n'avais pas utliser strtr()??
Et bien parce que comme je l'ai dis plus au haut j'avais copié un bout de code utilisant strtr() et je ne sais vraiment pas pourquoi mais ça marchais pas sur le serveur de mon boulot (wamp)!!!
Je vais testé ça à l'occasion.
@alien7: si tu est capable de faire de la réécriture en htacces, tu sera capable de réécrire avec le Zend_Controller_Router_Route_Regex... Un peu de bonne volonté et d'assiduité te permettrons de faire ce que tu souhaites à l'aide de ce lien:
http://framework.zend.com/manual/fr/zen … utes.regex
Hors ligne
Pour strtr, contrairement a ce que j'ai copier coller a l'arache, il ne faut pas mettre de tableau en 2 et 3eme argument mais des strings.... Cf la doc...
Hors ligne
Mais est ce qu'il y a moyen de mettre un eurl de ce genre :
http://monsite.fr/catalog/jeux-video
Faire un sorte d'action dynamique sans avoir à ecrire l'action.
J'ai un menu issi d'une SGBD mais que je mets en cache aussi.
Donc est ce que la réecriture d'url convient pour ca ?
Merci
Hors ligne
Je dirais "Parfaitement". Par contre je ne vois pas ce que viens faire ton menu dans l'histoire...
Si tu utilise plusieurs actions à la suite pour générer tes pages, je te conseille de chercher l'helper actionStack (j'en ai entendu parler vite fait, ça serait un action helper permetant "d'empiler" des actions).
Grâce au routeur, tu peux vraiment être libre dans ce que tu veux faire.
Perso je bosse sur un site immobilier, et j'ai des urls du genre
http://monsite.com/immobilier/toulouse/achat/jolie-maison-calme_D54F1.html
Pourtant je n'ai pas de controller 'immobilier' encore moins une action 'toulouse' ou 'achat'...
Par contre j'ai un controller 'Listing' avec une action 'annonce'. J'ai utilisé des regex comme pour l'url rewrting conventionnel au niveau du routeur.
Hors ligne
Ok j'ai bien assimilée l'url rewrite, mais je réflechi toujours à comment faire pour mes menus.
Je souhaite obtenir le meme resultat que www.priceminister.com :
http://www.priceminister.com/jeux-video
Ca peut marcher si j'ecris un à un pour chaque menu une régle mais ca serait vraiment long à les écrires.
J'aurai du crée un nouveau topic peut étre ...
Hors ligne
Pas bête, je pige pas le problème.
Ah ben en fait si. Le truc c'est qu'il ne doivent avoir qu'un "niveau" (un "dossier" défini par pas de "/" dans l'url.
Donc quand y'a pas de / dans l'url on sait que c'est une catégorie, on la traite donc et on regarde si dans toutes les categories (nom stocké en base ça en fait pas des masses quand même...) si y'a pas un nom qui correspond à l'"urlization du nom (stocké en base ou calculé en directe) via select puis boucle.
Et si oui, on sait ou l'on est. Donc voilà c'est fini.
Les autres cas même principes sauf que pas le même "niveau" c'est donc différentiable par des url rewrités et en enlevant les routes par défault (:controller/:action/*)
Hors ligne
Docn si j'ai bien compris je récupère la valeur de l'url en exemple :
http://domaine.com/catalog/jeux-video
[router] routes.catalog.type = "Zend_Controller_Router_Route_Regex" routes.catalog.route = "catalog/(\d+)" routes.catalog.defaults.controller = "catalog" routes.catalog.defaults.action = "view" routes.archive.map.1 = "label"
Je récupère jeux-video, je fais une boucle pour voir si il existe dans ma base. Si il exitse je récupère son id.
Ca sera pas un peu lourd comme traitement ?
Vous en pensez quoi ?
Sinon je garde http://domaine.com/catalog/view/id/1
Hors ligne
Ben tu peux toujours juste faire:
http://domaine.com/catalog/view/id/jeux-video_1
C'est toujours ça de gagner en référencement.
Sinon, tu peux charger tes catégories pout ton menu en cache si tu as peur mais je ne pense pas que si tu a dans la dizaine de catégories ça soit "lourd"...
Hors ligne
Oui mes menus sont deja en cache. Je vais essayer cette méthode sinon comme tu as dis je ferais avec http://domaine.com/catalog/view/id/jeux-video_1
Merci Mr.MoOx pour ton aide précieuse, j'ai appris pas mal avec tous ca et surtout l'utilisation du routeur.
Merci ++
Edit : desolé d'avoir squatté le post
Dernière modification par alien7 (14-01-2008 00:22:42)
Hors ligne
Bon pour rajouter une couche, cet article est vraiment intéressant. L'auteur propose 4 façons de traiter des Urls style SEO www.exemplesiteimmo.com/achat-maison-enruine-456.
ça vaut le détoure.
a++
Edit :
- Merci Mr.MoOx pour m'avoir aguillé sur Zend_Controller_Router_Route_Regex c'est exactement ce que je cherchais
- Pour ceux, qui comme moi, ne maîtrise pas tout à fait les expressions régulières, http://www.expreg.com/ explique très bien comment construire des motifs.
Dernière modification par Roulio (14-01-2008 19:36:36)
Hors ligne