Page 1 sur 1
comment passé un paramètre avec le système derouting
Posté : 21 nov. 2012, 12:05
par juliette
Salut a tous,
j'ai voulu installer un système de routing, chose que j'ai réussi mais voila: désormais il m'est impossible de passer un paramètre supplémentaire pour une page de pagination par exemple...
j'ai l'impression que cela viens du htaccess:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^index\.html$ index.php?page=/
RewriteRule ^([a-zA-Z0-9-]*\.html)$ index.php?page=$1
</IfModule>
avant mon url de blog était celle-ci:
index.php?module=2&page=liste-blog et après avoir cliquez un lien de pagination celle-ci:
index.php?module=2&page=liste-blog&id=2
maintenant avec le routing, l'url du blog est celle-ci:
liste-blog.html et impossible de passer un paramètre en plus...
avez vous une petite idée ?
Re: comment passé un paramètre avec le système derouting
Posté : 21 nov. 2012, 12:41
par juliette
le var_dump de la classe routing pour la page blog est donne ca:
array (size=3)
'name' => string 'liste-blog' (length=10)
'path' => string 'liste-blog.html' (length=15)
'template' => string 'modules/blog/vues/liste-blog.php' (length=32)
ne manque t'il pas la possibilité d'avoir un perem pour la pagination en plus...
ou bien d'apres vous, est il possible d' passer un param par le path: 'path' => string 'liste-blog.html' (length=15) ?
Re: comment passé un paramètre avec le système derouting
Posté : 21 nov. 2012, 13:19
par Saian
Comment écris-tu le lien de pagination ?
Re: comment passé un paramètre avec le système derouting
Posté : 21 nov. 2012, 15:28
par nhachet
Juste pour info (je n'ai aps bcp de temps), voici le .htacces de CakePHP :
Code : Tout sélectionner
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
</IfModule>
Re: comment passé un paramètre avec le système derouting
Posté : 21 nov. 2012, 15:38
par juliette
Salut Saian,
le lien est en fait un objet de pagination et le voile comme il était avant:
$cat->Show_Pagination("index.php?module=$id&page=$nom_page", $param_url, 'pagination');
Re: comment passé un paramètre avec le système derouting
Posté : 21 nov. 2012, 15:41
par Saian
Salut juliette,
ok et le lien en résultant dans le code html il est comment ?
J'ai bien une idée mais je pense quelle n'est pas parfaite. Tu pourrais générer un lien de pagination type blog-list-numero_page.html ou numero_page est le numéro de la page.
Mais du coup avant d'injecter page dans ton système de routage il faut que tu en extrais les paramètres supplémentaires, en l’occurrence le numéro de la page. Et tu vas avoir du mal vu que tes noms de pages contiennent des -.
Tu pourrais tout de même faire style blog-list--2.html et faire un explode sur --, tu aurais ainsi la page en 0 et les paramètres supplémentaires en 1.
Re: comment passé un paramètre avec le système derouting
Posté : 21 nov. 2012, 15:53
par juliette
Bon, j'ai trouver, avec le htaccess de nhachet que j'ai modifie comme ceci:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([a-zA-Z0-9-]*\.html)$ index.php?page=$1 [QSA,L]
</IfModule>
et ta question sur la pagination Saian, je me suis rendu compte qu'avant il me fallait 2 param, $module et $page mais maintenant il ne me faut que $page et du coup ma classe pagination ajouter un $ au lieu de 1 ?
pour le coup cela me pose un nouveau souci, l'url est comme ceci: WSU-MVC/liste-blog.html?id=2 avec le .html, dois-je une nouvelle fois réécrire l'url dans le htaccess car j'ai déjà chercher mais je n'ai pas réussi a transformer le .html en .php dans les routing mais rien a faire...
Re: comment passé un paramètre avec le système derouting
Posté : 21 nov. 2012, 15:58
par juliette
Saian, c'est compliqué pour moi a mon niveau ce que tu dis, ne serait t'il pas plutôt pas plus judicieux pour la facilité de transformer ce .html en .php et ajouter une nouvelle réglé au htaccess ?
Re: comment passé un paramètre avec le système derouting
Posté : 21 nov. 2012, 16:01
par Saian
Dans le htaccess les RewriteRule sont écrites avec des expressions régulières.
Avec :
RewriteRule ^([a-zA-Z0-9-]*\.html)$ INDEX.php?page=$1
page va être égale à tout ce que contient ta première parenthèse capturante donc "blog-list.hmtl" $1 faisant référence à ([a-zA-Z0-9-]*\.html).
Si tu veux retrouver id=2 tu vas le récupérer dans $_GET['id'].
D'ailleurs ta réécriture ne doit pas fonctionner avec blog-list.hmtl?id=2 car tu as mit un $ à la fin de la réécriture ce qui veut dire que l'adresse doit finir par .html et comme ça n'est pas le cas... mais je sais pas si le ? et ce qui est derrière est prit en compte lors du matching de la règle.
Re: comment passé un paramètre avec le système derouting
Posté : 21 nov. 2012, 16:06
par juliette
non, c'est pas ce que je veux dire...
Je parle des routes:
// Modules BLOG
$app->initRoute("liste-blog", "liste-blog.html", "modules/blog/vues/liste-blog.php");
c'est dans le 2eme paramètre de la route que je ne peut pas passer le liste-blog.php a la place de liste-blog.html et c'est celuila que je voudrais modifier pour avoir:
Re: comment passé un paramètre avec le système derouting
Posté : 21 nov. 2012, 16:14
par juliette
Je reviens sur mes dire, c'est bon je peux bien passer le .php dans mes routes, en fait je n'avais pas réussi d’abord a cause du htaccess et en plus a couse de la pagination que ne retournais pas le bon caractère...
Cool, un grand merci a vous deux =D> vos réponses m'ont fait me poser les bonnes questions sur un truc qui ma fait me coucher a 4h du matin et j'était presque sur le point de revenir a mes routes php 1.4 et moins
Je vous dis merci et a très bientôt pour de nouvelles aventures, j'en suis sur !!!