developer.jelix.org is not used any more and exists only for history. Post new tickets on the Github account.
developer.jelix.org n'est plus utilisée, et existe uniquement pour son historique. Postez les nouveaux tickets sur le compte github.

Opened 10 years ago

Closed 10 years ago

#1109 closed bug (fixed)

url significant engine should encode parameters into the pathinfo

Reported by: hadrien Owned by:
Priority: normal Milestone: Jelix 1.1.7
Component: jelix:plugins:tpl Version: 1.1.6
Severity: normal Keywords:
Cc: Blocked By:
Blocking: Documentation needed: no
Hosting Provider: Php version:

Description

Dans mon template :

{urljsstring 'admin~marketplace:get',
	array(),
	array(
	'universe'	=> 'universe',
	'page'		=> 'page'
)}{literal}

Avec url simple :

"/index.php?universe="+encodeURIComponent(universe)+"&page="+encodeURIComponent(page)+"&module=admin&action=marketplace:get"

Nice.

Avec url significant :

"/marketplace/get/__@@universe@@__/__@@page@@__"

Fail.

Je suppose qu'il faudrait rajouter un .replace(/_@@universe@@_/,universe).replace(/_@@page@@_/,page); après la chaine…

Change History (5)

comment:1 Changed 10 years ago by hadrien

En virant urlencode, ça fonctionne :

index 5fb7f91..05f2afd 100644
--- a/lib/jelix/plugins/tpl/html/function.urljsstring.php
+++ b/lib/jelix/plugins/tpl/html/function.urljsstring.php
@@ -26,7 +26,7 @@ function jtpl_function_html_urljsstring($tpl, $selector, $params=array(), $jspar
     $repl =array();
     foreach($jsparams as $par=>$var){
         $params[$par] = '__@@'.$var.'@@__';
-        $search[] = urlencode($params[$par]);
+        $search[] = $params[$par];
         $repl[] = '"+encodeURIComponent('.$var.')+"';
     }

Mais ça ne fonctionne plus en url simple évidemment…

comment:2 Changed 10 years ago by hadrien

Et voilà une idée de patch qui fonctionne dans les deux cas :

--- a/lib/jelix/plugins/tpl/html/function.urljsstring.php
+++ b/lib/jelix/plugins/tpl/html/function.urljsstring.php
@@ -25,7 +25,7 @@ function jtpl_function_html_urljsstring($tpl, $selector, $params=array(), $jspar
     $search = array();
     $repl =array();
     foreach($jsparams as $par=>$var){
-        $params[$par] = '__@@'.$var.'@@__';
+        $params[$par] = '_-_-_-'.$var.'-_-_-_';
         $search[] = urlencode($params[$par]);
         $repl[] = '"+encodeURIComponent('.$var.')+"';
     }

L'idée c'est d'utiliser des caractères qui ne changent pas lors d'un urlencode comme délimiteurs.

comment:3 Changed 10 years ago by hadrien

  • review set to review?

comment:4 Changed 10 years ago by laurentj

  • Component changed from jelix to jelix:plugins:tpl
  • Milestone set to Jelix 1.1.7

comment:5 Changed 10 years ago by laurentj

  • Resolution set to fixed
  • review changed from review? to review-
  • Status changed from new to closed
  • Summary changed from urljsstring et url significant to url significant engine should encode parameters into the pathinfo

Le problème n'est pas là, et est plus profond que ça : c'est le moteur significant qui n'urlencode pas les paramètres dans le pathinfo, alors qu'il devrait ;-)

fixed

Note: See TracTickets for help on using tickets.