La Fabrique

La Fabrique est un outil pour webmestres ou développeurs qui souhaitent créer des plugins. La Fabrique est capable de générer le code source minimal d’un plugin pour SPIP 3 (elle accélère donc le démarrage d’un plugin) et peut s’occuper également de construire un plugin fonctionnel gérant un ou plusieurs objets éditoriaux et leurs liaisons (et là, elle devient formidable !). La base du plugin construit, il ne vous reste plus qu’à l’adapter à vos désirs les plus créatifs.

La Fabrique est un outil de construction de plugin spécialement orientée pour la gestion d’objets éditoriaux. Pour ceux qui ont connu le plugin «Chat» ou «Chat2», sachez que la Fabrique sait gérer tout ce qui est présent dans ce tutoriel / plugin, et même au-delà, bien au-delà.

N’allez pas trop vite !

Cette note est aussi présente lors de l’installation du plugin, mais redisons le encore :

  • la Fabrique crée un code fonctionnel mais qui ne répondra peut être pas à 100% de vos attentes. La Fabrique ne peut pas tout faire. À vous d’adapter ensuite le code généré.
  • un plugin est très vite fait grâce à la Fabrique. Mais attention : le code n’est qu’une partie d’un plugin. Si vous voulez que votre plugin perdure dans le temps, il faut qu’il soit utile, partagé, documenté, traduit, il faut assister les utilisateurs, et maintenir son code avec les évolutions de SPIP et c’est tout cela aussi un plugin !
  • la Zone de SPIP permet de collaborer sur les plugins. Essayez au maximum de ne pas créer des plugins existant déjà, pour éviter des doublons qui peuvent disperser d’autant les énergies pour toutes les tâches citées au point précédent.

Pré-requis

Pour faire fonctionner la Fabrique il faut :

  • PHP >= 5.3 (il est possible que 5.2 fonctionne aussi)
  • SPIP 3.0-RC minimum
  • Un navigateur récent (testé avec FF11 et Chrome 18.0)
  • Saisies >= 0.25
  • Et peut être un système Unix/Linux pour son serveur (appel de exec('diff') en PHP) [1]

Optionnellement mais conseillé :

Démonstration vidéo

Dans la vidéo suivante, vous verrez une présentation de la Fabrique impliquant la construction d’un plugin «Félins» dans lequel nous créons 1 objet éditorial «Chats».
Cette vidéo est aussi disponible en meilleure qualité sur medias.spip.net

Présentation de la Fabrique en vidéo

Accéder à la fabrique

Depuis SPIP 3.1, La fabrique est accessible dans le menu de développement (il faut activer l’option de vos préférences personnelles pour voir ce menu)

Documentation

En attendant une documentation plus riche ici, vous pouvez lire ces articles :

Capture d’écran

La Fabrique, version 1.13.3
La Fabrique, version 1.13.3
Interface d’accueil de la Fabrique avec un objet éditorial «Chats» de renseigné dans un plugin nommé «Félins»

À tester

«La Fabrique» débute sa vie publique et doit être testée dans différents environnements. Vous êtes donc invités à explorer cet outil développé maintenant sur la Zone [2]

Limitation connue

Actuellement (version 1.16.3), à partir d’un certain nombre d’objets et de champs (environ 10 objets * 8 champs ici), le formulaire devient naturellement inopérant à cause d’une limitation voulue de PHP : max_input_vars, par défaut à 1000 dans php.ini.
Pour contourner, il faut modifier php.ini pour tolérer plus de champs (5000) par exemple.

Attention

Depuis le version 2.0.0 le menu de la fabrique se trouve dans celui de Développement. Celui-ci est activable depuis l’espace préférence de l’utilisateur.

Footnotes

