Bonjour,
Je travaille pour la première fois avec le filtre foreach (pour ne pas risquer de me compromettre avec la boucle POUR dont on sait qu'elle est dérogatoire), car j'ai besoin de faire un squelette qui boucle sur un tableau.
Ce filtre prend justement en entrée un tableau et se propose de le faire boucler en appelelant itérativement un modèle, selon la méthode officielle SPIP, super en somme.
Sauf qu'on ne peut pas passer de contexte au modèle utilisé !! Ce qui n'est évidement pas pratique dès qu'on fait des itérations un peu sérieuses pour faire des squelettes.
Voici donc une proposition de patch, qui permet d'ajouter un paramètre en plus au filtre |foreach{modele,param=valeur}. Si cela vous parait une bonne piste, je peux essayer d'ajouter plusieurs paramètres, voir carrement {env}.
// http://doc.spip.org/@filtre_foreach_dist
// permettre de passer un parametre pour le contexte du modele avec
foreach{page,param=valeur}
function filtre_foreach($balise_deserializee, $modele = 'foreach',$parametre='') {
$texte = '';
if(is_array($balise_deserializee))
foreach($balise_deserializee as $k => $v) {
$contexte = array_merge(array('cle' => $k), (is_array($v) ? $v : array('valeur' => $v))) ;
$param = preg_split("/=/",$parametre);
if(is_array($param)){
$contexte[$param[0]] = $param[1];
}
$res = recuperer_fond('modeles/'.$modele,$contexte);
$texte .= $res;
}
return $texte;
}
BoOz