Lorsqu’un visiteur du site demande à voir une page, qu’elle soit déjà en cache ou non, SPIP exécute un certain nombre d’actions, dont celles de charger des fichiers d’options. Ces options peuvent par exemple définir des constantes ou modifier des variables globales.
Ces options peuvent être créées
- dans le fichier
config/mes_options.php
d’un site,
- ou dans un plugin, dans le fichier
prefixePlugin_options.php
.
Tous les fichiers d’options (celui du site, puis de tous les plugins) sont chargés à chaque appel de l’espace public et de l’espace privé ; ils doivent donc être les plus légers et économes possible.
Après ajout ou modification d’un fichier d’options, il faut passer sur la page d’administration des plugins pour que SPIP prenne en compte la nouvelle version.
{{{Remarque}}}
Les chargements des fichiers d’options suivent les dépendances des plugins (les plugins qui dépendent d’un autre sont chargés après). Si un plugin déclare une constante dans un fichier d’option, un plugin qui en dépend ne pourra pas redéclarer cette constante. Pour éviter les avertissements PHP, il est possible de tester sa définition avant :
defined('_UNE_CONSTANTE') or define ('_UNE_CONSTANTE', 'une valeur');
Exemple
Cet exemple, issu d’une contribution nommée « switcher », propose de modifier le jeu de squelettes utilisé par le site (l’adresse du dossier plus précisément) en fonction d’un paramètre
var_skel
dans l’url.
<?php
// 'nom' => 'chemin du squelette'
$squelettes = array(
'2008'=>'squelettes/2008',
'2007'=>'squelettes/2007',
);
// Si l'on demande un squelette particulier qui existe, on pose un cookie, sinon suppression du cookie
if (isset($_GET['var_skel'])) {
if (isset($squelettes[$_GET['var_skel']]))
setcookie('spip_skel', $_COOKIE['spip_skel'] = $_GET['var_skel'], NULL, '/');
else
setcookie('spip_skel', $_COOKIE['spip_skel'] = '', -24*3600, '/');
}
// Si un squelette particulier est sauve, on le definit comme dossier squelettes
if (isset($_COOKIE['spip_skel']) AND isset($squelettes[$_COOKIE['spip_skel']]))
$GLOBALS['dossier_squelettes'] = $squelettes[$_COOKIE['spip_skel']];
?>