Importeur / Exporteur de configurations : documentation développeur

Cet article vise à présenter la procédure pour déclarer une configuration d’un plugin à l’Importeur / Exporteur de configurations.

Plugin stockant sa configuration dans la table spip_meta

Une majorité de plugins stocke leur configuration dans la table spip_meta. Pour ces derniers, la déclaration des métas à sauvegarder est relativement simple via le pipeline ieconfig_metas.

L’importeur/exporteur de configurations générera alors un formulaire d’import/export simplifié (exporter : oui / non, importer : oui / non).

Il faut tout d’abord déclarer le pipeline ieconfig_metas dans le plugin.xml du plugin :

	<pipeline>
		<nom>ieconfig_metas</nom>
		<inclure>prefixe_plugin_ieconfig_metas.php</inclure>
	</pipeline>

puis créer un fichier prefixe_plugin_ieconfig_metas.php contenant :

<?php

function prefixe_plugin_ieconfig_metas($table){
	$table['prefixe_plugin']['titre'] = nom_du_plugin;
	$table['prefixe_plugin']['icone'] = 'chemin/image.png';
	$table['prefixe_plugin']['metas_brutes'] = 'meta1,meta2,meta3';
	$table['prefixe_plugin']['metas_serialize'] = 'meta4,meta5,meta6';
	return $table;
}

?>

metas_brutes permet d’indiquer les metas dont on fera l’export tel quel, tandis que metas_serialize permet d’indiquer des metas qui sont stockées sous forme serializées (ce qui est notamment le cas avec CFG dans usage courant).

S’il y a plusieurs metas à sauver, il faut séparer leur nom par une virgule (ne pas ajouter d’espace).

L’icône doit être en 16x16 pixels. Par ailleurs, sous SPIP 3, si l’icône est situé d’un répertoire de thème (classiquement prive/themes/spip/images/), son nom est suffisant, il est inutile de préciser le chemin.

Exemples concrets :

Pour le plugin Métas (source) :

function metas_ieconfig_metas($table){
	$table['metas']['titre'] = _T('metas:configuration_metas');
	$table['metas']['icone'] = 'images/metas-16.png';
	$table['metas']['metas_brutes'] = 'spip_metas_title,spip_metas_description,spip_metas_keywords,spip_metas_mots_importants';
	return $table;
}

Pour le plugin Dublin Core (qui utilisait CFG) :

function dublin_core_ieconfig_metas($table){
	$table['dublin_core']['titre'] = _T('dublin_core:dublin_core');
	$table['dublin_core']['icone'] = 'dublin_core-16.png';
	$table['dublin_core']['metas_serialize'] = 'dublin_core';
	return $table;
}

Si l’on a besoin de formulaires d’import/export et/ou de traitements plus évolués, il faut passer par un autre pipeline, le pipeline ieconfig.

Indiquer un préfixe de méta

À partir de la version 1.3.0, il est possible d’indiquer, via le pipeline ieconfig_metas, un préfixe de méta en le faisant suivre d’une astérisque (*).

Prenons l’exemple suivant :

<?php

function prefixe_plugin_ieconfig_metas($table){
	$table['prefixe_plugin']['titre'] = nom_du_plugin;
	$table['prefixe_plugin']['icone'] = 'chemin/image.png';
	$table['prefixe_plugin']['metas_serialize'] = 'titi,toto_*';
	return $table;
}

?>

Seront exportées la méta titi et toutes les métas dont le nom commence par toto_.

Le pipeline ieconfig pour des exports/imports entièrement personnalisables

Pour qu’un plugin puisse exporter/importer sa configuration avec l’importeur/exporteur de configurations, il doit se brancher sur le pipeline iecfg.

Ce pipeline est appelé 4 fois :

  • pour construire le formulaire d’export
  • pour construire le tableau de configuration à exporter
  • pour construire le formulaire d’import
  • pour stocker la configuration importée en base

Pour un exemple de code, voir http://svn.spip.org/trac/spip-zone/... ou encore http://zone.spip.org/trac/spip-zone....

Construction du formulaire d’export

Pour construire le formulaire d’export, le pipeline ieconfig est appelé en transmettant en argument $flux['args']['action']='form_export'.

$flux['args']['data'] contient un tableau de saisies (voir Saisies) . On ajoutera dès lors à ce tableau les options de saisies propres au plugin. Elles seront réunies dans un fieldset dont le nom sera le préfixe du plugin. Les noms des options de saisies commenceront toutes par prefix_ pour éviter les interférences avec d’autres plugins.

Au minimum, le plugin devra proposer d’exporter ou de ne pas exporter sa configuration.

Il est possible de préciser des critères de vérifications aux saisies (voir Saisies : Doc complémentaire).

Tableau à exporter

Pour construire le tableau d’export, le pipeline ieconfig est appelé en transmettant en argument $flux['args']['action']='export'.

Les paramètres d’export saisis par l’utilisateur sont accessibles via la fonction _request().

$flux['args']['data'] contient le tableau des données à exporter. Le plugin rajoutera une entrée à ce tableau, avec pour clé le préfixe du plugin, contenant la configuration à exporter.

Construction du formulaire d’import

Pour construire le formulaire d’export, le pipeline ieconfig en transmettant en argument $flux['args']['action']='form_import'. $flux['args']['action']='config' contient le tableau à importer.

$flux['args']['data'] contient un tableau de saisies (voir Saisies) . On ajoutera dès lors à ce tableau les options de saisies propres au plugin, si le tableau à importer contient une configuration à importer pour ce plugin (entrée ayant comme clé le préfixe du plugin). Elles seront réunies dans un fieldset dont le nom sera le préfixe du plugin. Les noms des options de saisies commenceront toutes par prefix_ pour éviter les interférences avec d’autres plugins.

Au minimum, le plugin devra proposer d’importer ou de ne pas importer la configuration le concernant.

Il est possible de préciser des critères de vérifications aux saisies (voir Saisies : Doc complémentaire).

Import de la configuration

Pour importer la configuration, le pipeline ieconfig est appelé en transmettant en argument $flux['args']['action']='import'. $flux['args']['action']='config' contient le tableau à importer.

Les paramètres d’import saisis par l’utilisateur sont accessibles via la fonction _request().

$flux['args']['data'] contient un message d’erreur à afficher si un problème est rencontré. Il sera complété par le plugin si une erreur a été rencontrée lors de l’import.

Fournir des fichiers de configuration dans un plugin

Un plugin, notamment un plugin de squelette, dépendant de plusieurs autres plugins peut fournir un ou plusieurs fichiers de configuration. Cela permet notamment pour un squelette de fournir plusieurs configurations de départ/

Pour cela, il suffit de placer les fichiers YAML de configuration dans un sous-répertoire ieconfig/.

On peut également indiquer que ce fichier de configuration ne doit être proposé par l’importeur/exporteur de plugin que si certains plugins sont actifs en ajoutant dans le yaml du fichier de configuration :

- necessite:
  - 'plugin1'
  - 'plugin2'

Discussion

Aucune discussion

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom