diff --git a/ecrire/inc/filtres.php b/ecrire/inc/filtres.php index 7bda63ff65d4b371bec6fbca8981ec2ae3e8c14c..c1749735fe08b144ae525cb773933dcd31ae46f4 100644 --- a/ecrire/inc/filtres.php +++ b/ecrire/inc/filtres.php @@ -1699,6 +1699,14 @@ function filtre_end($array) { return filtre_valeur_tableau($array,@count($array)-1); } +function filtre_push($array, $val) { + if($array == '' OR !array_push($array, $val)) return ''; + return $array; +} + +function filtre_find($array, $val) { + return ($array != '' AND in_array($val, $array)); +} // // fonction standard de calcul de la balise #PAGINATION @@ -2150,11 +2158,12 @@ function http_style_background($img, $att='') // http://doc.spip.org/@filtre_foreach_dist function filtre_foreach_dist($balise_deserializee, $modele = 'foreach') { $texte = ''; - foreach($balise_deserializee as $k => $v) - $texte .= recuperer_fond( - 'modeles/'.$modele, - array('cle' => $k, 'valeur' => $v) - ); + if(is_array($balise_deserializee)) + foreach($balise_deserializee as $k => $v) + $texte .= recuperer_fond( + 'modeles/'.$modele, + array_merge(array('cle' => $k), (is_array($v) ? $v : array('valeur' => $v))) + ); return $texte; } diff --git a/ecrire/public/balises.php b/ecrire/public/balises.php index 36098d0fa49cb0adf9c72ed3b4b438d07d4e1e53..02ac2f4e2a13ccd5549240d59f504f1bee55bc0c 100644 --- a/ecrire/public/balises.php +++ b/ecrire/public/balises.php @@ -997,7 +997,7 @@ function balise_ENV_dist($p, $src = NULL) { if (!$_nom) { // cas de #ENV sans argument : on retourne le serialize() du tableau // une belle fonction [(#ENV|affiche_env)] serait pratique - $p->code = '($a = ('.$src.') ? serialize($a) : "")'; + $p->code = '(is_array($a = ('.$src.')) ? serialize($a) : "")'; } else { // admet deux arguments : nom de variable, valeur par defaut si vide $p->code = 'is_array($a = ('.$src.')) ? $a['.$_nom.'] : ""'; @@ -1383,14 +1383,14 @@ function balise_FOREACH_dist($p) { $_modele = interprete_argument_balise(2,$p); $_modele = str_replace("'", "", strtolower($_modele)); $__modele = 'foreach_'.strtolower($_tableau); - $_modele = (!$_modele AND ($f = find_in_path('modeles/'.$__modele.'.html'))) ? $__modele : ($_modele ? $_modele : 'foreach'); + $_modele = (!$_modele AND find_in_path('modeles/'.$__modele.'.html')) ? + $__modele : + ($_modele ? $_modele : 'foreach'); $p->param = @array_shift(@array_shift($p->param)); $p = $balise($p); - //retirer le serialize - $p->code = preg_replace(',serialize\((.*)\),', '\1', $p->code); $filtre = chercher_filtre('foreach'); - $p->code = $filtre . "(" . $p->code . ", '" . $_modele . "')"; + $p->code = $filtre . "(unserialize(" . $p->code . "), '" . $_modele . "')"; } //On a pas trouve la balise correspondant au tableau a traiter else {