Table of contents
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
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 :
- Intégrer une table existante dans SPIP 3 avec la Fabrique
- Intégrer une table existante dans SPIP 3 avec la Fabrique (suite)
Capture d’écran

À tester
«La Fabrique» débute sa vie publique et doit être testée dans différents environnements. Vous êtes donc invités à explorer cet outil développé maintenant 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 le 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.
Discussions par date d’activité
130 discussions
Bonjour,
Je suis en train d’utiliser ce super plugin pour créer un objet éditorial et je rencontre deux problèmes.
Lors d’un test (le dernier) le plugin a fait planter le spip (en local, bien sûr) avec une page blanche. Impossible donc de désinstaller le plugin depuis la page d’admin. J’ai donc supprimer le dossier du plugin et ça refonctionne. Problème: plusieurs messages d’erreurs s’affichent alors.
- Le premier (sur la page d’admin des plugins) m’indiquant
- Le second, sur toutes les pages d’admin, m’indiquant que les deux tables que devait créer le plugin n’existent pas (Erreur SQL 1146 par le squelette /spip/ecrire/genie/maintenance.php)
La question est la suivante: comment désinstaller proprement un plugin manuellement. Quels sont les fichiers de conf à supp? Un script a lancer?
J’ai testé ceci https://gist.github.com/Cerdic/5848603#file-site-desactive-plugin-php mais sans succès (les chemins et fichiers ne correspondent pas).
Je peux repartir d’un spip tout frais mais il y avoir mieux, surtout si ça arrive lors du déploiement sur le site en ligne! :s Si quelqu’un saurait comment procéder?
Autre soucis, déjà évoqué plus bas, sûrement accessoire mais peut-être pas étranger au crash du plugin: les boutons “pré-remplir cet objet” et “supprimer cet objet éditorial” ne sont pas fonctionnels.
Je suis sous spip SPIP 3.2.7 [24473] avec la Fabrique 2.3.15
Reply to this message
Bonjour,
j’essaye de faire un pluging avec la fabrique. Dans l’ensemble cela fonctionne bien. Il me reste un point que je n’arrive pas à comprendre :
J’ai un objet X qui dépend en liaison directe d’un objet Y et qui peut être rattaché à des rubriques et des articles.
Je vois bien la liste des objets X de l’objet Y.
Je vois bien la liste des objets X.
par contre si je rattache un objet x par exemple a 2 rubriques, j’ai dans la page de l’objet
Liés à cet objet X et la liste de toutes les rubriques.
J’ai vue que cela venait de l’element généré
objets/liste/#GET{liste},objet,id_Y_X,ajax,env} />
avec #GETliste=rubrique qui va chercher le code dans prive/objets/liste/rubriques de la dist 3.2
Je n’arrive pas à résoudre ce pb même en mettant id_Y_X=#ID_OBJET
savez vous comment résoudre ce pb
Reply to this message
Erreur inopinée !
Si, comme moi, vous avez chargé une version récente de Fabrique et qu’au moment de sauvegarder votre plugin, vous vous prenez une “Erreur inopinée” ?
Je vous suggère de vérifier la version de PHP que votre serveur utilise...
- en PHP 5.6 j’avais l’erreur (sans en comprendre la cause)
- en passant sous PHP 7.2... actualiser la page restée ouverte a suffit !
P.S.: normal que cet outil de développeur utilise les dernières possibilités du langage ! ;-)
Reply to this message
Bonjour,
si c’est pas encore fait, je confirme que dans un environnement windows 7 pro 64bits, avec wampserver 3.1.9 (apache 2.4.33, php 5.6.35 à 7.2.4, MySQL 5.7.21, spip 3.2.5) la fabrique (2.3.15) bloque sur la génération des fichiers avec les messages suivant
- si le dossier /plugins/fabrique_auto/ est présent : La sauvegarde de ../plugins/fabrique_auto/alloc n’a pu être réalisée. Le plugin par précaution n’a pas été régénéré. La cause probable provient de droits insufisants ce répertoire source pour le serveur. (avec une faute “insuffisants” dans la chaîne de langue)
- si le dossier est absent : vérifier les droits d’écriture
Le système a rencontré une erreur lors de l’écriture du fichier tmp/cache/fabrique/alloc /.plat. Veuillez, en tant qu’administrateur du site, vérifier les droits d’écriture sur le répertoire ecrire/tmp/cache/fabrique/alloc .
La même chose dans un environnement Unix/Linux y a pas de soucis (sauf la faute d’orthographe ;)
cordialement
Reply to this message
Salut,
Une petite anomalie sous spip 3.2 Factory (2.3.15)
Je crée un objet blob simple sans liaison directe, mais avec une liaison indirecte
sur des articles
Lors de l’édition du premier objet, nous avons une erreur de compilation:
Argument manquant dans la balise INFO_
../plugins/fabrique_auto/blobings/prive/squelettes/contenu/blob_edit.html
Mauvaise utilisation ?
Merci
Reply to this message
Bonjour,
je n’arrive pas à effectuer ce correctif :
Pourriez-vous donner un exemple ou “xxx” en effet les fichiers sont au pluriel et le id_ au singulier...
Voici mon code après modification la table s’appelle bien “spip_etapes_liens” avec “id_etape”:
Ce code provoque une erreur “Critère inconnu etapes_liens.id_etape”
je ne comprends pas d’où vient cette erreur...
NB : retirer l’espace devant le “?” ne change rien.
Voici un exemple ou j’avais fait cette modification et qui marche:
ajout de rivieres_liens.id_riviere? sinon
a l’affichage d’une riviere on a tous les articles et non seulement les articles qui lui sont associes .
\prive\objets\liste\articles.html
=> et alors seuls les articles (et non tous) auxquels une riviere est associee, sont listes quand on affiche cette riviere
Reply to this message
Merci pour cet outil vraiment pratique ! J’ai créé un nouvel objet éditorial (que j’appelle “fiches”), tout fonctionne sauf les inclusions de doc.
Je copie/colle une inclusion de doc dans un texte (exemple : doc18, entre balises ouvrante et fermante). Dans l’espace privé, ma fiche s’affiche bien avec sa jolie image.
Dans l’espace public, impossible par contre d’afficher cette fiche avec son image. Cela m’affiche l’inclusion “doc18” en toute lettre.... Pourtant, je code exactement pareil que pour un objet “article” standard (sauf le nom des balises qui changent...).
Ya un truc que j’ai pas dû suivre... Vous avez une idée ?
Il n’y a rien de spécial à faire. Je suppose que le nom du champ (la colonne SQL) n’est pas commune pour SPIP (pas ’texte’ ou ’descriptif’ par exemple). Dans ce cas, il faut soit utiliser
[(#TRUC|propre)]
pour appliquer les traitements typos au cas par cas dans les squelettes, soit déclarer un traitement typo automatiquement sur cette balise, ce qui se fait dans le pipeline ’declarer_interfaces’, avec par exemple :où ’SLOGAN’ est le nom du champ, et ’fiches’ le nom de la table (sans spip_).
Merci beaucoup Matthieu !
Effectivement |propre fonctionne bien. Je vais de suite me renseigner par quelle magie ce filtre opère !
Bonjour,
vous écrivez :
“, soit déclarer un traitement typo automatiquement sur cette balise, ce qui se fait dans le pipeline ’declarer_interfaces’, avec par exemple :
$interface[’table_des_traitements’][’SLOGAN’][’fiches’] = _TRAITEMENT_RACCOURCIS;
où ’SLOGAN’ est le nom du champ, et ’fiches’ le nom de la table (sans spip_).”
Où se trouve ce pipeline ’declarer_interfaces’ ?
Cordialement
Il est créé et utilisé normalement tout seul par le plugin Fabrique et est présent dans base/objet.php par exemple là : https://gitlab.com/magraine/vortaro/blob/master/base/vortaro.php#L15 ; et c’est effectivement
declarer_tables_interfaces
, pasdeclarer_interfaces
.Merci de votre réponse.
Suite à vos commentaires j’ai modifié mon fichier “bases/tours.php” comme suit
Je n’ai aucun effet...
Cordialement
C’est pourtant il me semble la bonne écriture.
(je me suis permis d’éditer ton commentaire pour colorer le code)
Ah… je vois le problème : dans ton code, il faut utiliser
$interfaces
au pluriel ; c’est le nom de la variable qui arrive et repart du pipelines. Tu as modifié$interface
sans s.Une fois ce genre de modifications faite, il faut ensuite soit repasser par la page de gestion des plugins (ecrire/?exec=admin_plugin) soit lancer un ?var_mode=recalcul sur une page. Mais je suppose que c’est ce qui avait été fait ; le seul problème venant de ce petit
s
Bonjour,
merci pour ta réponse.
Effectivement comme cela c’est bon. J’aurais du y penser et non me contenter de recopier le le code.
Reply to this message
Bonjour,
près plusieurs tentatives d’installations, de réinitialisation...
J’arrive à créer le plugin, mais lorsque que j’ai créé un objet éditorial, je n’arrive pas utiliser la commande : Pré-remplir cet objet.
Je suis en PHP 7.2, SPIP 3.2.4
Merci de me donner une piste pour trouver une solution...
l
La console d’inspection affiche ce message :
An invalid form control with name=’objets[0][nom]’ is not focusable.
An invalid form control with name=’objets[0][table]’ is not focusable.
Reply to this message
Bonjour,
sous ubuntu 18.04 et spip
SPIP 3.2.1 [24285] plugin la fabrique 2.3.13
+ écran de sécurité 1.3.11 (la mise à jour vers 3.2.4 se déroule, mais l’info de version ne change pas).
je peux créer un début de pluning, mais désque je cherche à intégrer un objet éditorial, j’ai systématiquement :
et ça ’plante’ !
je suis démuni.
Merci bien pour votre implication Alain
Même erreur, dans un environnement Debian/Strecth
Aucune erreur dans les log d’apache :-(
Dans les log de spip, j’ai
Pri:ERREUR: Le serveur ’_connect’ version 1 n’a pas ’showbase’
Mais cela ne semble pas être dans le code de la fabrique...
Sur une autre machine, très semblable (stretch aussi), la fabrique veut bien fonctionner !
Une idée ?
Pour le «Le serveur ’_connect’» ... c’est qu’il doit exister un fichier config/_connect.php compris par SPIP comme une base de données distante, mais qui ne fonctionne pas dans ton contexte. Renommes le en
_connect.php.prod
par exemple, ou du moins quelque chose ne terminant pas par .php :)Reply to this message
Bonjour,
Après moult tentatives, ça avance mais j’ai l’erreur -voir image jointe-
Sous UBUNTU 18.04.1
apache 2.4.29
php 7.2.17
mariadb 10.3.14
et spip tout neuf 3.2.4(24285)
Dans la déclaration de table si je ne mets pas le nom de la base (spip2) devant le nom de la table je n’ai pas de création de table et si je mets spip2_qrcodes, j’ai bien la création de la table mais j’ai cette erreur ?
Que faire
J’ai par le passé, il y a plusieurs mises à jour de spip depuis, utilisé la fabrique avec bonheur, mais la ça plante.
Merci bien Alain
Reply to this message
Ajouter un commentaire
Follow the comments:
|
