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

  • 1

    Lorsque j’affiche dans un squelette les champs créés avec la fabrique, je dois explicitement passer le filtre « propre » pour pouvoir afficher « proprement » le contenu, avec les sauts de ligne et autres jolies foritures d’affichage de spip.
    Y a-t-il quelque chose que j’aie loupé ?
    Faut-il mettre un paramètre lors de la définition des champs ?

    • Voir la doc sur table_des_traitements dans http://programmer.spip.net/declarer_tables_interfaces,379.

      Ensuite vous devez intégrer tout ça dans le fichier prefixeplugin/base/prefixplugin.php, et enfin secouer SPIP plus violemment qu’une bouteille d’Orangina pour que cela prenne effet :)

      Plus concrètement , sur ce dernier point, je crois avoir trouver une recette
      1- désactiver votre plugin ;
      2- faire la modif et changer la version du plugin (up de z comme ont dit) ;
      3- vider le cache du site ;
      4- réactiver le plugin.

      Ça devrait être bon.

    Répondre à ce message

  • 2

    Bonjour,

    En local ubuntu 14.4 64bits et un spip tout neuf 3.1 (même problème avec un spip réputé mis à jour), rien n’est présenté dans l’onglet « squelettes » pour démarrer avec la fabrique ?

    que pourrai-t-il me manquer ?

    MErci bien Alain

    • Natacha Courcelles

      Bonjour
      en attendant appelez ecrire/ ?exec=fabrique

      Natacha

    • Avec SPIP 3.1, l’accès à la Fabrique se fait via le nouveau menu Développement.
      L’activation de ce menu se fait en allant sur la page « Mes préférences » (/ecrire/ ?exec=configurer_preferences).

      À noter que ce menu n’est activable que par un webmester.

    Répondre à ce message

  • Apparemment la Fabrique oublie d’ajouter un H1 au début des pages de liste d’objets (exec=patates). Donc pas de titre principal à la page, et donc pas non plus de titre dans la fenêtre/onglet.

    À priori il faudrait ajouter à minima le titre de l’objet au pluriel « Patates » (ou une nouvelle chaîne ajoutée « Toutes les patates » ?), juste avant le formulaire de recherche.

    Répondre à ce message

  • 3

    Bonjour,
    Bravo et merci pour ce magnifique plugin très impressionant.
    A force de modifications d’un plugin, en particulier l’ajout de nombreux champs à un objet éditorial, sans savoir désactivé le plugin au préalable, j’ai dû désinstaller mon plugin.
    Lors de la réactivation, la table de l’objet n’est pas recréée.
    Je ne trouve pas comment recréer cette table qui me manque...
    MErci,
    Sylvain

    • Problème non résolu.
      Je réinitialise tout, recommence un plugin tout neuf.
      J’ajoute un objet éditorial.
      J’ajoute des champs, je teste le plugin, tout va bien.
      Au bout d’un certain nombre de champs (64), je reteste : le plugin ne veut pas s’installer, j’insiste, il s’installe, mais ensuite la table de l’objet a disparu.
      Je désactive et/ou désinstalle, réactive, je reviens en arrière avec les backups, rien à faire, même avec la toute première version de sauvegarde (sans l’objet editorial), il cherche la table, qui n’existe pas(Erreur SQL 1146 Table ’matable’ doesn’t exist ).
      J’’ai bien vu le message concernant max_input_vars, je l’ai ajouté au php.ini, cela ne change rien.

      une idée ?

    • Le bug : j’avais un nom de champ qui contenait un « - » et non un « _ », ce qui provoquait une erreur sql lors de la création de la table.
      Merci infiniment Marcimat pour la piste : regarder les logs de tmp/var/mysql.log

    • euh... tmp/log/mysql.log ... !

    Répondre à ce message

  • 1
    Spipmalion

    Pour info : La Fabrique écrit en autorisation :
    autoriser_configurer_nomplugin_dist
    alors qu’en fait c’est :
    autoriser_nomplugin_configurer_dist
    qui fonctionne (en tout cas « pour moi »)

    Répondre à ce message

  • Dudfactory

    Encore une question, cette fois cosmétique.
    Lorsque je crée une sélection ou une checkbox, le squelette dans la partie privée me renvoie clé1, clé2 ou clé3 au lieu des valeurs correspondantes à ces clés. Quelle syntaxe faut il utiliser pour afficher les valeurs au lieu des options ? Merci encore pour vos réponses.

    Répondre à ce message

  • Dudfactory

    Bonjour,
    Un grand merci pour ce plugin qui permet d’étendre les possibilités déjà nombreuses de Spip. Dans mon premier plugin, j’ai crée un champs de type Fieldset. Cependant, une fois mon fieldset crée, comment ajouter des champs à l’intérieur de ce fieldset. Merci d’avance pour vos réponses.

    Répondre à ce message

  • 4
    Spipmalion

    Le lien vers le .zip de la version 2.0.19 donne à télécharger la version 2.0.21 qui ne fonctionne qu’avec SPIP 3.1 : compatibilite=« [3.1.0-dev ;3.1.*] »

    Répondre à ce message

  • 5

    Secteur par défaut

    Bonjour,

    Comment configurer un secteur par défaut pour chaque nouvel Objet Editorial créé avec la Fabrique ?

    Après install du plugin j’ai tenté de définir une valeur par défaut du champ id_secteur ( et aussi id_rubrique ) directement dans la DB sql,
    mais SPIP écrit invariablement id=1 (par défaut)

    Merci.

    • Bonjour,

      Dans ces lignes,
      je vais préciser ma requête
      et vous informer de ce qui ne fonctionne pas...
      ... Faute d’avoir trouvé une solution :-(

      Le but :

      Imposer un secteur pour un type d’objet éditorial créé avec la Fabrique

      car lors de la création de l’objet,
      si dans Champs spéciaux on coche :

      • Créer le champ id_rubrique
      • Créer le champ id_secteur

      , malheureusement,
      ils ne proposent pas de renseigner une valeur par défaut qui serait passée dans le contexte d’édition NEW.

      Cela affiche dans le squelette editer_objet.html
      un champs déroulant Rubriques qui propose toutes les rubriques.

      Je cherche donc le moyen de réduire ce choix à un seul secteur et ses sous-rubriques

      le code responsable de ce champ déroulant semble être :

      [<li class="editer editer_rubrique[ (#ENV**{erreurs/id_parent}|oui)erreur]">
      		<label for="id_parent"><:titre_cadre_interieur_rubrique:></label>[
      		<span class="erreur_message">(#ENV**{erreurs/id_parent})</span>
      		]
      		(#VAL|chercher_rubrique{#ENV{id_produit},#ENV{id_parent},'produit',#ENV{id_secteur},'',0,form_simple})
      </li>]

      bien que je sois incapable de l’analyser précisemment c’est chercher_rubrique qui pose problème
      et le fichier php associé dépasse aussi mon entendement ( SPIP... CMS sans connaitre php.... @@@@TCHOOM !!!)
      (c’est de ma faute j’suis pas tombé dedans petit )

      chercher_rubrique.php dit au début :

      // Selecteur de rubriques pour l’espace prive
      // En entree :
      // - l’id_rubrique courante (0 si NEW)
      //.....

      et l’url est :

      /ecrire/?exec=objet_edit&new=oui

      Donc NEW ???

      Je tente :

      /ecrire/?exec=objet_edit&new=oui&id_secteur=2 

      => échec !

      /ecrire/?exec=objet_edit&new=oui&id_rubrique=2

      => pré-sélectionne la rubrique2 mais les autres secteurs restent accessible donc les erreurs de saisies aussi !

      C’est pour l’instant la moins PIRE solution
      -  
      -  
      Ce qui n’a pas fonctionné car SPIP enregistre invariablement id_rubrique=1

      • valeur par DEFAULT des champs SQL par modification directe de la DB
      • Dans :./plugins/fabrique_auto/mon_plugin/formulaires/editer_produit.php le paramètre $id_rubrique=0 apparaît à plusieurs reprises (3)→ Modification pour $id_rubrique=n
      • Dans : ./plugins/fabrique_auto/mon_plugin/formulaires/editer_produit.html suppression de :
      [<li class="editer editer_rubrique[ (#ENV**{erreurs/id_parent}|oui)erreur]">
      		<label for="id_parent"><:titre_cadre_interieur_rubrique:></label>[
      		<span class="erreur_message">(#ENV**{erreurs/id_parent})</span>
      		]
      		(#VAL|chercher_rubrique{#ENV{id_produit},#ENV{id_parent},'produit',#ENV{id_secteur},'',0,form_simple})
      </li>]

      → n’affiche plus le choix déroulant des rubriques
      et ajout des saisies :

      <input type='hidden' name='id_secteur' value='n' />
      <input type='hidden' name='id_rubrique' value='n' />

      dans mon cas n=2

      J’ai aussi tenté sans résultat plein de modif des critères associés à chercher_rubrique

      Voilà où j’en suis après des heures et plus de recherches et d’essais, que cela puisse servir ....

    • Pour affecter par défaut un id_secteur, tu peux passer par le pipeline pre_insertion

      Méthodo
      Note importante : à ma connaissance, le code ci-dessous ne peut pas être géré via les formulaires de la Fabrique. Donc une fois que tu en as terminé avec la Fabrique, tu peux utiliser le code suivant :

      Dans le fichier base/prefix.php, insérer le code suivant :

      function prefix_pre_insertion($flux) {
         if ($flux['args']['table'] == 'spip_matable') {
             $flux['data']['id_secteur'] = '12'; // 12 par exemple
             $flux['data']['id_rubrique'] = '38';  //  38 par exemple
         }
      return $flux;
      }

      et dans le fichier paquet.xml

      ....
       <pipeline nom="pre_insertion" inclure="base/prefix.php" ></pipeline>
      ....
    • Bonjour, dans le même ordre d’idée, je souhaite lier mon nouvel objet éditorial (Participations) lors de l’édition d’un nouvel événement. Jusque là pas de soucis avec le plugin fabrique. Cependant, comment transmettre l’id_evenement à l’objet participations en lieu et place d’un titre ? En effet, cet objet (Participations) ne servirait que de conteneur à un objet éditorial du plugin (Contacts & Organisations). Ensuite, un autre objet éditorial (Catégories) lié à (Participations) me permettrait d’ajouter autant de Catégories nécessaires pour une Participation et Une école... Là, je cale...

      Un petit coup de pouce serait bienvenu :-/

    • Cependant, comment transmettre l’id_evenement à l’objet participations en lieu et place d’un titre ?

      Pas sûr de comprendre ?

    • Oui, j’imagine que c’est abstrait dit comme ça :-(

      Je poste donc un schéma....

      Peut-être que je me complique moi-même la vie là où il ne le faut pas...

    Répondre à ce message

  • 1
    Eric Luyckx

    Bonsoir

    super contrib

    je cale sur une petite fonction : je voudrais que l’#ID_AUTEUR de celui qui remplit le formulaire soit associé dans un champs… impossible d’y arriver (y compris avec la table_liens)
    j’ai dû zapper qqchose.

    s’il y a une solution je suis demandeur :-)

    Eric

    • Eric Luyckx

      je me réponds :-)

      si on utilise pas id_auteur comme colonne SQL et qu’on permet les liens sur auteurs > l’id_auteur est attribuée

      désolé du bruit

      à+ éric

    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