La Fabrique de SPIP : aller plus loin
Un peu de doc
Il est vivement conseillé de lire l’article sur la rédaction du paquet XML
il existe également de nombreuses informations de références dans
API de déclaration d’objets éditoriaux
Enfin, pleins d’infos utiles dans le tuto de Marcimat
Les checkbox et la Fabrique pour un nouvel objet éditorial
En l’état, SPIP sait gérer tous les types de champ d’un formulaire sauf...les checkbox.
Il faut alors apporter les modifications suivantes aux fonctions charger() et traiter() du fichier formulaires/editer_prefixplugin.php
la fonction Charger
- function formulaires_editer_prefixplugin_charger_dist(...) {
- $valeurs = formulaires_editer_objet_charger(...);
- return $valeurs;
- }
et...
la fonction Traiter
- function formulaires_editer_partenaire_traiter_dist(...) {
- …
- }
EXPLICATIONS
Les checkbox d’un formulaire envoi des données sous forme de tableau.
Comme le dit Marcimat "On ne peut pas enregistrer de données tabulaires directement en base de données. En tout cas en MySQL. Il faut sérialiser d’une manière ou d’une autre ce tableau."
Pour enregistrer les valeurs des checkbox
La fonction traiter() du CVT va récupérer les données des checkbox avec la fonction _request(), puis les sérialiser avec la fonction implode().
La valeur de mon_champ va ainsi passer de
0 | partenaire |
1 | fournisseur |
à
mon_champ = "partenaire,fournisseur".
Là c’est enregistrable en base de données.
Il faut maintenant réinjecter ces valeurs dans le CVT grâce à la fonction set_request().
Pour lire les valeurs des checkbox
Au rechargement du formulaire, on fait l’opération inverse, transformer les valeurs sérialisées en tableau grâce à la fonction explode(). Puisque les checkbox au chargement attendent un tableau. La boucle est bouclée (jeu de mot spipien).
Utiliser le plugin Vérifier
- ....
- $verifier = charger_fonction('verifier', 'inc');
- //Validite de la syntaxe de l'adresse email
- if (!$erreurs['contact_email']) {
- $erreurs['contact_email'] = $err_syntaxe;
- }
- if (count($erreurs)) $erreurs['message_erreur'] = 'Il y a des erreurs dans la saisie de ce formulaire';
- return $erreurs;
Pour en savoir plus....
Mettre un objet avec le statut publié par défaut
Dans le fichier /base/prefixe_plugin.php, rajouter
function prefixeplugin_pre_insertion($flux) {
if ($flux['args']['table'] == 'spip_nom_table') {
$flux['data']['statut'] = 'publie';
}
return $flux;
}
...puis dans le fichier paquet.xml
...
<pipeline nom="pre_insertion" inclure="base/prefixeplugin.php" />
...
formulaire CVT : tester si on se trouve dans la partie privée
La fonction test_espace_prive() est là pour ça.
Par exemple...
Cela peut être utile par exemple lorsque l’on veut utiliser le formulaire CVT généré par la Fabrique aussi bien dans l’espace privé que dans la partie publique.
On peut ainsi rajouter des traitements dans l’espace publique, comme un formulaire de télécharger de document, sans que cela bousille le même formulaire dans l’espace privée.
Tester si votre plugin est actif ou non
pour cela il suffit d’utiliser la fonction test_plugin_actif().
Ex :
test_plugin_actif(’prefixe_plugin’) ;
Nouvel objet éditorial : désactiver le formulaire d’ajout de logo
La désactivation d’un logo se fait via l’API des autorisation.
pré-requis : avoir demandé la création du fichier prefixePlugin_autorisations.php
Il suffit alors de rajouter la fonction suivante
function autoriser_prefixPlugin_iconifier_dist($faire, $type, $id, $qui, $opt) {
return false;
}
..et de changer prefixPlugin par le prefixe de votre plugin.
Pour info le plugin LIM gère cela via une interface plug&play.
Nouvel objet éditorial : modifier le critère de tri par défaut dans le listing de l’objet.
L’appel de ce listing dans une rubrique ce fait via un pipeline appelé "affiche-enfants".
La Fabrique va automatiquement créer une fonction prefixe_affiche_enfants() (dans le fichier prefixe_pipelines.php).
C’est là que l’on peut modifier (simplement) la valeur par défaut passée au critère "par".
$flux['data'] .= $lister_objets('mon_objet', array('titre'=>_T('prefixe:titre_mon_objet_rubrique') , 'id_rubrique'=>$id_rubrique, 'par'=>'id_prefixe'));
Ici, c’est la partie ’par’=>’id_prefixe que l’on peut modifier en remplacant la valeur ’id_prefixe’ par ’titre’, ’titre num’, etc.
La constante _DIR_PLUGIN_PREFIXE
Renvoi le chemin d’accès aux fichiers de votre plugin