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

  • 2

    Bonjour,

    Des pistes pour enrichir le plugin et permettre l’ajouts de documents et images aux objets éditoriaux ?

    Je ne suis pas un fin connaisseurs de SPIP, mais nous serions intéressés, avec un collègue, à intégrer cette possibilité.

    Si on pouvais nous dire, en vrac, où fouiller (ou peut-être n’est-ce pas possible à cause de SAISIES qui ne propose pas ces champs ?)

    Merci

    • Gérér directement les documents en tant que champ de type file va être très compliqué. Saisies, ni Formidable ni Champs extras ne permettent d’ailleurs cela encore.

      Cela dit, pour lier des documents, il suffit d’activer ce nouveau type d’objet dans la configuration de la médiathèque. Ainsi, le choix de documents apparaît.

    • Merci. Ça répond partiellement au problème que nous souhaitons contourner :)

      Bonne journée !

    Répondre à ce message

  • Bonjour,
    Il doit y avoir un petit bug dans la création du fichier /prive/objets/liste/toto.html
    en effet il ajoute une virgule après #TRI :

    <th class='' scope='col'>[(#TRI{,<:toto:label_:>,ajax})]</th>

    ce qui provoque une petite erreur de squelette.
    Sans cette virgule, cela fonctionne.

    Cdt

    tofulm

    Répondre à ce message

  • / !\ attention : pour que cela fonctionne, il m’a fallu :
    -  rajouter un « s » à $interface
    -  remplacer les « ’ » par « ’ »

    $interface[’table_des_traitements’][’SLOGAN’][’plugins’] = _TRAITEMENT_RACCOURCIS ;

    Merci Matthieu pour ce super plugin

    Répondre à ce message

  • Bonjour,
    Je suis en train de faire des tests avec le plugin fabrique qui est très sympa, mais j’avais encore quelques questions sur les objets :

    • Est-il possible de les hiérarchiser ? (Je voudrais créer des listes de boutiques, est-il possible de traiter un objet « ville » comme une rubrique et un objet « boutique » comme un article ?
    • Si ce n’est pas possible, comment faire pour qu’une rubrique soit publiée si elle possède des objets « boutique » mais pas d’article ?
    • Je n’ai pas non plus réussi à associer un objet à un article : y-a-t’il une manipulation que j’aurai ratée ?

    Répondre à ce message

  • Pour reproduire le bug du logo
    A savoir que je suis sous php 5.4.4 et Firefox 14.0.1

    Tu choisis le nom du plug
    Tu mets une image comme logo
    Dans paquet, tu remplis les champs vide prefix et cat

    tu cliques sur « creer un plugin »

    Après, tu vides le cache de spip via l’espace privé et quand tu reviens dans la fabrique, le logo n’est plus visible !

    D’ailleurs, si tu cliques sur « creer un plugin » sans rien faire, tu as un messages avec « Des fichiers ont été supprimés lors de cette nouvelle création. » avec les nom des fichiers effacer.

    Répondre à ce message

  • 4

    Un grand merci et bravo !

    Petit bug de mon côté en spip 3.0.4 : impossible d’attribuer des logos à plus d’un objet éditorial (seul un objet éditorial accepte un logo, les autres ne sont pas pris en compte après upload)

    Le fait que le plugin ait un logo ou non ne change rien.

    Comme rien n’empêche d’ajouter ses logos à la main, ce n’est pas du tout bloquant ;)

    • Je ne reproduis pas. Qu’est-ce qui ne fonctionne pas plus précisément ?

    • De mon côté je peux le reproduire : je vais regarder du côté des logs avant de te prendre du temps.

    • Edouard

      J’ai le même bug.
      lorsqu’on fabrique deux objets d’un coup, et qu’on installe le plugin. un des deux objets n’a pas ses logos.

    • Je confirme un souci avec les logos.

      Je fais un plugin qui ajoute plusieurs objets éditoriaux et les logos se sont bien enregistrés jusqu’au 6e objet. Pour ce dernier, pas moyen d’enregistrer le logo : je choisis le chemin vers l’image et il ne semble pas pris en compte du tout (quelle que soit l’image, y compris identique aux logos déjà placés sur les 5 autres objets éditoriaux) : le champ est vidé et aucun logo n’est utilisé.

      Normalement c’était mon dernier objet éditorial, mais si j’en rajoute : pas moyen non plus de leur donner un logo...

    Répondre à ce message

  • 3

    Coucou !

    Je me joins aux autres pour dire combien La Fabrique est magnifique ! Ce plugin justifie à lui seul l’utilisation de SPIP 3 pour tous les nouveaux projets !

    J’ai malheureusement un petit souci. Je crée un objet éditorial nommé « parcours »... invariable, donc. Et c’est là le souci.

    Malgré le fait que j’aie renseigné le champ « Type de l’objet » dans « Tables>Spécificités de table hors norme » avec « parcours » (donc avec le « s ») et « Clé primaire » avec « id_parcours » (avec le « s » aussi), le plugin créé dysfonctionne un peu :

    L’URL des liens dans la partie privée pour l’objet « parcours » mènent vers : «  ?exec=parcours »... mais cette page conduit vers le message :

    Accès interdit
    Vous n’avez pas le droit d’accéder à la page parcours.

    Car les contenus générés par La Fabrique sont dans «  ?exec=parcour » (sans s !!!)

    (je ne suis pas sûr d’être clair...)

    De même, dans la partie publique, SPIP cherche « parcour.html » dans squelettes et non « parcours.html ».

    Bref, le mot invariable qui fini par un « s », c’est le drame ! ce serait bien si c’était le « Type de l’objet » qui était utilisé pour générer les URL (partie publique et privée)... Mais je ne sais pas trop où modifier La Fabrique pour ça !

    • Oui enfin là ce n’est pas spécialement la Fabrique le problème. Disons que SPIP n’est pas prévu, sans son fonctionnement automatique d’objet, pour que le type d’objet soit de même valeur que le nom de table, c’est à dire avoir ’parcours’ pour le type (singulier disons) et ’parcours’ pour l’objet (pluriel disons). Si tu veux absolument un truc comme ça (je ne sais pas si c’est possible simplement) il te faut créer des squelettes et des liens différents pour un des 2 états. Par exemple suffixer de _tous les squelettes d’affichage des listes (pluriel) et faire en sorte que les liens pointent dessus (certainement créer des fonctions de génération d’url privée pour ton objet).

      Il faut comprendre que le comportement de SPIP avec les objets automatiques c’est de faire une page exec=$objet pour afficher la liste des éléments tel que exec=choux et exec=$type pour afficher 1 des éléments tel que exec=chou . Évidemment que si les 2 ont la même valeur, ça lui pose souci :)

      Bref je n’ai pas là de solution évidente sans regarder, mais peut être en trouveras tu une et nous l’expliquera ?

    • Merci pour ta réponse rapide pleine d’explications...

      Le fonctionnement interne de SPIP devient de plus en plus complexe pour moi, alors je ne sais pas si c’est possible, mais quand le nom de l’objet éditorial est invariable, peut-on forcer l’espace privé à distinguer exec=lestrucs et exec=trucs (donc rajouter « les ») ? Est-ce envisageable ?

    • Bon... finalement j’ai bien mieux : faire l’inverse de ce que je proposais dans le message précédent... au lieu de demander à SPIP de mettre un "les" quand c’est au pluriel, je rajoute moi-même un "un_" quand c’est au singulier :

      Pour « Type de l’objet » j’indique à La Fabrique "un_parcours" au lieu de "parcours" et ça a l’air de marcher du tonnerre !

      • Côté Privé, SPIP ne s’emmêle plus les pinceaux et distingue bien " ?exec=parcours" pour la liste des objets de " ?exec=un_parcours" pour la page de l’objet
      • Coté Public, #URL_PARCOURS renvoie bien vers « ?page=un_parcours&id_parcours=XXX ».

      Donc pour l’instant tout va bien ! Face aux nom d’objets invariables, la solution semble être de préciser « un_ » ou « une_ » devant le « Type de l’objet ».

    Répondre à ce message

  • 1

    Bonjour,
    (Félicitations encore une fois pour ce beau joujou ;) )

    Petite question : je ne suis pas arrivé a trouver ou on peut sélectionner un traitement a appliquer au(x) champ(s) d’un nouvel objet qu’on créerait. Est-ce que je loupe qqch, ou il faut le(s) définir « a la main » dans le fichier /base/xxx.php ?

    Merci !

    • À la main (pour l’instant).

      Cf. une copie du texte que viens d’envoyer pour Édouard sur la liste user :

      En fait, SPIP applique des traitements par défaut à certains noms, tel que ’nom’, ’titre, ’texte’, ’descriptif’ ...

      En dehors de ces noms de champs là, il n’en applique pas : il faut les déclarer soi-même. (il faudrait peut être faire une option de plus pour chaque champ du coup dans la fabrique).

      Mais cela se passe donc par une modification du code créé par la fabrique en ajoutant dans le pipeline d’interface quelque chose comme :

      $interface[’table_des_traitements’][’SLOGAN’][’plugins’] = _TRAITEMENT_RACCOURCIS ;

      plugins étant là le nom de la table sans spip (spip_plugins), slogan le nom du champ.

      Il existe aussi _TRAITEMENT_TYPO et _TRAITEMENT_TYPO_SANS_NUMERO dans les traitements prédéfinis.

    Répondre à ce message

  • 3

    Dans les exemples donnés en commentaire dans le fichier xxx_administrations.php il y a une coquille me semble-t-il : ne serait-ce pas sql_alter au lieu de sql_alert (lignes 32 à 36) ?

    Répondre à ce message

  • 1
    pascal weber

    Superbe outil !

    Question subsidiaire : est-il possible de rendre un plugin créé via la Fabrique rétro-compatible avec spip 2.1 ? Est-ce possible en créant le fichier plugin.xml par exemple ou y a-t-il trop de « spip 3 inside » pour espérer le faire tourner en spip 2.1 ?

    En tout cas merci pour ce plugin (et j’en profite pour remettre une couche de merci pour tous tes tutoriels fabuleux ;-)

    • Heu non, c’est bien parce que SPIP 3.0 existe que la fabrique peut exister aussi !
      Autrement dit, c’est la technologie SPIP 3.0 qui permet en grande partie l’existence de cette Fabrique.

    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