C'est quoi ce plugin ?

Ce plugin permet de créer une administration afin de gérer des données que vous aurez vous même définies. Il permet de stocker par exemple des galeries (images, titres, description), une liste de liens html, une liste de produits (titre, image, prix, description...). Il peut aussi lier certaines informations entres elles comme le fait pluxml avec les articles et les catégories. Ce plugin s'adresse à tout le monde à partir du moment où vous lisez la documentation.

Un plugin qui ne fait rien sauf si on ne lui dit pas ce qu'il a à faire ?

Oui. Vous êtes le chef d'orchestre. Spxdatas est un couteau suisse, il fera ce que vous lui dites de faire.

Mais comment ?

Pour que ça fonctionne, il va falloir lui donner des instructions au format xml. Ces instructions sont la description de votre futur administration de données. Pour cela on définit une base de données avec des tables.

Une base de données avec des tables ?

Une vraie base de données fonctionne avec des tables, ici le meme principe est appliqué. Une table dans une base de données est un ensemble de données organisées sous forme d'un tableau où les colonnes correspondent à des catégories d'informations (une colonne peut stocker des numéros de téléphone, une autre des noms...) et les lignes à des enregistrements, également appelées entrées. Ici, c'est à peu près semblable mais en beaucoup plus simple et avec des options propres a l'administration. La base xml, va se composer de une ou plusieurs tables selon votre usage. Chaque table porte un nom unique. A l'intérieur de la balise table on trouve une balise description de table.

Exemple d'une base avec deux tables sans description du contenu :

<?xml version="1.0" encoding="UTF-8"?>
<document>
<table name="table1" > <description><![CDATA[Description de la table 1]]></description>
...
</table> <table name="table2" > <description><![CDATA[Description de la table 2]]></description>
...
</table>

</document>

La description de chaque colonne (nom, téléphone, description) se trouve à l'intérieur d'une balise <column>. Chaque champ est défini avec une balise <parameter> comportant un nom unique, un type et une option permettant de décrire le champ dans l'administration.

Exemple d'une base avec une table "personne" avec ses paramètres :

<?xml version="1.0" encoding="UTF-8"?>
<document>
<table name="personne" >
<description><![CDATA[Description de la table personne avec 3 colonnes]]></description>
<column>
<parameter name="nom" type="cdata" option="textinput/15/20"></parameter>
<parameter name="description" type="cdata" option="textarea/20/1"></parameter>
<parameter name="telephone" type="cdata" option="textinput/15/20"></parameter>


</column>
</table>

</document>

Il y a donc un langage ?

Oui, il y a un langage spécifique de description qu'il va vous falloir connaitre. Ce langage est décrit dans cette aide et il va vous permettre de comprendre le fonctionnement de ce plugin. Ce dernier est un peu en marge de ce qui se fait d'habitude.

Et la base xml finie qu'est ce qui se passe ?

Le plugin prendra le relais et se chargera de créer votre base d'administration. Vous pourrez à tout moment la modifier, ajouter ou supprimer des tables, des colonnes. Vous pouvez commencer à faire vos enregistrements dans les tables. La modification de la base peux se faire à tout moment, il n'y aura aucune influence sur les enregistrements deja existants.

L'admin c'est coté "admin" et coté "client" alors ? Comment récupérer les données qui ont été enregistrés ?

Pour récupérer les données coté client, il y a une requete à faire au plugin en lui passant des paramètres tout simplement.

Et le multilingue ?

Le plugin peux devenir multilingue en cochant l'option multilingue dans le fichier de config. Le plugin plxMyMultiLingue doit être activé (merci à stéphane).

Donc on commence par quoi ?

Installation :

Pensez à activer le plugin spxdatas et le plugin spxlibrary et à editer le fichier de configuration de spxdatas.

Configuration :

Il y a plusieurs paramètres dans la configuration :

Note : Par default les chemins de base et de données sont définis dans un dossier du plugin (/spxdatas/record/)

La base demo.php vous permettra de comprendre la structure d'une base de données.

