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

  • 4

    Un grand merci pour ce plugin absolument fantastique !
    Un tout petit truc rigolo : le plugin peut prendre __connect.php pour le legitime connect.php ce qui peut induire de longues minutes, heures d incompréhension pour les p’tits gars qui ont l habitude de désactiver des fichiers en leurs collant une petite flopée de underscore devant....
    amicalement
    triton

    • Je n’ai pas compris. Il le prend comme légitime où ? pour montrer la liste des tables importables ? Mais dans ce cas, elles sont affichées après le connect.php normal non ?

    • Bonjour,
      si dans mon dossier config j ai un fichier __inc_connect.php avec une chaine de connexion incorrecte
      -  je vais dans « fabrique>restauration/réini... »
      -  je charge un fichier fabrique_plug.php
      >>> OK
      -  Je retourne dans l onglet : « Fabrique à plugins »
      j ai au niveau de l’affichage du div.contenu le message :
      « Site en travaux
      Attention : un problème technique (serveur SQL) empêche l’accès à cette partie du site. Merci de votre compréhension. »
      je viens de refaire la manip, bon d’un autre coté, a part moi, qui se trimbale avec des fichiers __inc_connect.php incorrectes dans son config ?

      triton

    • ah tu veux dire que si y a un connecteur foireux, ça plante ?

      j’avais pas pensé à ça pour le coup.
      hum…

      à l’occasion je regarderai…

      MM.

    • voila ! un « connecteur foireux », j’avais pas le terme technique....
      et oui, ça ne doit pas concerner grand monde comme problème....
      par contre j avais une autre question plus importante... est il possible de faire des clés uniques composites avec la Fabrique ?
      ’key’ => array(
      « PRIMARY KEY » => « id_truc »,
      « UNIQUE machin_unique » => « id_machin,id_option_du_machin »
      Je continue à tester la fabrique
      merci bien
      triton

    Répondre à ce message

  • 3

    Bonjour,
    Sous spip 3.0.5
    j’obtiens systématiquement les messages d’erreur lors de la création d’un plugin avec des champs issus d’un ’peuplement’ depuis une table existante ou avec un champs int(11) :

    1 Erreur SQL 1064
    You have an error in your SQL syntax ; check the manual that corresponds to your MySQL server version for the right syntax to use near ’’ at line 4
    SELECT les_equipes.id_les_equipe, 0 as points, ’’ FROM spip_les_equipes AS les_equipes GROUP BY les_equipes.id_les_equipe ORDER BY 0+
    ../plugins/fabrique_auto/test/prive/objets/liste/les_equipes.html _liste_les_equipes
    4

    Celà est-il dù à une table vide ?
    si non, ou faut-il bricoler pour faire sauter cette erreur de ’fabrique’ ?

    Merci bien

    • En changeant le type de variable pour varchar(30) j’ai alors :

      SPIP 3.0.5 [19905] est un logiciel libre distribué sous licence GPL.
      + écran de sécurité 1.1.3

      Pour plus d’informations, voir le site http://www.spip.net/fr.
      2 Erreur(s) dans le squeletteNuméro message squelette boucle Ligne
      1 Filtre ,<:les_equipe:label_ :>,ajax}) non défini ../plugins/fabrique_auto/test/prive/objets/liste/les_equipes.html / 12
      2 Erreur SQL 1064
      You have an error in your SQL syntax ; check the manual that corresponds to your MySQL server version for the right syntax to use near ’’ at line 4
      SELECT les_equipes.id_les_equipe, 0 as points, ’’ FROM spip_les_equipes AS les_equipes GROUP BY les_equipes.id_les_equipe ORDER BY 0+
      ../plugins/fabrique_auto/test/prive/objets/liste/les_equipes.html

      C’est avec fabrique 1.17.0
      Que faire ?
      Merci bien

    • Tu as bien renseigné le nom du la colonne servant à calculer les titres dans la déclaration de ton objet ?

      Par ailleurs, il est possible qu’il puisse y avoir des bugs avec les noms de tables en plusieurs mots (comme spip_les_equipes) mais il me semblait avoir corrigé cela pourtant.

    • Merci pour ta réponse.
      Bingo,
      C’est effectivement l’erreur. oubli de déclarer dans l’onglet ’champs spéciaux’ le nom de la table pour le titre.
      Je vais pouvoir aller plus loin.
      Merci bien

    Répondre à ce message

  • 4

    Bonjour,

    Tout d’abord un grand merci à Matthieu pour la fabrique qui rend la création d’un objet éditorial perso carrément plus facile que s’il fallait le faire à la mimine.

    Et maintenant quelques questions :

    • Pourquoi est ce que le listing de mes objets éditoriaux dans la partie publique me retournent tous la même URL : monobjet0 ? Alors que dans ma boucle, l’ID est correcte (1,2,...6), la balise #URL_MONOBJET retourne systématiquement monobjet0 ce qui m’envoie bien évidement sur une page d’erreur 404.
    • Quelle méthode (quelles boucles ?) pour lister correctement mes articles objets éditoriaux perso triés par dates sur ma page publique ? Il me semble avoir trouvé un lien (forum ?) qui en parlait, mais cette méthode ne permettait pas de conserver la pagination. Une piste ?
    • Est il possible de lier un forum privé à un objet éditorial perso (de la même manière que pour les articles) ?
    • Et enfin une question qui a déjà été posée mais peut être qu’une solution a été trouvée depuis : toujours rien concernant l’ajout d’images (upload, portefolio...) dans un objet éditorial perso ?

    Merci pour votre aide :)

    • Et je m’auto réponds une première fois :

      • J’ai bêtement utilisé #URL_MESOBJETS à la place de #URL_MONOBJET. L’url fonctionne parfaitement, c’est le combo « mes yeux + mes doigts » qui ont un peu de mal.
    • Je continu mon petit bonhomme de chemin, et une nouvelle interrogation se pose :

      • Est il possible d’utiliser la balise #INTRODUCTION sur un objet éditorial perso ?

      A première vue je dirais que non, elle ne récupère rien de ce que j’ai pu écrire dans les champs de mon objet.
      Mais est il possible de reproduire ce principe ?
      Que sur la page de l’espace public listant mes objets, je puisse avoir les XX premiers caractères d’un champs de mon objet ou bien ce qui se situe entre les balises <intro> et </intro>.

      Merci !

    • Et c’est encore moi !

      Cette fois ci j’ai un soucis avec l’affichage de la liste de mes objets pour un auteur donné.
      La boucle <BOUCLE_fiches(CDPHDAFICHES) {id_auteur}> ne sort rien.

      Je suis allez voir en mode debug ce que cela donnait, et j’ai tilté la dessus :
      $command['from'] = array('cdphdafiches' => 'spip_cdphdafiches','L1' => 'spip_cdphdafiches_liens');.
      Alors que pour la même boucle sur « articles » j’ai :
      $command['from'] = array('articles' => 'spip_articles','L1' => 'spip_auteurs_liens');

      On voit bien que Spip ne va pas chercher au bon endroit.
      Est-ce parce que j’ai eu la bonne idée d’utiliser un champs ayant pour nom « liens » dans mon objet éditorial perso ?
      Ou bien est ce une option de la fabrique que j’aurais coché / décoché maladroitement ?

      Merci !

    • Pour le dernier commentaire, c’est que tu as des tables de liens sur les 2 objets (le tien et auteurs). Par défaut il lie au plus près. Cf. http://marcimat.magraine.net/SPIP-3-Documents-Mots qui est du même acabit pour contourner.

    Répondre à ce message

  • 1

    Bonjour,

    super plugin, bravo !
    cependant, j’ai un plugin avec deux tables, je peux ajouter ou modifer mais pas SUPPRIMER un enregistrement !!!!!
    j’ai pourtant mis les bonnes options !
    une idée ?

    merci d’avance

    • Comme dit sur spip-zone, c’est peut être un problème de nom d’autorisation qui est incorrect quelque part. Soit dans l’appel, soit dans la fonction elle même. Quel est le nom de l’exec (url de la page privé) qui te provoque ce bug ? quels sont les autorisations qui ont été créées dans ton plugin dans le fichier d’autorisation ?

    Répondre à ce message

  • 2

    Bonjour,

    Dans l’espace privé tous les contenus d’un objet sont affichés les uns sous les autres, et les labels ne sont pas distingués.
    Comment faut-il faire pour « styler » la page d’un objet dans l’espace privé ?

    • Bonjour,
      Le pages dans l’espace privé sont composées de plusieurs bouts de squelettes imbriqués, ce qui vous intéresse ici ce sont les listes d’objets.
      Il faut d’abord activer dans la Fabrique l’option qui va lui indiquer de générer le squelette correspondant, en l’absence de celui-ci dans votre plugin c’est un squelette générique qui est utilisé.
      Vous pourrez ensuite modifier le fichier, qui se trouvera dans <répertoire du plugin>/prive/objets/liste/<nom de l'objet>.html

    • tu peux créer aussi un fichier dans ton plugin prive/styles_prive_plugin_xx.html (je crois) et mettre tes styles dedans.

    Répondre à ce message

  • 1
    Alex Massoutier

    Bonjour,

    Tout d’abord félicitation pour ce plug_in ambitieux qui va permettre de bien personnaliser les sites.

    Env. de travail (spip 3.0.5, XP, Wamp) ; mon nouvel objet s’appelle tableau

    Je suis dans l’install d’un nouvel objet éditorial et je rencontre 2 difficultés :

    1) Via le menu édition je ne parviens pas à VOIR mes tableaux ?? SPIP me retourne que je n’ai pas d’autorisations. Or dans « tableau_autorisations.php » la fonction autoriser_tableaux_voir_dist () renvoie true simplement, soit sans conditions de statut ou autres... Pour tester j’ai modifier cette valeur par celle qui réserve la possibilité à l’administrateur (par ex. pour CREER tableau qui fonctionne) ; mais malgré désinstall et réactiv du plug-in je tombe toujours sur la page qui m’interdit de voir les tableaux...?? Une idée ?

    2) Malgré tout, dans mon squelette rubrique-X spécifique à la rubrique qui contient mes tableaux (les tableaux crées sont associés à une même rubrique), je devrais pouvoir voir les images associées à mes tableaux (j’ai essayé #LOGO_TABLEAU en utilisant un logo ; j’ai essayé de lier à cet objet la possibilité de mettre un PORTFOLIO mais une boucle DOCUMENT dans ma boucle TABLEAU (fonctionnelle puisque #TITRE s’affiche) elle-même dans ma boucle RUBRIQUE (évidemment...) n’affiche rien... ? Mystery...

    Voilà. SI quelqu’un peut m’éclairer sur ces difficultés c’est super.

    Merci.

    Alex

    • Salut Alex,

      A tout hasard, as tu vérifié dans ton dossier IMG la présence d’une image ayant pour nom « tableauonXX » ? Peut être est ce un soucis d’upload ?
      Et encore à tout hasard, vérifie bien que tu utilises le nom au singulier de ton objet éditorial. J’ai par mégarde utiliser le nom pluriel et j’ai cherché un bon moment avant de comprendre ma bêtise.

    Répondre à ce message

  • Tous simplement génial ! Ce plugin est une révolution pour moi, merci !

    Répondre à ce message

  • 1

    Une petite erreur dans la génération d’un objet éditorial qui à pour effet de ’planter’ le sélecteur de rubrique lorsque la profondeur des rubriques est égale ou supérieure à trois.

    Dans le fichier « fabrique/formulaires/editer_objet.html.html » il faut corriger la ligne 28

    \[<li class="editer editer_rubrique\[ (\#ENV**{erreurs/id_parent}|oui)erreur\]">

    par ...

    \[<li class="editer editer_parent\[ (\#ENV**{erreurs/id_parent}|oui)erreur\]">
    • Ouuups... je suis allé trop vite. Il y a bien un problème, mais ma « solution » ne le résoud que partiellement.
      Ce problème est manifestement connu puisque un ticket a été posté à ce propos.

      Désolé pour le bruit .

    Répondre à ce message

  • 1
    Stéphane Santon

    Bonjour,

    Quelle méthodologie pour gérer l’évolution du plugin créé par la Fabrique ?

    Par exemple, je crée le plugin de base, avec un objet éditorial, dans fabrique_auto.
    J’y ajoute quelques fichiers, modèles, noisettes, ...
    Faut-il les mettre dans le dossier d’origine du plugin ?
    Ensuite si je mets à jour le plugin par la fabrique (nouveaux champs, ...), que prend le backup, comment la nouvelle version du plugin prend-elle en compte mes fichiers ajoutés ?

    Merci

    • Salut !

      Perso je crée deux plugins (ou plus) :

      -  le plugin « core » : généré par la fabrique (avec la définition des objets et des formulaires associés).
      -  le plugin « interface » : pour les squelettes et compagnie... (qui nécessite le « core »)

      Donc quand je mets à jour le plugin « core », la Frabrique ne touche pas au plugin « interface » et donc n’efface rien...

      Tu peux aussi décliner en plusieurs autres plugins (pour un projet, j’avais aussi un plugin « autorisations » et un autre « peupler » pour remplir la base)

    Répondre à ce message

  • La Fabrique ne parvient pas à retrouver certains de ses propres squelettes lors de la création du plugin.
    Il en résulte évidemment la génération de fichiers vides dans le plugin.

    Environnement :
    -  Windows 7
    -  WAMP 2 (Apache 2.2.17, PHP 5.3.4, MySQL 5.1.53)

    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