La Fabrique

La Fabrique est un outil pour créer des plugins, essentiel dans la phase de développement d’un site SPIP. 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
Interface d’accueil de la Fabrique avec un objet éditorial « Chats » de renseigné dans un plugin nommé « Félins »

À tester

« La Fabrique » doit être testée dans différents environnements. Vous êtes donc invités à explorer cet outil développé avec git 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 la 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.

Notes

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

Discussion

137 discussions

  • merci pour votre générosité lors du développement de ce plugin et de votre tutoriel !

    Répondre à ce message

  • 2

    Bonjour

    Le Diff ne fonctionne pas chez moi. J’ai bien une petite fenêtre mais elle est vide.
    Le fichier fabrique_diff.diff existe, il est mis à jour (date) mais il est vide.
    Les anciens fichiers sont bien copiés dans le répertoire .backup.

    Une idée ?

    • Quelle plateforme ?

      Je n’ai jamais testé sous windows, ni mac os.
      Y a peut être à voir quelque chose à voir de ce côté.

    • Re Mathieu

      En client, je suis sur Windows 8.
      Sur le serveur, c’est du Linux.

      Mais le diff est généré par le serveur n’est-ce pas ?

    Répondre à ce message

  • 2

    Re-bonjour

    1 ) Un petit truc qui peut être gênant surtout si on ne le
    sait pas. Si on ajoute des saisies dans le répertoire saisies, il faut que le plugin en cours de création soit activé.

    2) Fabrique génère le fichier de saisie d’un nouvel objet éditorial. Mais il n’y a que le HTML. Il manque le yaml ? cela expliquerait-il que le sélecteur de saisie de cet objet ne soit pas disponible dans un autre objet ?

    • Bonjour Bruno,

      1) Activé pour que quoi ? pour qu’il soit disponible dans les propositions de saisie si tu crées d’autres objets éditoriaux avec la fabrique ? si c’est ça effectivement. Autrement je ne sais pas de quoi tu parles.

      2) Oui, la fabrique actuelle ne génère pas le yaml ; Ça serait bien pourtant effectivement, même un yaml minimal.

    • Bonjour Matthieu

      Il faut que le plugin en cours de création par la Fabrique soit activé pour que les nouvelles saisies créées par Fabrique, et relatives à ce nouveau plugin, soit visibles dans le selecteur de type de saisie, quand on créé une nouvelle entrée dans le plugin.

    Répondre à ce message

  • 1

    Je ai défini un champ checkbox en un formulaire avec fabrique et le formulaire renvoie une chaîne comme celle-ci :

    array(4) [0]=> string(20) « manutenzione_pulizie » [1]=> string(23) « assistenza_alla_persona » [2]=> string(24) « formazione_professionale » [3]=> string(12) « baby_sitting »

    mais pas sauvé à MySQL...
    « Une erreur technique a empêché l’enregistrement correct du champ ’attivita’. »

    Quel type champ de mysql dois-je utiliser pour un ckeckbox ? je ai tenté avec text, longtext,varchar()....

    Merci, Enzo

    • 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.

      Il y a différentes manières ou lieu pour faire cela. Ça peut être fait en JS au moment de la soumission du formulaire, ou dans le CVT, ou au moment de l’enregistrement des données (pre_edition). Le plus simple si on débute étant de le faire dans le CVT. Le plus courant est de faire un implode(',', $valeurs), par exemple dans la fonction verifier. À l’inverse il faut recréer le tableau, par exemple dans la fonction charger (ci dessous), OU dans le html du formulaire, dans la saisie en ajoutant [(#SAISIE{checkbox,mon_champ, ..., valeur=#ENV{mon_champ}|explode{","}})].

      function ...charger(...) {
         $valeurs = ...();
         $valeurs['mon_champ'] = exlpode(',', $valeurs['mon_champ']);
         return $valeurs;
      }
      
      function ... verifier(...) {
        $erreurs = ...();
        set_request('mon_champ', implode(',', _request('mon_champ')));
        return $erreurs;
      }

    Répondre à ce message

  • 2

    Bonjour Matthieu

    Plugin magnifique et intelligent, que j’utilise depuis quelques années.

    Aujourd’hui, je m’essaye à la création d’objet éditoriaux. Comme je n’ai pas les idées très claires, j’ajoute des champs au fur et à mesure que me viennent les idées. Cependant, j’aimerai pouvoir commencer à utiliser mon plugin même s’il n’y a pas encore tous les champs.

    J’ai essayé de créer de nouveaux champs et de désactiver/réactiver le plugin. Les nouveaux champs ne sont pas présents dans la table. :o(

    Le code a l’air correct pourtant :

    function compobase_upgrade($nom_meta_base_version, $version_cible) {
    	$maj = array();
    	$maj['create'] = array(array('maj_tables', array('spip_compobase_fabricants')));
    
    	include_spip('base/upgrade');
    	maj_plugin($nom_meta_base_version, $version_cible, $maj);

    Quelle erreur ai-je commise ?

    MERCI pour ton aide.

    • Salut bruno,

      Si tu veux up les champs faut désinstaller ou bien faire une maj dans ce fichier

      function compobase_upgrade($nom_meta_base_version, $version_cible) {
              $maj = array();
              $maj['create'] = array(array('maj_tables', array('spip_compobase_fabricants')));
              $maj['1.0.1'] = array(array('maj_tables', array('spip_compobase_fabricants')));
      
              include_spip('base/upgrade');
              maj_plugin($nom_meta_base_version, $version_cible, $maj);

      et modifier la version du shema dans le paquet.

    • Bonjour Pierre

      MERCI pour ton aide.

      Le problème de la désinstallation est qu’elle supprime les tables, avec les données évidemment. Et cela je ne peux le faire.

      Donc il reste la mise à jour manuelle de la fonction d’installation/upgrade, qui permettrait d’ajouter finement les champs tout en conservant les données.

      MERCI Pierre

    Répondre à ce message

  • Bonjour Matthieu,

    Petite remarque : la fabrique génère le fichier nom-plugin_options.php et il manque un espace dans la 3e ligne juste avant « au chargement » :

    * Options du plugin nom-pluginau chargement

    françois

    Répondre à ce message

  • 3

    Bonjour,
    Je viens d’essayer de télécharger la version 1.20.4 de La Fabrique mais, contrairement a ce qui est indiqué sur cette page, elle ne semble etre compatible qu’avec SPIP 3.1 ( [3.1.0-dev ;3.1.*] ).

    Alors, oublie de mise a jour sur cette page, ou erreur dans le paquet.xml ? ( l’option 2 serait plus pratique pour moi :) )

    Merci d’avance !

    Répondre à ce message

  • 1

    J’ai une petite remarque à faire : il faudrait signaler au moment de l’ajout des champs qu’ils doivent être en minuscule. C’est une restriction liée à SPIP. La Fabrique permet de créer des champs en camelCase, mais ils sont inexploitables dans les formulaires. Donc il faudrait que le plugin passe les champs par un strtolower() pour être fonctionnel, non ?

    • Je pense aussi que l’élément qui sert pour calculer le titre devrait être obligatoire car en pratique il sert pour les squelettes générés, ou presque

    Répondre à ce message

  • tche edja olivier amateur developpeur

    je cherche le code en php de par exemple lorsque on a un checkbox et trois champs de saisies on veut dit a la page que si le checkbox n’est pas selectionner faut geiser les trois champs

    Répondre à ce message

  • Bonjour

    Bravo matieu pour ce super plugin !

    j’ai une petite question, j’ai créé un plugin contenant 3 objets éditoriaux, Maisons, Appartements et Terrains , ils ont en commun un champ « ville », je voudrais savoir s’il y avait une astuce pour pouvoir faire une boucle spip sur les 3 objets éditoriaux ? sachant qu’ils partagent un certain nombre de champs (ville, code postal etc...)

    dans le genre :

    <BOUCLE_test (maisons terrains){id_rubrique}{par ville} >[...]

    Merci d’avance, sachant que je ne suis pas une bête en php :-(

    Marc

    Répondre à ce message

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom