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

  • 3

    Bonjour,

    Est-il possible de déclarer de nouvelles saisies pour quelles soient reconnues par La Fabrique lorsqu’on crée un nouvel objet éditorial ?

    Un exemple concret : je désire ajouter un select issu du plugin Pays ISO 3166-1. Au lieu de le faire à la min après avoir créé les fichiers de mon plugin, je voudrais que la Fabrique le fasse tout comme il faut.

    cf. http://zone.spip.org/trac/spip-zone/browser/_plugins_/fabrique/trunk/formulaires/fabriquer_plugin.html#L93

    • Hello

      Pourquoi ne pas mettre la saisies dans le plugins pays et ensuite l’utiliser depuis ton plugins ?
      Tout le monde en profiterais car je doute que cela est possible via la fabrique.

    • Justement Pierre, c’est le but.

      Le plugin Pays v3 va offrir de nouvelles saisies. Je voudrais que ces nouvelles saisies puissent être faire parti de la datalist de la Fabrique.
      (Les 2 nouvelles saisies en question vont permettre de sélectionner le Pays et de récupérer soit le #CODE_ALPHA3, soit le #CODE_NUM du pays.)

      Pour le cas ici de la Fabrique, c’est leur accès lorsqu’on construit un nouvel objet éditorial.

      Remarque

      Tout à fait par hasard, hier en mettant à jour le plugin Réglements, j’ai mis « factures » dans le « Type de saisies » et La Fabrique n’a pas bronchée. Elle a ajouté tout ce qu’il fallait et tout et tout.
      (cf. ici : http://zone.spip.org/trac/spip-zone/changeset/79290/_plugins_/reglements/trunk/formulaires/editer_reglement.html )
      Il faudrait peut-être documenté cet aspect. ;-)

      La Fabrique, c’est magique !

    • Oui je fais cela pour mes développement.
      La fabrique prend tout type de saisies en compte mais faut pas faire de faute de frappe car tout passe ;)

      Pour moi dans la data list on devrait liste tout les objets non ?

    Répondre à ce message

  • Super plugin !
    Merci beaucoup.

    J’aurais juste une question ?
    J’aimerai créer un champ hidden. Pas de soucis mais j’aimerais lui passer une value=id_auteur dans les options de saisies coté Fabrique, j’ai essayé avec #ID_AUTEUR, id_auteur, #SESSIONid_auteur rien à faire, je n’arrive pas à avoir l’id de l’auteur dans mon formulaire, la balise input hidden est bien là mais mon champ value est vide ??
    Pouvez-vous m’indiquer la méthode ?
    Merci

    Répondre à ce message

  • 2
    Christian

    Bonjour,

    j’ai une intérrogation concernant la gestion des langues dans un site multi-lingue.

    Le nouvel objet éditorial que j’ai créé avec la Fabrique tient bien compte de la langue par défaut du site. Si je change la langue par défaut, les multi de mon nouvel objet s’adaptent.

    En revanche les multi ne tiennent pas compte du contexte de langue de l’objet lui-même ou de la rubrique. Ils restent dans la langue par défaut.

    Est-ce que vous savez où je peux trouver la noisette qui gère ça pour tout SPIP pour que je puisse rajouter pour nouvel objet ou avez vous une autre piste ?

    Merci pour votre aide !

    Christian

    • David Mich

      Je reviens sur ce poste pour compléter la réponse de Matthieu.

      set_request(’champ’, implode(« , », _request(’champ’))) ;

      Marche très bien à une exception près ! En effet, si on ajoute des valeurs à la liste multiple ou dans mon cas à une suite de checkbox, cela marche. Si après, on décide de TOUS les enlever, aïe.

      J’ai donc modifier lègèrement le code :

      $testme = trim(implode(’ ’, _request(’champ’))) ;
      if (strlen($testme) == 0)set_request(’champ’, ’’) ;
      else
      set_request(’champ’, implode(« , », _request(’champ’))) ;

      en fait, apparemment, le champ n’est plus envoyé vers la base s’il est vide, et donc, dans la base, on garde les anciennes valeurs.

    • bonjour,

      merci encore pour ce petit bout de code qui me permet de sortir d’un gros souci que je venais de constater ... oui je sais .. que maintenant ....

      je vais finir par mettre une spéciale dédicace dans le plugin :)

    Répondre à ce message

  • 3

    Bonjour,
    Tout d’abord merci pour ce plugin qui ouvre beaucoup de perspectives.
    Pour ma part, je ne suis pas experte du tout en bases de données et je rame. Voici ma problématique : je voudrait réutiliser dans une base SPIP des tables générées dans une base joomla.
    J’ai intégré dans ma base SPIP les tables joomla qui m’intéressent et je voudrais maintenant créer un nouvel objet à partir d’une de ces tables.
    Je suis la procédure décrite dans la video pas à pas mais à chaque fois, au moment d’afficher le formulaire de l’objet dans l’espace privé j’ai 5 ou 6 erreurs de squelettes. Le formulaire n’est pas créé, j’ai juste la mention « aucun objet ».
    J’ai essayé autrement en connectant ma base Joomla moulinée par Joomla2spip à ma base SPIP : idem.
    Je me doute que je passe à coté de quelque chose et qu’il faudrait que je prenne des cours de SQL mais j’ai espoir qu’il y a peut-être une explication simple à mon problème ?
    Déjà est-ce que ce que j’essaye de faire est possible ?
    J’aimerais bien avoir quelques avis éclairés.... Merci si vous pouvez m’aider !

    • Bonjour, je pense que tu devrais te pencher sur les champs extras, dans le plugins « saisies » et créer ton propre traitement du champ personnel qui fait référence à tes données personnelles (de Joomla) de ta base.

      Tu devras modifier ou créer une boucle sur tes données qui se trouvent dans ta table personnelle (exemple « joomlaexemple »), par exemple

      < BOUCLE_maboucle (JOOMLAEXEMPLE) >
      ...

      Les fichiers à copier et à modifier se trouvent dans le répertoire « saisies » du plugins « saisies ».

      Ce n’est pas une mince affaire pour qui ne l’a jamais fait, mais il existe de nombreux tutoriels sur internet pour faire cela. Plutôt que de chercher des informations sur LaFabrique, cherchez plutôt sur le plugin saisies ou les champs extras personnalisés.

    • Bonjour Mich,
      Merci beaucoup pour ce conseil. J’avais pensé aux champs extra à un moment mais je me suis plus focalisée sur La fabrique après. Je vais essayer ce que tu dis et je reviendrai donner des nouvelles !
      Vraiment merci de ton aide !

    • J’ai pas mal avancé... Finalement, ce sont bien de nouveaux objets éditoriaux qui répondent à mon besoin. Un objet « candidature » et un objet « offre d’emploi » .
      J’ai réussi à les créer dans la fabrique et je peux enregistrer de nouvelles offres et de nouvelles candidatures. Mais j’ai un problème : je ne parviens pas à peupler mes tables. J’ai suivi la procédure (fichier d’import dans Base, et insertion du code dans le fichier xx_administrations.php à partir de l’administration de La fabrique). ça fonctionne, j’ai un message qui m’informe que 5000 et quelques références ont été copiées et qu’il en reste quelques centaines mais à partir de là, ça tourne dans le vide.
      La manip ne va pas jusqu’au bout et tout se retrouve bloqué.
      J’ai essayé de limiter les imports à une centaine de références mais je ne dois pas mettre le code au bon endroit, ça ne marche pas.
      J’ai l’impression d’être tout près du but. Qu’est-ce que je loupe ? Est-ce un problème de réglage du timeout ?
      Merci de m’aider si vous avez une idée...

    Répondre à ce message

  • Bonsoir,

    Un petit message pour signaler un « bug ». Quand on ajoute un nouveau champ à un objet, puis sélectionne « fieldset », on est obligé de renseigner la définition SQL. Après cela, lors de la création dudit plugin, le fieldset est ajouté en tant que champ « classique » à la base de données.

    Ce qui en soit n’est pas normal.

    Le soucis déjà vient de l’interface. Si on choisit fieldset, on ne devrait pas avoir à renseigner le type de champs. L’interface devrait reconnaître la sélection du type de champs.
    De même à la création du plugin et la génération des fichiers du plugin. Il devrait reconnaître « fieldset » comme le fait Champs Extras. ;-)
    Voilà pour la théorie. Maintenant, faut qu’on passe à la pratique. :-D

    Répondre à ce message

  • Mathieu

    Je commence à utiliser la fabrique et même si je tatonne un peu, je voudrais vous féliciter pour ce plugin. C’est top ! Merci

    Répondre à ce message

  • 2

    Bonjour,
    merci pour l’outil qui est absolument ce qu’il me fallait.

    J’ai un souci avec des objets « simplement liés ».

    j’ai créé sans problème un objet éditorial « contacts » (id_contact-nom-prenom-etc)
    j’ai créé en plus on objet « adresses » qui est de la forme (id_adresse-id_contact-type-contenu)

    L’idée est que chaque contact a un nombre X d’adresses qui sont de type [mail, tel, mobile,etc..] avec le contenu adéquat.

    Comment gérer cela
    -  dans le formulaire de contact de l’espace privé
    -  dans la liste des « adresses » de l’espace privé (puisque adresse est un objet éditorial qui apparait....)

    -  je sais écrire le formulaire spécifique dans l’espace public puisque déjà fait sur une version en SPIP 2. Mais grâce à la Fabrique, cela va devenir de jolis formulaires CVT corrects alors que les miens faisaient de l’insertion « en dur » ce qui est ..... au moins dangereux.

    • Je me réponds à moi-même pour éviter que les admins perdent du temps....

      1° tous les problèmes de contact sont gérés par le plugin « Contacts & organisations » et par le plugin « Plugin Coordonnées » (Merci à Mathieu et à Cyril).

      2° PAR CONTRE. je souhaite rajouter un objet « action » (facile, la Fabrique sait rajouter des objets) mais que je voudrais lier aux « organisations ». Ca me parait un peu lourdingue de recopier le code de « Plugin Coordonnées », y-a-t’il une vraie méthode ?

      Merci beaucoup !
      Michel

    • ma question est trop spécifique....

      Après avoir vu la video de Marcimat jusqu’au bout, je sais lier de façon multiple les objets éditoriaux (ca fait, en gros, comme les mots clefs)

      Ce que je souhaiterait c’est lier un nouvel objet « action » à un object « organisation » (facile) MAIS de façon univoque (comme un article est lié à sa rubrique)...

      Y’a t-’il déjà une méthode ou es-ce impossible (à ce moment là, je triche en espace public en écrivant les formulaires, mais l’espace privé est tout dégueu...)

      Merci !

      Michel

    Répondre à ce message

  • 2

    bonjour,
    j’ai une erreur de squelette dans prive/squelettes/contenu/objet.html
    cette erreur est lié à la balise #BOITE_OUVRIR qui a cette forme là :
    [(#BOITE_OUVRIR[ ... ],simple fiche_objet)]

    Si je remplace les crochets par des accolades, l’erreur disparait.

    Je veux bien faire la modif mais ça me semble bizarre que cette erreur apparaisse que maintenant.

    Cordialement

    • Bonjour,

      Il n’y a pas de raison à cela. Peut être n’as tu pas défini le champ qui indique le calcul du titre de l’objet. Sinon, peux tu poster le code complet de la boite ouvrir (entre <cadre class=spip>...</cadre>) ici ?

      MM.

    • Merci Matthieu,
      c’est ça,
      j’ai oublié de définir le nom du champ.

      Merci pour ta réponse

    Répondre à ce message

  • Je repose ma question j’ai fait une mauvaise manip sur mon message précédent :

    Bonjour,

    J’ai crée un objet éditorial, je voudrai que dans la partie publique du site les utilisateurs puissent depublier ou mettre à la poubelle cet objet, pour ce faire je veux utiliser #BOUTON_ACTION et #URL_ACTION_AUTEUR mais je ne sais pas quoi utiliser comme paramètre pour pouvoir réaliser la depublication ds l’espace public
    ci dessous le code :
    [(#GETnb_file|==1| ?#BOUTON_ACTIONSupprimer,#URL_ACTION_AUTEURobjet_instituer,#ID_NOTE/poubelle,[(#SELF)],ajax,Note supprimée)]

    Merci de votre aide.

    Répondre à ce message

  • 4
    BOURDEAU Alain

    Bonjour,
    erreurs blocante :

    Attention : un problème technique (serveur SQL) empêche l’accès à cette partie du site. Merci de votre compréhension.

    J’ai cette erreur dans l’étape : création d’un objet. jusqu’à cette étape la création du plugin est ’normale’.
    Ce même message est affiché lorsque je veux retourner dans fabrique. Je ne peut aller plus loin.

    Je suis en local ubuntu 12.04 64bits spip 3.0.8 20422 et fabrique 1.17.0 67099

    • BOURDEAU Alain

      Idem avec une mise à jours de fabrique 1.18.1 71828 et aprés avoir enlevé les traces de la version précédente.
      Une recharge de l’archive remets l’accés à la fabrique mais re plante dé l’ajout d’un objet éditorial.
      Autre indication si ça peut éclairer, la page privée est alors perturbée dans le haut de la page.

    • Ah je crois qu’on a déjà eu ce cas (pas corrigé) qui serait du à la présence dans config/ d’un fichier de connexion non valide (genre un ancien renommé en connect.old.php).

    • BOURDEAU Alain

      Bonjour,
      Je viens de ’trouver’ ce qui coince (un peut tardivement).
      Si dans /config, il existe des fichiers de déclaration complémentaires de tables du style : thelia_2.php , alors la fabrique perd ses billes pour la création des objets éditoriaux.

      Le plugin, explore-t-il ’trop’ de .php dans /config ?

      MErci bien

    • BOURDEAU Alain

      Je complète :
      Si j’ai convenablement regardé, il se pourrait que ce soit dans :
      V1.18.1/fabrique/formulaires/fabrique_plugin.php entre les lignes 737 et 762.
      Amicalement Alain

    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