Carnet Wiki

Balise #INFO_CHAMP pour accéder à la valeur d’un champ variable

Version 2 — il y a 1 mois JLuc

Comment, dans une boucle, peut on accéder à un champ variable (dont le nom est reçu dans l’environnement) de l’objet courant ?
C’était le sujet de https://discuter.spip.net/t/contour...

C’est un besoin rare, mais pas inimaginable… Or, la balise #CHAMP_SQL, qu’on pourrait penser prévue pour, permet d’accéder à la valeur d’un champ, mais « c’est obligatoirement une constante qui doit servir de paramètre ».

@Marcimat a répondu et proposé cette solution, avec la création d’une balise #INFO_CHAMP :

Exemple d’usage :

<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>

Code de la balise :

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 &lt; $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 le calcul de #INFO_CHAMP nécessite une requête SQL.
(Pour la balise, voir #INFO_xx).

Retour à la version courante

Toutes les versions