Une balise `#GET_COOKIE` dans un squelette

Comment insérer la valeur d’un cookie provenant de l’internaute au niveau du squelette SPIP.

Exemple avec un fichier balise/get_cookie.php

<?php

use Spip\Compilateur\Noeud\Champ;

/**
 * Compile la balise #GET_COOKIE
 *
 * #GET_COOKIE{nom_du_cookie, defaut}
 *
 * Balise dynamique : jamais figée dans le cache statique, car la valeur
 * dépend du visiteur.
 *
 * @param Champ $p
 *     Pile au niveau de la balise
 * @return Champ
 *     Pile complétée du code compilé
 */
function balise_GET_COOKIE($p) {
	return calculer_balise_dynamique($p, 'GET_COOKIE', []);
}

/**
 * Exécution de la balise dynamique `#GET_COOKIE`
 */
function balise_GET_COOKIE_dyn(string $nom, string $defaut = ''): string {
	$valeur = $_COOKIE[$nom] ?? $defaut;
	if (!is_string($valeur)) {
		$valeur = $defaut;
	}
	return entites_html($valeur);
}


On peut en faire ce type d’usage dans un squelette, pour assigner immédiatement une préférence d’affichage de l’internaute (stockée dans un cookie), par exemple un mode de présentation pour une liste d’items :

<div class="liste-items" data-affichage="#GET_COOKIE{affichage,cards}">
...
</div>

placido

P.-S.

Prudence, car il s’agit d’une balise dynamique dont le code est exécuté à chaque hit PHP ; son utilisation est incompatible avec la plupart des autres filtres ; Elle ne peut pas non plus être passée en argument d’autres balises.