Une inclusion reçoit un argument ‹ champ › dans son environnement, qui contient le nom d’un champ d’un objet.
Cette inclusion fait une boucle simple sur ces objets.
Je me sens démuni : quel est le/le meilleur/ moyen pour, à l’intérieur de cette boucle, accéder à la valeur de ce champ pour l’objet courant ?
#CHAMP_SQL
#CHAMP_SQL - SPIP est sympa mais « c’est obligatoirement une constante qui doit servir de paramètre ».
Bon je vais faire autrement… mais la question demeure, à titre d’énigme (voire de jeu… si ya amateur)
Ça m’a questionné, et y a pas de solution sans réécrire la balise #INFO_
<BOUCLE_a(ARTICLES){par hasard}{0,1}>
id: #ID_ARTICLE<br />
titre: #TITRE<br />
info #ENV{champ}: #INFO_CHAMP{article,#ID_ARTICLE,#ENV{champ}}<br />
<hr />
</BOUCLE_a>
function balise_INFO_CHAMP($p) {
$type_objet = interprete_argument_balise(1, $p);
$id_objet = interprete_argument_balise(2, $p);
$champ = interprete_argument_balise(3, $p);
if (!$type_objet || !$id_objet || !$champ) {
$msg = _T('zbug_balise_sans_argument', ['balise' => ' ' . zbug_presenter_champ($p)]);
erreur_squelette($msg, $p);
$p->interdire_scripts = true;
return $p;
}
$_params = '[';
$nb_params = is_countable($p->param[0]) ? count($p->param[0]) : 0; // 1ère valeur vide donc 1 en plus
for ($i = 4; $i < $nb_params; $i++) {
$_params .= interprete_argument_balise($i, $p) . ',';
}
$_params .= ']';
$p->code = "generer_objet_info($id_objet, $type_objet, $champ, " . ($p->etoile ? _q($p->etoile) : "''") . ", $_params)";
$p->interdire_scripts = true;
return $p;
}
À noter donc que ça crée une requête SQL en plus à utiliser ce #INFO_CHAMP
(tout comme #INFO_xx
)
1 « J'aime »
Woaow, bravo Mathieu !