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

  1. function formulaires_editer_prefixplugin_charger_dist(...) {
  2.    $valeurs = formulaires_editer_objet_charger(...);
  3.    $valeurs['mon_champ'] = explode(',', $valeurs['mon_champ']);
  4.    return $valeurs;
  5. }

Télécharger

et...

la fonction Traiter

  1. function formulaires_editer_partenaire_traiter_dist(...) {
  2.    set_request('mon_champ', implode(',', _request('mon_champ')));
  3.    …
  4. }

Télécharger

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

  1. ....
  2. $verifier = charger_fonction('verifier', 'inc');
  3.  
  4. //Validite de la syntaxe de l'adresse email
  5. if (!$erreurs['contact_email']) {
  6.     if ($err_syntaxe=$verifier(_request('contact_email'), 'email', array('mode'=>'normal')))
  7.         $erreurs['contact_email'] =  $err_syntaxe;
  8. }
  9. if (count($erreurs)) $erreurs['message_erreur'] = 'Il y a des erreurs dans la saisie de ce formulaire';
  10. return $erreurs;

Télécharger

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’) ;

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

ecriture du paquet.xml : exemples