From 4cb74f1e66d5736663a51c274dbb336266bf4299 Mon Sep 17 00:00:00 2001 From: Fil <fil@rezo.net> Date: Fri, 16 May 2008 14:45:42 +0000 Subject: [PATCH] amelioration de form_hidden et de parametre_url en relation avec http://zone.spip.org/trac/spip-zone/browser/_dev_/tests/filtres/form_hidden.html et le souci de Christian reference ici http://forum.spip.org/fr_192043.html et la http://comments.gmane.org/gmane.comp.web.spip.devel/47753 --- ecrire/inc/filtres.php | 32 +++++++++++++++++++++----------- ecrire/inc/utils.php | 9 +++++++-- 2 files changed, 28 insertions(+), 13 deletions(-) diff --git a/ecrire/inc/filtres.php b/ecrire/inc/filtres.php index 4fa736f639..956857eb15 100644 --- a/ecrire/inc/filtres.php +++ b/ecrire/inc/filtres.php @@ -1772,22 +1772,32 @@ function valeur_numerique($expr) { return intval($a); } -// La fonction suivante ne sert plus aujourd'hui qu'aux squelettes des -// balises dynamiques, en attendant une nouvelle conception qui permettra -// d'eviter les redondances de calcul et d'ecriture qu'elle induit. -// Elle fournit la suite de Input-Hidden correspondant aux parametres de -// l'URL donnee en argument. Ce besoin de ne devrait pas apparaitre, -// utiliser plutot generer_form_ecrire. +// Fournit la suite de Input-Hidden correspondant aux parametres de +// l'URL donnee en argument // http://doc.spip.org/@form_hidden function form_hidden($action) { - $hidden = ''; + $hidden = array(); if (false !== ($p = strpos($action, '?'))) foreach(preg_split('/&(amp;)?/S',substr($action,$p+1)) as $c) { - $hidden .= "\n<input name='" . - entites_html(rawurldecode(str_replace('=', "' value='", $c))) . - "' type='hidden' />"; + list($var,$val) = explode('=', $c, 2); + $input = '<input name="' + . entites_html($var) + .'"' + . (is_null($val) + ? '' + : ' value="'.entites_html(rawurldecode($val)).'"' + ) + . ' type="hidden" />'; + + // si c'est une variable de la forme a[]=2, cumuler les input + // sinon ne conserver que le premier + if (preg_match(',\[\]$,S', $var)) + $hidden[] = $input; + else + if (!isset($hidden[$var])) + $hidden[$var] = $input; } - return $hidden; + return join("\n", $hidden); } // http://doc.spip.org/@filtre_bornes_pagination_dist diff --git a/ecrire/inc/utils.php b/ecrire/inc/utils.php index 96d12e2c4a..fe12469e35 100644 --- a/ecrire/inc/utils.php +++ b/ecrire/inc/utils.php @@ -240,6 +240,7 @@ function set_request($var, $val = NULL, $c=false) { // Exemples : [(#SELF|parametre_url{suite,18})] (ajout) // [(#SELF|parametre_url{suite,''})] (supprime) // [(#SELF|parametre_url{suite})] (prend $suite dans la _request) +// [(#SELF|parametre_url{suite[],1})] (tableaux valeurs multiples) // http://doc.spip.org/@parametre_url function parametre_url($url, $c, $v=NULL, $sep='&') { @@ -266,9 +267,13 @@ function parametre_url($url, $c, $v=NULL, $sep='&') { if ($v === NULL) { return $r[2]?substr($r[2],1):''; } - elseif (!$v) {// suppression + // suppression + elseif (!$v) { unset($url[$n]); - } else { + } + // ajout ; dans le cas d'un tableau ne rien faire, dans + // le cas d'une variable nrmale remplacer au meme endroit dans l'url + elseif (substr($r[1],-2) != '[]') { $url[$n] = $r[1].'='.$u; unset($ajouts[$r[1]]); } -- GitLab