Quand utiliser charger_filtre() ?

Bonjour,

Lors du développement de mes plugins, je suis souvent amené à faire un include_spip('inc/filtres') dans mes fonctions PHP pour pouvoir utiliser certaines fonctions (ex. info_plugin, extraire_multi, entites_html, table_valeur, timestamp)

Je me demande si à chaque fois que j’utilise une fonction présente dans le fichier filtres.php je dois passer par la méthode :

include_spip('inc/filtres');
$fonction = charger_filtre('nom_de_la_fonction'); // charge la fonction
$fonction('argument1','argument2','etc...'); // exécute la fonction

Car par exemple dans le pipeline insert_head_css j’havais l’habitude de faire :

function mon_plugin_insert_head_css($flux) {
	include_spip('inc/filtres');

	// ajoute les CSS
	$flux .= '<link rel="stylesheet" href="'.timestamp('mon_plugin.css').'">'."\n";

	return $flux;
}

Mais ne faudrait pas plutôt que je fasse :

function mon_plugin_insert_head_css($flux) {
	include_spip('inc/filtres');

	$timestamp = charger_filtre('timestamp');

	// ajoute les CSS
	$flux .= '<link rel="stylesheet" href="'.$timestamp('mon_plugin.css').'">'."\n";

	return $flux;
}

Bref, un peu perdu sur la bonne méthodologie à adopter… Merci de votre aide !

D’ailleurs je suis en train de me poser la question si un require_spip('inc/filtres') ne serait pas plus approprié que le include_spip ?

Si mes souvenirs sont bons, charger_filtre() est utile quand tu souhaites utiliser un filtre qui ne serait pas forcément disponible (typiquement un filtre fourni par un plugin qui pourrait ne pas être actif). Voir le PHPdoc de la fonction https://git.spip.net/spip/spip/src/commit/c36fb5c7792f709434aa9377ccfc8280801a0b9b/ecrire/inc/filtres.php#L33

PS : je ne pense pas que tu aies besoin d’utiliser timestamp dans ton cas car SPIP l’applique automatiquement dès que la compression JS/CSS est active.

charger_filtre est utile si tu prévois de surcharger le filtre puisque pour un argument F, ça « retourne la première fonction trouvée parmis : filtre_F, filtre_F_dist et F »; et ça permet qu’aucune ne soit définie comme l’écrit b_b. Mais c’est inutile dans le cas contraire.

À noter qu’n cas d’absence du fichier inclu, require_spip tue le process et affiche un message d’erreur avec phpstack complète, quelles que soient le paramétrage de l’affichage des erreur de PHP. C’est pas forcément ce qu’on veut en production.