Fonction balise_NOM_dyn()

Cette fonction permet d’exécuter les traitements dynamiques à effectuer lorsqu’une balise dynamique est appelée, notamment si un formulaire a été soumis. La fonction peut retourner une chaîne de caractère (qui sera affichée sur la page demandée) ou un tableau de paramètres qui indique le nom du squelette à récupérer et le contexte de compilation.

Les traitements

Pour 2 raisons je n’en parlerai pas :

  • je n’ai toujours pas compris comment ça fonctionne,
  • ce n’est plus très utile depuis que SPIP intègre un mécanisme plus simple appelé « formulaires CVT » (Charger, Vérifier, Traiter) qui s’appuie aussi sur cette fonction, mais de façon transparente.

L’affichage

Ce que retourne la fonction est alors affiché sur la page.
 Si c’est une chaine, elle est renvoyée telle quelle.
 Si c’est un tableau, il indique quel squelette appeler avec quel contexte. Il se présente sous cette forme :

return array("adresse_du_squelette",
	3600, // duree du cache
	array( // contexte
		'id_article' => $id_article,
	)
);

Exemple

balise #MAINTENANT

Création d’une balise dynamique qui affiche l’heure système depuis un squelette, sans mise en cache. Testé en SPIP4.2, marche aussi en 5.0.

Prise en compte des fonctions

<?php
// squelettes/mes_fonctions.php

# ...

include_spip('maintenant');

# ...

Déclaration

<?php
// squelettes/maintenant.php

declare(strict_types=1);

/**
 * balise dynamique MAINTENANT
 */

use Spip\Compilateur\Noeud\Champ;

/**
 * Définition de la balise #MAINTENANT.
 * @param Champ $p
 * @return Champ
 */
function balise_MAINTENANT_dist(Champ $p): Champ {
	return calculer_balise_dynamique(
		$p,
		'MAINTENANT',
		[],
	);
}

/**
 * Partie "statique" de la balise #MAINTENANT.
 *
 * @param array $args
 * @param array $context_compil
 * @return array
 */
function balise_MAINTENANT_stat(array $args, array $context_compil): array {
	$tz = ini_get('date.timezone') ?: 'UTC';

	return [
		// Format
		$args[0] ?? 'Y-m-d H:i:s',
		// Timezone
		$args[1] ?? $tz,
	];
}

/**
 * Partie dynamique de la balise #MAINTENANT.
 * C'est ici qu'on récupère la date système
 * @param string $format
 * @param string $timezone
 * @return string
 */
function balise_MAINTENANT_dyn(string $format, string $timezone): string {
	include_spip('inc/filtres_dates');

	$tz = new \DateTimeZone($timezone);
	$now = new \DateTimeImmutable('now', $tz);

	return is_callable($format)
		? $format($now->format('Y-m-d H:i:s'))
		: $now->format($format);
}

Squelette de test

[(#REM)     fichier squelettes/test.html ]

Usage brut : #MAINTENANT

<hr />

Usage encadré:  [Année courante : <strong>(#MAINTENANT{Y})</strong>]

<hr />

Dans une boucle:

<BOUCLE0(ARTICLES){0,1}>
	#TITRE<br/>
	#MAINTENANT{affdate_court} - #MAINTENANT{affdate,UTC}
</BOUCLE0>

Auteur James, JLuc, Matthieu Marcillaud Publié le : Mis à jour : 22/06/26

Traductions : English, français, Nederlands