Préambule 1 - les paramètres

Pendant longtemps j'ai galéré avec la déclaration des paramètres et surtout leur interrogation. J'avais souvent des erreurs, des warnings, des notices, suivant comment le plugin avait été installé, suivant si la page d'administration avait été visité, voir les paramètres au moins une fois sauvegardés.

Ensuite le deuxième problème que j'ai rencontré c'est le nombre de paramètres, ça devient vite très lourd. Et il faut intervenir à pleins d'endroits différents.

C'est pourquoi je me suis décidé à n'utiliser qu'un seul paramètre, un tableau qu'il suffit de transformer en string et inversement pour le stocker et le lire du système de paramètre de dotclear.

Pour information, l'en-tête de 13 lignes commun à tous les fichiers n'est plus repris maintenant dans ce qui suivra.

Le fichier __params.php

$newParams = array(
	'Ok' => false,
	'DashBoardFavs' => false
	);
?>

J'initialise les paramètres par défaut du plugin à un seul endroit et quoiqu'il se passe par la suite toutes les variables existent et sont conformes à ce qui est attendu ! Bon là il n'y a pas grand chose ici :

  • une variable Ok pour savoir si le plugin est activé ou non
  • une variable DashBoardFavs activant ou non la présence du plugin dans les choix des favoris

Le fichier _install.php

if (!defined('DC_CONTEXT_ADMIN')) { return; }

# Test des versions
$m_version = $core->plugins->moduleInfo('tplPlugin','version');
$i_version = $core->getVersion('tplPlugin');
if (version_compare($i_version,$m_version,'>=')) { return; }

Pour que la suite ne soit exécuté qu'une unique fois, lorsque le numéro de version du plugin contenu dans le dossier est supérieur strictement à celui stocké précédemment dans la base des versions de dotclear.

# si on veut pas écraser les paramètres
require '__params.php';

Comme expliqué précédemment on initialise les paramètres par leur valeur par défaut en un unique endroit dans le fichier __params.php

if (!is_null($core->blog->settings->tplPlugin))
	{
	if (!is_null($core->blog->settings->tplPlugin->tplPlugin_Params))
		{
		$oldParams = unserialize($core->blog->settings->
			tplPlugin->tplPlugin_Params);
	
		foreach($oldParams as $Key => $Val)
			$newParams[$Key] = $Val;
		}
	}

Avec cette boucle si d'anciens paramètres existaient ils sont conservés, même s'ils n'existent plus car non déclaré par défaut dans __params.php.

Pour que seuls les nouveaux paramètres soient récupérés il faudrait changer la boucle foreach par :

		foreach($newParams as $Key => $Val)
			if(array_key_exists($Key,$oldParams))
				$newParams[$Key] = $oldParams[$Key];

Ensuite :

# on tente de créer les paramètres
try
	{
	$core->blog->settings = new dcSettings($core,null);
	$core->blog->settings->addNameSpace('tplPlugin');
	$core->blog->settings->tplPlugin->put('tplPlugin_Params',
		serialize($newParams),'string');
	$core->setVersion('tplPlugin',$m_version);
	return true;
	}
catch (Exception $e)
	{
	$core->error->add($e->getMessage());
	return;
	}
?>

La suite est assez simple création du namespace sauvegarde du seul paramètre tplPlugin_Params. Et en cas de réussite mise à jour de la version du plugin, sinnn message d'erreur.

Et il n'y a rien à faire de plus dans ce fichier, même si vous ajoutez des variables. Bon il vous faudra ajouter du code si vous voulez adapter une variable ou gérer une table sql.

Le fichier _prepend.php

Ce fichier est appelé systématiquement pour une page d'administration ou une page public, c'est donc l'endroit le plus approprié pour initialiser/lire les paramètres. Cependant si les paramètres non pas à être lu sur la partie public on peut déplacer le code ci-dessous dans le fichier _admin.php et ne pas créer de fichier _prepend.php.

if (!defined('DC_RC_PATH')) { return; }

require '__params.php';

$core->tplPlugin_Params = $newParams;

Les paramètres seront toujours disponibles (avec le cas échéant leur valeurs par défaut) sans avoir besoin d'utiliser le namespace.

if (!is_null($core->blog->settings->tplPlugin)
	and !is_null($core->blog->settings->tplPlugin->tplPlugin_Params))
	{
	$Params = unserialize(
		$core->blog->settings->tplPlugin->tplPlugin_Params);
		
	foreach ($Params as $Key => $Val)
		$core->tplPlugin_Params[$Key] = $Val;
	}
?>

Comme précédemment dans le fichier _install.php, tous les paramètres sauvegardés sont accessibles même s'ils ne sont plus initialisés par défaut.

Ce fichier permet de remplacer les valeurs par défaut des variables par leur contenu sauvegardé, ce qui peut éviter des erreurs si pour une raison ou une autre l'installation s'est mal passée ou aucune sauvegarde des paramètres n'a été faite depuis une mise-à-jour du plugin.

Suite au prochaine épisode ... ;-)