TuTo tplPlugin (02)
Par Akh le vendredi, 09 décembre 2011, 13:34 - Lien permanent
Rappel : Cette série de quatre billets n'a pas la prétention de vous présenter "la meilleure façon" de faire un plugin, mon seul souhait : que vous trouviez des réponses à vos interrogations, voir que vous appréhendiez mieux certaines particularités. La documentation officielle reste "la bible" en la matière, "le forum" regorge d'adeptes toujours prompts à vous aider.
Je vous propose de détailler le plugin hEdito (renommé pour l'occasion pour éviter les plantages) qui me permet sur ce blog d'avoir un Edito indépendant de toute intervention sur le thème.
L'intendance du plugin ...
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 ...