[1À faire vérifier par quelqu’un ayant un serveur local sous Windows

updated on 17 March 2019

Discussion

124 discussions

  • 1

    Bonjour,
    près plusieurs tentatives d’installations, de réinitialisation...
    J’arrive à créer le plugin, mais lorsque que j’ai créé un objet éditorial, je n’arrive pas utiliser la commande : Pré-remplir cet objet.
    Je suis en PHP 7.2, SPIP 3.2.4
    Merci de me donner une piste pour trouver une solution...

    • l
      La console d’inspection affiche ce message :
      An invalid form control with name=’objets[0][nom]’ is not focusable.
      An invalid form control with name=’objets[0][table]’ is not focusable.

    Reply to this message

  • 2

    Merci pour cet outil vraiment pratique ! J’ai créé un nouvel objet éditorial (que j’appelle “fiches”), tout fonctionne sauf les inclusions de doc.
    Je copie/colle une inclusion de doc dans un texte (exemple : doc18, entre balises ouvrante et fermante). Dans l’espace privé, ma fiche s’affiche bien avec sa jolie image.
    Dans l’espace public, impossible par contre d’afficher cette fiche avec son image. Cela m’affiche l’inclusion “doc18” en toute lettre.... Pourtant, je code exactement pareil que pour un objet “article” standard (sauf le nom des balises qui changent...).
    Ya un truc que j’ai pas dû suivre... Vous avez une idée ?

    • Il n’y a rien de spécial à faire. Je suppose que le nom du champ (la colonne SQL) n’est pas commune pour SPIP (pas ’texte’ ou ’descriptif’ par exemple). Dans ce cas, il faut soit utiliser [(#TRUC|propre)] pour appliquer les traitements typos au cas par cas dans les squelettes, soit déclarer un traitement typo automatiquement sur cette balise, ce qui se fait dans le pipeline ’declarer_interfaces’, avec par exemple : 

      1. $interface['table_des_traitements']['SLOGAN']['fiches'] = _TRAITEMENT_RACCOURCIS;

      où ’SLOGAN’ est le nom du champ, et ’fiches’ le nom de la table (sans spip_).

    • Merci beaucoup Matthieu !
      Effectivement |propre fonctionne bien. Je vais de suite me renseigner par quelle magie ce filtre opère !

    Reply to this message

  • 2
    bourdeau alain

    Bonjour,
    sous ubuntu 18.04 et spip
    SPIP 3.2.1 [24285] plugin la fabrique 2.3.13
    + écran de sécurité 1.3.11 (la mise à jour vers 3.2.4 se déroule, mais l’info de version ne change pas).
    je peux créer un début de pluning, mais désque je cherche à intégrer un objet éditorial, j’ai systématiquement :

    Oups. Une erreur inattendue a empêché de soumettre le formulaire. Vous pouvez essayer à nouveau.

    et ça ’plante’ !
    je suis démuni.
    Merci bien pour votre implication Alain

    • Même erreur, dans un environnement Debian/Strecth
      Aucune erreur dans les log d’apache :-(
      Dans les log de spip, j’ai
      Pri:ERREUR: Le serveur ’_connect’ version 1 n’a pas ’showbase’

      Mais cela ne semble pas être dans le code de la fabrique...
      Sur une autre machine, très semblable (stretch aussi), la fabrique veut bien fonctionner !

      Une idée ?

    • Pour le «Le serveur ’_connect’» ... c’est qu’il doit exister un fichier config/_connect.php compris par SPIP comme une base de données distante, mais qui ne fonctionne pas dans ton contexte. Renommes le en _connect.php.prod par exemple, ou du moins quelque chose ne terminant pas par .php :)

    Reply to this message

  • Bonjour,
    Après moult tentatives, ça avance mais j’ai l’erreur -voir image jointe-
    Sous UBUNTU 18.04.1
    apache 2.4.29
    php 7.2.17
    mariadb 10.3.14
    et spip tout neuf 3.2.4(24285)
    Dans la déclaration de table si je ne mets pas le nom de la base (spip2) devant le nom de la table je n’ai pas de création de table et si je mets spip2_qrcodes, j’ai bien la création de la table mais j’ai cette erreur ?
    Que faire
    J’ai par le passé, il y a plusieurs mises à jour de spip depuis, utilisé la fabrique avec bonheur, mais la ça plante.
    Merci bien Alain

    Reply to this message

  • Deux suggestions pour cet outil (qui est vraiment génial et je vous en remercie) : 1) pouvoir désactiver la gestion des champs par La Fabrique une fois qu’on a tout bien paramétré, de sorte que les Champs Extra ne s’affichent plus et qu’on fixe la base une fois pour toutes sans risquer de supprimer par mégarde un Champ Extra; 2) pouvoir gérer les statuts d’auteurs supplémentaires que l’on a créé de façon personnalisée. Ce serait (pour moi) une aide sans pareille que de pouvoir voir, dans la liste des statuts à sélectionner quand le Champ Extra de type “Auteur” est configuré, tous les autres statuts — autres que les statuts prédéfinis (admin, rédacteurs et visiteurs). Je précise par ailleurs que les Champs Extra permettent de pallier une anomalie des bases SQL en version 4.7.7 qui crée un bug sur les dates (le format datetime ne permet pas de gérer un paramétrage par défaut à 0000-00-00 00:00:00 et seule l’utilisation des Champs Extras permet de résoudre ce problème ! ) Merci beaucoup.

    Reply to this message

  • 2

    Bonjour,

    Impossible d’utiliser un champ “checkbox”.

    Par exemple, on crée un objet éditorial avec 2 champs : Titre et Checkbox (avec 3 choix par exemple).

    Quand on crée une occurence de l’objet, pas de souci. MAIS si on coche une des checkbox, on a l’enregistrement le message “Une erreur technique a empêché l’enregistrement correct du champ XXXX”.

    Quelqu’un s’en est déjà rendu compte et a la soluce ? Ou suis je le premier ?

    Merci

    Reply to this message

  • 2
    Tederic Merger

    Bonjour,
    Le problème de page blanche et de non installation du plugin se pose même quand j’en ai enlevé toute création d’objet éditorial.
    A mon dernier test dans ces conditions, la log de SPIP ne me donne que des “INFO: Probleme de configuration opcache.revalidate_freq 2s”.
    J’ai vu que dans le passé, le moteur d’optimisation OpCache avait pu entrainer “chez certains hébergeurs (dont OVH)” la mauvaise installation des tables SQL des plugins.
    Je suis chez OVH, alors ne serait-ce pas à la base un pd d’OpCache ?

    • Bonjour Tederic,

      Désolé des problèmes rencontrés.
      Alors, concernant Opcache, non il n’y a pas de problème particulier avec la configuration normalement de nos jours (effectivement on avait eu quelques soucis par le passé).

      Concernant la page blanche, je t’invite à faire afficher les erreurs PHP ; quelque chose comme cela dans mes options, temporairement :

      error_reporting(E_ALL^E_NOTICE);
      ini_set ("display_errors", "On");
      define('SPIP_ERREUR_REPORT',E_ALL);

      Pendant un temps, on tolérait les champs dans les tables qui étaient des mots clés réservés à mysql (tel que ’option’), et qui pouvait empêcher une table SQL de se créer. Ces champs sont normalement bloqués aussi maintenant lors de la création par la Fabrique.

      J’espère que l’affichage d’erreur sera informatif. Ça pourrait être un timeout par exemple (le script qui prendrait plus de 30 secondes de travail)

      MM.

    • Tederic Merger

      Merci Matthieu, notamment pour les instructions de pistage des erreurs en cas de page blanche.
      Mais j’ai recommencé un plugin sous un autre nom, et avec le premier objet éditorial créé, je n’ai justement plus la page blanche, et l’installation se fait correctement ! J’ai donc bon espoir que le problème soit résolu.
      Il y avait un trait d’union dans le préfixe du premier plugin (“locs-noms”). J’espère que c’est pas ça...

    Reply to this message

  • Tederic Merger

    Bonjour,
    Problème toujours non résolu...
    Je vois dans les logs qu’il y a des erreurs ou des messages d’information “trouver_table: table inconnue...” sur des tables qui n’existent plus dans la base depuis longtemps.
    Que faut-il mettre dans la zone schéma de la structure de données de la définition du paquet du plugin, et qui sert à l’installation ?
    J’ai mis au hasard 1.0.0 puis 2.0.0... lors de l’activation du plugin, toujours une page blanche et échec de l’installation, et par la suite un message “activation réussie du plugin”, mais intallation échouée !

    Reply to this message

  • Tederic Merger

    Bonjour,
    Je tente d’installer un plugin qui crée 5 objets éditoriaux.
    Un message me dit que l’activation s’est correctement déroulée, mais l’installation ne se fait pas, et en plus, j’ai la terrible page blanche !
    Les tables spip_locs, ... spip_prenoms existent déjà et sont remplies. Le but n’est pas de les créer par l’installation du plugin.
    Or la log me met des messages du genre “Erreur mysql 1146
    2018-11-22 14:55:38 88.186.116.75 (pid 24792) :Pri:!INFO: trouver_table: table inconnue ’’ ’locs’.” Il semble donc que les tables sont cherchées sans le suffixe spip_.
    Dans le fichier de Déclarations relatives à la base de données, j’ai ceci :
    $interfaces[’table_des_tables’][’locs’] = ’locs’; (etc.)
    Dans le fichier d’administration-installation du plugin, j’ai
    /** $maj[’create’] = array(array(’maj_tables’, array(’spip_locs’, ’spip_noms’, ’spip_nom_normats’, ’spip_nom_normats_liens’, ’spip_paraulas’, ’spip_paraulas_liens’, ’spip_prenoms’, ’spip_prenoms_liens’))); **/
    Les fichiers liens figurent aussi préalablement dans la base, mais ne semblent pas causer l’erreur.
    Que je désactive ou non cette instruction, l’erreur table inconnue et la page blanche surviennent... Mysqsl ne cherche jamais les tables avec suffixe.
    J’ai aussi essayé d’enlever le suffixe dans le nom des tables telles qu’elles existent dans la base, mais ça ne marchait pas plus : les tables étaient toujours recherchées et non trouvées.
    J’ai aussi fait attention de vider le cache presque à chaque fois...
    Merci de votre attention !

    Reply to this message

  • Bonjour et merci pour cette moulinette qui permet de créer rapidement de nouveaux objets éditoriaux.

    J’aurais besoin d’un peu d’aide pour sauter une étape qui ne m’est pas utile...

    J’ai créé un objet caption lié aux articles. Tout fonctionne superbement... Je peux créer de nouveaux objets caption, les modifier, les lister....

    Mais lors de l’étape de création d’un nouveau caption, je souhaite juste ne pas afficher l’étape “ajouter un caption”. Cette étape va en effet me lister les captions existants dans la table caption et puis seulement m’afficher “créer un nouveau caption” qu’à la suite de cette liste... Je souhaiterais uniquement afficher les captions attachés à l’article et directement le bouton “créer un caption” ??... Mais je ne sais pas comment m’y prendre ?....

    Si quelqu’un pouvait me mettre sur la piste ?? Merci :-)

    Reply to this message

Comment on this article

Who are you?
  • [Log in]

To show your avatar with your message, register it first on gravatar.com (free et painless) and don’t forget to indicate your Email addresse here.

Enter your comment here

This form accepts SPIP shortcuts {{bold}} {italic} -*list [text->url] <quote> <code> and HTML code <q> <del> <ins>. To create paragraphs, just leave empty lines.

Add a document

Follow the comments: RSS 2.0 | Atom