Créer un plugin widget pour spxdatas
Rédigé par je-evrard / 01 août 2014 / 3 commentaires
A partir de la version 1.60 de spxdatas, il est possible de créer des plugins qui viennent s'ajouter dans la partie widget de spxdatas.
C'est un tournant majeur pour spxdatas, avec l'accueil de plugins externes, il n'y a plus de limite à la création de widget !
Nous allons voir ensemble comment créer un plugin widget de A à Z.
Comment créer un plugin widget ?
Un plugin widget est tout d'abord un plugin dans pluxml, il doit donc être déclaré comme tout plugin dans le dossier plugins.
La première chose à faire est une déclaration le fichier de construction du plugin.
public function __construct($default_lang) {
# Appel du constructeur de la classe plxPlugin (obligatoire)
parent::__construct($default_lang);
$this->setParam('spxdatas_widget', '1', 'string');
}
Le paramètre "spxdatas_widget = 1" va permettre au plugin spxdatas de savoir que votre plugin est un plugin de type widget. C'est la première chose à faire.
Ensuite, il va falloir créer un dossier spxdatas à la racine de votre plugin avec une hierarchie spécifique. Voici a quoi ressemble la structure d'ensemble.
Le dossier icon contient une image qui permettra l'affichage et la personnalisation dans la partie widget.
Le dossier table contient tous les éléments pour définir le widget et "alimenter" en quelque sorte spxdatas.
Dans ce dossier on trouve notamment deux parties :
- un fichier table.php correspondant description du widget au format xml en terme de structure
- un dossier table_loc contenant les fichiers de traduction du widget
Comment créer l'administration du widget ?
L'administration du widget est crée tout simplement par lecture du fichier se trouvant dans :
- monwidgetplugin/spxdatas/table/table.php
Ce fichier table.php contient une description au format xml du widget.
Voici par exemple la description xml du widget spxwpolaroid :
<table name="spxwpolaroids" maxparam="2" groupe="spxwpolaroid" tableuserlevel="0,1,2,3,4" rightCMDlevel="0:111,1:111,2:111,3:111,4:111" >
<description><![CDATA[<p>List of polaroid</p>]]></description>
<column>
<parameter name="title" type="cdata" option="textinput/30/100" ></parameter>
<parameter name="polaroid_content" type="cdata" option="subtable/spxwpolaroid" >
</parameter>
</column>
</table>
<table name="spxwpolaroid" maxparam="3" groupe="spxwpolaroid" type="subtable" order="true" rightCMDlevel="0:111,1:111,2:111,3:111,4:111" >
<description><![CDATA[<p>Your polaroid</p>]]></description>
<column>
<parameter name="title" type="cdata" option="textinput/30/100" ></parameter>
<parameter name="image" type="cdata" option="image" ></parameter>
<parameter name="dummy" type="string" option="boolean"></parameter>
<parameter name="bt_url" type="cdata" option="textinput/30/100" ></parameter>
<parameter name="bt_blank" type="string" option="boolean"></parameter>
<parameter name="polaroidback" type="cdata" option="textarea/40/10" ></parameter>
</column>
</table>
Comme on peux le voir ic la description du widget est faite en deux parties (2 tables).
- table spxwpolaroids : permet d'avoir le titre du polaroid et un lien vers une autre table
- table spxwpolaroid : une sous table permet la description du polaroid (titre, image, url...)
Je ne vais pas ici faire un tutoriel sur la construction de la table. Le plugin spxdatas comporte une aide détaillée sur le sujet et de nombreux autres articles viendront enrichir la documentation obscure ou absente.
A noter : la structure du xml est particulière est ne comporte pas de balise encadrant les tables.
Bien sur, il est tout à fait possible de générer ce fichier à partir de la configuration de votre plugin widget. C'est ce que fait spwunslider et spxwpolaroid.
Pourquoi générer le fichier table.php ?
Il peux être utille, par exemple, de changer les droits de l'administration du widget (spxdatas le permet). Consulter le documentation de spxdatas pour plus de détails.
Les traductions du widget
l'administration des widget peut-être traduite en deux langues pour le moment (anglais et français).
Pour cela il suffit de créer des fichier de traductions :
- français dans monpluginwidget/spxdatas/table/table_loc/fr/admin.php
- anglais dans monpluginwidget/spxdatas/table/table_loc/en/admin.php
Que contiennent ces fichiers ?
Exemple pour l'administration française du plugin spxpolaroïd
<?php
$LANG = array(
# GROUPES
'L_GROUPE_SPXWPOLAROID_TITLE' => '<img src="plugins/spxwpolaroid/spxdatas/icon/Slideshow.png" width="20px" height="20px" >Polaroid',
# TABLE
'L_TABLE_SPXWPOLAROIDS_TITLE' => 'Polaroid',
'L_TABLE_SPXWPOLAROIDS_DESCRIPTION' => '<p>Adminstration de vos polaroids.</p>',
# ACTION TITLE
'L_TABLE_SPXWPOLAROIDS_ACTIONTITLE' => '',
# COLUMN
'L_TABLE_COLUMN_SPXWPOLAROIDS_TITLE_HIGHLIGHTTITLE' => '',
'L_TABLE_COLUMN_SPXWPOLAROIDS_TITLE_TITLE' => 'Titre',
'L_TABLE_COLUMN_SPXWPOLAROIDS_TITLE_HELP' => 'Donner un titre a votre polaroid.',
# COLUMN
'L_TABLE_COLUMN_SPXWPOLAROIDS_POLAROID_CONTENT_HIGHLIGHTTITLE' => '',
'L_TABLE_COLUMN_SPXWPOLAROIDS_POLAROID_CONTENT_TITLE' => 'Accès au contenu',
'L_TABLE_COLUMN_SPXWPOLAROIDS_POLAROID_CONTENT_HELP' => 'Cliquer sur éditer pour créer ou modifier le contenu de votre polaroid',
# TABLE
'L_TABLE_SPXWPOLAROID_TITLE' => 'Polaroid',
...
);
?>
Ce fichier contient en fait un tableau php de traduction. Les noms d'association ont leur importance et obéissent à une logique codifiée.
- Attention : le codage est en majuscule et séparé par le caractère "_"
- Remplace xxx par le nom de la table : ex SPXWPOLAROID
- Remplace yyy par le nom de la colonne : ex IMAGE
code | note |
---|---|
L_GROUPE_xxx_TITLE | Nom du groupe |
L_TABLE_xxx_DESCRIPTION | Description de ma table |
L_TABLE_xxx_ACTIONTITLE | Description de mon action (réservé pour plus tard) |
L_TABLE_COLUMN_xxx_yyy_HIGHLIGHTTITLE | Texte de séparation entre deux colonnes (dans les options du widget) |
L_TABLE_COLUMN_xxx_yyy_TITLE | Nom de ma colonne dans ma table |
L_TABLE_COLUMN_xxx_yyy_HELP | Aide de ma colonne dans ma table |
Il est possible de générer ce fichier à partir de la configuration du plugin widget. Voir l'exemple spxwpolaroid ou spxwunslider.
Comment récupérer les données de l'administration coté client ?
Tout d'abord nous allons déclarer un hook dans le constructeur du plugin.
$this->addHook('spxwpolaroid::getPolaroidID', 'getUnsliderID');
Puis nous construisons la fonction qui va permettre de récuprérer les données du widget.
3 commentaires