Bien sur quand votre prise en main sera effective, il est recommandé de changer le chemin depuis la racine de pluxml comme suit :

Prise en main rapide par l'exemple

1) Gérer des liens html :

Rien de mieux que de commencer dès maintenant. Je vous propose un petit exercice très simple.

Les besoins : nous voulons gérer une liste de liens html sous forme de liste administrable par le client. Rien de plus simple.

Description de la base :

<?xml version="1.0" encoding="UTF-8"?>
<document>
<table name="link" >
<description><![CDATA[Description de la table link]]></description>
<column>
<parameter name="name" type="cdata" option="textinput/15/20"></parameter>
<parameter name="description" type="cdata" option="textarea/20/1"></parameter>
<parameter name="link" type="cdata" option="textinput/30/100"></parameter>

</column>
</table>

</document>

Comme on peut le voir ici, la structure de la base est relativement simple. On a juste besoin d'une table (link) contenant uniquement trois colonnes "column" qui sont "name", "description"et "link".

A noter : Une table a un nom unique. A l'intérieur, les differentes colonnes ont elles aussi un nom unique et comporte un typage. Nous reverrons ces notions plus loin.

Administration :

Cette description faite, la partie administration va créer une table link avec trois champs "name", "description" et "link".

Vous pouvez commencer a enregistrer quelques datas dans la partie administration. La partie administration du plugin reste simple et tout à fait dans l'esprit de l'admin de pluxml.
Avec notamment:

Récupération des données dans le template :

Pour récupérer les données, il faut passer par le hook'spxdatas::getData'. Par exemple ici on récupère les liens sous forme de liste html. Un simple objet est donné à la fonction getData.

A noter : Pour récupérer les données dans un template il n'y a qu'une fonction : spxdatas::getData

<?php
global $plxShow;
$o= array();
$o["table"]="link"; $o["out"]="html"; $o["format"]='<li><a href="#url" title="#description">#name</a></li>';
echo ("<u1>".$plxShow->callHook('spxdatas::getData',$o)."</u1>"); ?>

2) Gestion d'une base d'auteurs

Un deuxième exemple vas nous démontrer qu'il est possible de lier deux tables entre elles permettant par exemple de trier les données en fonction de catégories ou autres.

Les besoins : nous voulons gérer une liste d'auteurs avec un classement spécifique par exemple : amateur ou professionnel.

<?xml version="1.0" encoding="UTF-8"?>
<document>
<table name="auteur" >
<description><![CDATA[liste des auteurs]]></description>
<column>
<parameter name="name" type="cdata" ></parameter>
<parameter name="surnname" type="cdata" ></parameter>
<parameter name="categorie" type="string" option="liste/auteur_categorie/title"></parameter>
<parameter name="telephone" type="numeric" ></parameter>
<parameter name="description" type="cdata" option="textarea/10/3"></parameter>
</column>
</table>
<table name="auteur_categorie">
<description><![CDATA[Catégorie des auteurs]]></description>
<column>
<parameter name="title" type="cdata"></parameter>
</column>
</table>
</document>

Comme on le voit ici, nous avons deux tables.

La première table définie les auteurs avec une option spéciale sur les catégories (option="liste/auteur_categorie/title").

Dans l'administration, il vous faudra créer des enregistrements pour les auteurs et les catégories d'auteurs avant de récupérer les données.

La recupération des données se fait dans le template via hook et un tableau $o représentant la requete à la base:

<?php
global $plxShow;
  $o= array();
  $o["table"]="auteur";
// on ne veux filtrer les auteurs dont l'id de catégorie est id=001
  $o["filter"]="categorie=001";
  $o["out"]="html";
  $o["format"]='
	<address>
		<strong>#name</strong><br>#surname<br>#description<br>
		<abbr title="Phone">P:</abbr>#telephone
</address>'; // sortie html echo ("<u1>".$plxShow->callHook('spxdatas::getData',$o)."</u1>"); ?>

Note importante :

Avec un peu d'imagination vous pouvez créer des bases complexes et vous serez surement surpris du résultat...