Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Oki. On commence à s'approcher du bout...
Pour le %d et %s, avez vous un lien à me donner pour connaître la liste exhaustive des autres possibilités ?
J'ai regardé du coté des regex mais je n'ai rien trouvé sur le %*
Petit chose aussi, lorsque j'utilise le helper url il me donne des liens du type full-1-mon+titre au lieu de full-1-mon-titre. Avez vous une explication ?
Sinon, il me reste à savoir comment enlever les variables :language et :sport de la définition de ma route.
Je vous remercie encore pour toute votre aide.
Hors ligne
bonjour,
regarde du coté de la doc php.net et la fonction sprintf, il y a tous les paramètres dispo
Hors ligne
Oki. Merci pour la doc. C'est exactement ce que je voulais.
Sinon, comment réussir à enlever les deux variables :language et :sport de ma route?
Hors ligne
Petit up pour mon dernier problème...
Hors ligne
Bonsoir,
je suis d'accord à 100% avec slaughter : n'y a t il pas un moyen plus générique que de se taper les routes manuellement dans un fichier de config ou pire, dans le code?
Comme j'utilise des modules, j'ai donc pensé à faire une boucle pour rajouter des routes automatiquement dans le routeur.
Du style :
boucle 1 : sur les modules
boucle 2 : sur les controller du module
boucle 3 : sur les actions du controller (si cela est possible?!)
$this->addRoute(
moduleNom,
new Zend_Controller_Router_Route(
'',
array(
'controller' => controllerNom,
'action' => actionNom
)
)
);
Je vais essayer et je vous tiens au courant
Yoong
Hors ligne
petit Up.
Je n'y suis toujours pas. Je n'arrive pas à retirer la valeur en dure de :language et :sport dans ma route.
Avez vous une piste?
Hors ligne
Bonjour à tous,
dernier up. J'ai vraiment besoin d'avoir la solution et donc j'insiste un peu (beaucoup ?).
Ma route ressemble pour l'instant à ceci :
routes.news.route = "fr/sport1/news/view/full\-(\d+)\-(.+).html"
et je voudrais qu'elle ressemble à ça :
routes.news.route = ":language/:sport/news/view/full\-(\d+)\-(.+).html"
Evidemment ce code ne marche pas. Quelle est la solution ?
Hors ligne
Bonjour,
Je te donne une syntaxe sans fichier de conf, mais le principe est là et ça va plus vite pour le copier/coller de mon code :
$router->addRoute( "news", new Zend_Controller_Router_Route_Regex( '(\w+)/(\w+)/news/view/full\-(\d+)\-(.+).html', array( 'controller' => 'index', 'action' => 'news' ), array( 1 => 'language', 2 => 'sport', 3 => 'id', 4 => 'titre' ) ) );
\w permet détecter les caractères [0-9a-zA-Z].
Je n'ai pas essayé la route, il y a peut-être une erreur de syntaxe, mais le principe est là.
A+, Philippe
Hors ligne
Oki. Merci, je comprends mieux la logique.
Par contre pour le reverse, si je fait ceci => "%s/%s/news/view/full-%d-%s.html", j'ai un beau :
Fatal error: Uncaught exception 'Zend_Controller_Router_Exception' with message 'Cannot assemble. Too few arguments?'
Je n'arrive pas à savoir d'où cela vient.
Hors ligne
Il peut également être intéressant de limiter la taille des url. Pas forcément pour le référencement mais pour ne pas perturber les utilisateurs.
J'ai rédigé un billet sur le sujet si ça vous intéresse:
Url+referencement
Hors ligne
Merci pour le lien maniT4c.
Je viens de voir une éventuelle cause de mon problème.
Voici mon fichier de configuration des routes:
routes.news.route = ":language/:sport/:module/:controller/:action/*" routes.news.type = "Zend_Controller_Router_Route_Regex" routes.news.route = "(\w+)/(\w+)/news/view/full\-(\d+)\-(.+).html" routes.news.defaults.module = "news" routes.news.defaults.controller = "view" routes.news.defaults.action = "full" routes.news.map.1 = "language" routes.news.map.2 = "sport" routes.news.map.3 = "id" routes.news.map.4 = "titre" routes.news.reverse = "%s/%s/news/view/full-%d-%s.html"
et voici l'utilisation de la fonction url :
<a href="<?php echo $this->url(array('language' => 'fr', 'sport' => 'sport1', 'id' => $news->news_id,'titre' => $news->news_title), 'news') ?>">lien</a>
Ce lien marche parfaitement mais comme vous le voyez, je suis obligé de mettre en dure la valeur des paramètres language et sport. Je voudrais ne pas mettre la valeur de ces variables et que le controller comprenne qu'il faut donc mettre les valeurs présentes sur la page actuelle, exactement sur le même principe que le lien de changement de langue qui ressemble juste à ceci :
$this->url(array('language'=>'en'));
Dans ce cas, on arrive sur la même page avec seulement la variable language qui change.
Comment récupérer ce fonctionnement lorsque l'on utilisa la fonction url avec une route définie ?
Hors ligne
petit up
Hors ligne
Salut,
Moi j'ai fait un plugin pour gérer les langues et il rajoute une variable contenant la valeur de la langue sélectionnée à la vue... C'est peut être une solution.
Mais si je poste ici c'est parce que j'ai un êtit problème avec l'écriture des routes dans mon fichier config.
J'utilise un fichier xml et je voudrais creer une route Zend_Controller_Router_Route_Regex.
Par exemple Julien a donné l'exemple suivant pour un config.ini
auteurs.type = "Zend_Controller_Router_Route_Regex"
auteurs.route = "auteurs/edit\-(\d+)\-(.+)"
auteurs.defaults.controller = auteurs
auteurs.defaults.action = edit
auteurs.map.1 = id
Quelle est la syntaxe pour traduire le map pour un fichier config.xml ?
J'ai pensé à ça mais... ça ne fonctionne pas
<auteurs route="auteurs/edit\-(\d+)\-(.+)"> <type>Zend_Controller_Router_Route_Regex</type> <defaults> <controller>auteurs</controller> <action>edit</action> </defaults> <map> <array id="1">id</array> </map> </newsedition>
Quelqu'un peut-il m'aider ?
Hors ligne
Bonsoir,
Mon helper url ne m'encode pas l'url, je ne comprends pas, si je le fais manuellement ca marche. Pourtant par defaut il est à true.
<a href="/<?= $this->url(array( 'cat' => 5, 'id' => 6, 'title' => "héllo world" ), 'catalogSM'); ?>">Liens </a>
Le route :
routes.news.type = "Zend_Controller_Router_Route_Regex" routes.news.route = "news/(\d+)-(\d+)-(.+).html" routes.news.defaults.controller = "news" routes.news.defaults.action = "index" routes.news.map.1 = "cat" routes.news.map.2 = "id" routes.news.map.3 = "title" routes.news.reverse = "news/%d-%d-%s.html"
Merci d'avance
Dernière modification par alien7 (26-09-2008 10:10:20)
Hors ligne
alien7 a écrit:
Le route :
Code:
routes.newscatal.type = "Zend_Controller_Router_Route_Regex" routes.news.route = "news/(\d+)-(\d+)-(.+).html" routes.news.defaults.controller = "news" routes.news.defaults.action = "index" routes.news.map.1 = "cat" routes.news.map.2 = "id" routes.news.map.3 = "title" routes.news.reverse = "news/%d-%d-%s.html"Merci d'avance
Pourquoi "newscatal" dans la première ligne?
Hors ligne
Erreur de copie seulement.
pozowebs ->
As tu résolu ton pronlème ? As tu lu ce topic, ca pourrait peut etre t'aider.
J'en suis à cette partie aussi donc donc je ne connais pa strop le sujet
Dernière modification par alien7 (26-09-2008 10:13:43)
Hors ligne
alien7 a écrit:
Erreur de copie seulement.
pozowebs ->
As tu résolu ton pronlème ? As tu lu ce topic, ca pourrait peut etre t'aider.
J'en suis à cette partie aussi donc donc je ne connais pa strop le sujet
oui merci, problème résolu, grâce à ce topic! J'ai presque le même code que celui que tu utilises ici donc je me suis dit que ça doit marcher, et j'ai vérifié et trouvé une stupide erreur de syntaxe (un ') qui se baladait... ouf... .
Mon helper url ne me pose pas de pb. J'ai le fonctionnement suivant, je ne sais pas si c'est le fonctionnement correct mais cela me convient ...
=> Sur les pages dont l'url est encodée, l'helper crée les liens encodés sans que je ne lui demande rien (exemple, le paginator me crée les jolis liens directement)
=> Sur les autre pages (exemple page d'accueil), j'ajoute le nom de la route à utiliser dans l'helper pour qu'il m'encode l'url.
Hors ligne
Alors là je ne comprends pas, mon helper ne veut pas m'encoder mes urls, bizarre. J'uitlise ZF 1.6.1. J'ai manqué une étape peut être...
Hors ligne