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 :
Capture d’écran
À 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.
Discussions par date d’activité
137 discussions
Bonjour, je trouve ce plugin super, il va me faire gagner un maximum de temps. Mais je rencontre quelques difficultés pour le peuplement de ma base au moment de la création de mon plugin.
En effet, J’aimerais pouvoir peupler les bases créées au moment de l’installation du plugin avec des données (comme suggéré dans la vidéo, avec déjà 10 chats dans la base au moment de l’installation).
J’ai trouvé dans le fichier /base/importer_spip_eist_sc_competences.php
* include_spip(’base/importer_spip_eist_sc_competences’) ;
* $maj[’create’][] = array(’importer_spip_eist_sc_competences’) ;
La solution semble être là, sous mon nez mais je cale ....
Bonjour, je me répond puisque j’ai trouvé le truc ...
Il fallait que je mette le code :
include_spip(’base/importer_eist_sc_competences’) ;
$maj[’create’][] = array(’importer_eist_sc_competences’) ;
dans « Compléter $maj dans la fonction upgrade() » de la partie administration du plugin.
J’en ai profité aussi pour changer le préfixe de la table dans le fichier puisque j’ai choisi comme préfixe de table pour spip « eist_ » et non le « spip_ » par défaut.
Cela va me poser d’ailleurs des problèmes à venir car ce plugins est destiné à être diffusé pour les sites d’établissements scolaires et évidemment ils n’ont pas choisi « eist » comme préfixe. Je sais modifier le préfixe de la base spip, des tables pour remettre le préfixe par défaut « _spip » mais je n’ai pas réussi à intégrer le préfixe en cours dans la procédure d’installation du plugin. Résultat : si un webmaster souhaite utiliser mon plugin alors qu’il n’a pas choisi le préfixe de table par défaut, il ne peourra pas utiliser mon plugin conçu avec la fabrique. J’ai bien essayer de récupérer le préfixe ($prefix, etc ...) mais je cale.
Non non, laisse le nom de ta table avec ’spip_....’, c’est SPIP qui s’occupera ensuite de gérer le bon nommage par rapport à ton préfixe ensuite (lors des appels aux fonctions sql_*().
Répondre à ce message
Avec SPIP 3.0.8 et la Fabrique 1.18.1 Je viens de créer un objet « Stages » et j’ai posé dans la partie publique le formulaire correspondant :
#FORMULAIRE_EDITER_PROJET
Tout marche bien sauf que à la validation de l’objet je voudrais récupérer id_stage mais il reste à 0.
J’ai essayé mon plugin sur 3 serveurs différents et j’ai toujours le même résultat.
Qu’est ce que j’ai pu oublier ?
Aucune idée. Mais je ne comprends pas bien ce que tu veux faire non plus.
suite à la validation du formulaire, je voudrais donner la possibilité de joindre un document au stage enregistré.
Pour cela j’utilise
A la validation du formulaire, je récupère bien toutes les valeurs enregistrées en base de données sauf id_stage.
Ah, bah, si tu as (ou calcule) un id_stage dans le traiter() de ton formulaire, tu peux le faire renvoyer via set_request(’id_stage’, $id_stage) ; (dans le traiter), en déclarant également dans le charger() que ’id_stage’ doit être récupéré. Par exemple avec $valeurs[’id_stage’] = 0 ; (au chargement).
Donc, en gros, à vue de nez un peu brouillon, ça ferait peut être un truc comme ça :
et
Ok. Ça marche avec
et
Du coup je peux insérer la balise #FORMULAIRE_JOINDRE_DOCUMENT après validation
du formulaire et surtout mes fichiers editer_stage.html et editer_stage.php
sont utilisables aussi bien dans la partie publique du site que dans la partie back-office.
Merci beaucoup (vraiment beaucoup ) !
ps : et encore merci pour cette Fabrique qui je me rend compte sert également à faire pleins d’autre chose que des objets éditoriaux.
Répondre à ce message
Salut,
J’ai créé des objets éditoriaux avec la fabrique et j’aimerais pouvoir utiliser le forum de l’espace privé sur ceux-ci.
Je n’ai rien trouvé dans les options de mon objet dans la fabrique, rien dans la configuration du site (comme pour les documents joints ou les mots clés), et une comparaison de squelette avec des objets pourvus du forum comme « article » ne m’a rien apporté non plus.
Si quelqu’un a une idée de la façon dont ça se passe...
Amicalement,
Dorch
Malheureusement ce n’est pas encore prévu dans le plugin forum.
Deux possibilités :
MM.
Pour la première possibilité, je vais attendre d’être un peu plus aguerri sur l’élaboration des formulaires de configuration. A priori, il faut modifier le formulaire configurer_forums_prives en s’inspirant de ce qui se trouve dans le plugin mots pour la sélection des liaisons de mot vers les objets SQL, mais là, j’ai un peu de mal à suivre...
J’opte donc pour la deuxième solution, maintenant que je sais quel pipeline utiliser : http://programmer3.spip.net/afficher_fiche_objet
Merci Matthieu pour ta réponse rapide et tes explications claires et précises :)
Répondre à ce message
Bonjour
J’ai créé un plugin mais je veux modifier par des styles CSS. Comme je peux faire ?
Meci
Tu veux modifier la partie publique ou privée ?
Répondre à ce message
Bonjour
le formulaire d’ajout de documents n’apparaît sur la page d’édition que lors de la création d’un nouvel objet (?exec=objet_edit&new=oui).
Si on modifie l’objet, plus de formulaire (?exec=objet_edit&id_objet=x)
(j’ai déjà eu ce problème sous spip 2 suite à une maj de Médiatheque)
Quelque chose à faire ? d’autres personnes rencontrent le même problème ?
ma config : SPIP 3.0.5 (Medias 2.7.34) Fabrique 1.18
Dans l’attente de vous lire
Bien cordialement
Une indication :
si on actualise la page (?exec=objet_edit&id_objet=x) le formulaire apparaît.
c’est un problème de SPIP, corrigé en 3.0.7
En effet le problème est réglé.
merci
Répondre à ce message
Serait-il possible qu’il y ai une limitation de caractères ?
J’ai des problèmes pour changer le statut d’un objet si j’appel la table « realisations » mais pas si je les appels « projets ».
Idem avec « publications » qui fonctionnent lorsque je l’appelle « publi »
c’est un vrai bug. ça me fait exactement la même chose avec un objet « partenaire »
les tables sont identiques en terme de configuration. les mêmes fichiers sont créés etc...
Normalement non, vu qu’on a créé l’autre jour un « spip_projets_categories » bien plus long, sans problème. En tout cas si limitation il y a, ça ne vient pas de la fabrique en elle-meme.
Répondre à ce message
Bonjour,
merci infiniment pour ce plugin
je tente de créer un plugin de gestion de références bibliographiques
une fois le plugin créé, en validant le formulaire de création d’une entrée de ce nouvel objet, j’obtiens
et
et je ne sais comment agir.
je ne connais pas les bases SQL suffisamment pour pouvoir intervenir.
merci de votre aide,
E
mac OS 10.8.2, spip 0.0.5, LaFabrique 1.18, Saisies 1.3
Répondre à ce message
Bonjour,
je suis en train d’essayer « la fabrique » en suivant votre vidéo.
je suis pas à pas vos indications (n’étant pas un spécialiste)- je tente désespérément de mettre le logo et j’obtiens le message suivant :
« La sauvegarde de ../plugins/fabrique_auto/felins 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 insuffisants ce répertoire source pour le serveur. »
je ne comprend pas
l’image est bien importée mais les dossiers et les images au formats .png ne sont pas crées.
et précédemment la création de fichier et dossier (felin, lang, fabrique_felins.php...) c’est bien passé
pouvez-vous m’aider ?
Répondre à ce message
Bonsoir,
Je viens de commencer un plugin avec la Fabrique. Tout fonctionne bien, sauf une chose : j’utilise 2 champs date « date_prise_fonction » et « date_validite ». Les deux champs dates sont affichés dans le formulaire grace au widget « jquery.ui.datepicker ».
Lors de la validation du formulaire, j’ai cette erreur :
et voici le contenu de modifier.log (pareil pour spip.log)
L’enregistrement est cependant bien créé, mais les champs date restent à la valeur « 0000-00-00 ». Jje ne sais pas du tout où intervenir.
Une aide serait la bienvenue.
D’avance, merci
J’ai le même problème : en sql, mon champ est de type « date » (aaaa-mm-jj) alors que la saisie « date » retourne un « datetime » (aaaa-mm-jj hh:mm:ss).
Une première solution est de modifier la définition sql du champ pour le passer en datetime.
Une autre solution rapide est de modifier la saisie « date » en « date_jour_mois_annee ». Dans ce cas, on a plus le « picker » de date mais les données s’enregistrent bien.
Une troisième serait de modifier les fonctions vérifier et traiter pour qu’elles convertissent la date dans le bon format. Mais je ne l’ai pas encore mise en œuvre.
Voilà, personnellement, j’ai :
- modifié la définition SQL de mon champ date en :
datetime NOT NULL DEFAULT '0000-00-00 00:00:00'
dans
mon_plugin/base/mon_objet.php
function items_declarer_tables_objets_sql
.- désinstallé et réinstallé le plugin (mais je n’avais pas de contenu hormis des tests, donc, dans le cas contraire, il vaut mieux modifier la définition du champ avec phpMyAdmin, et simplement désactiver/réactiver le plugin sans désinstaller, sans quoi, on perd le contenu de la table).
- laissé la saisie de type « date » dans mon formulaire :
[(#SAISIE{date,...
- ajouté deux lignes dans la fonction « vérifier » de ce formulaire :
mon_plugin/formulaires/editer_mon_objet.php
Donc, avant d’utiliser la fonction standard
formulaires_editer_objet_verifier
, je récupère la date saisie par l’utilisateur grâce à une fonction trouvée dansprive/formulaires/dater
puis je la formate en sql grâce àsql_format_date
et je la réinjecte parmi les données renvoyées par le formulaire avecset_request
.À terme, je pense qu’il y a moyen :
- dans le plugin Saisies, d’améliorer la saisie « date » en lui ajoutant une option « format » qui modifie, en javascript, la saisie de l’utilisateur pour la conformer au format attendu (prive/formulaires/dater semble le faire, de même que la saisie date_jour_mois_annee d’une certaine manière) ;
- dans le core de spip, la fonction formulaires_editer_objet_verifier et/ou formulaires_editer_objet_traiter devrait aussi pouvoir formater une date conformément à la définition de l’objet (date ou datetime). Je crois que la fonction
objet_instituer
le fait pour le champ « date » standard dans ecrire/action/editer_objet.Une nième piste théorique par rapport à ce problème est de passer par le pipeline
pre_insertion
. Le plugin pourrait sans doute utiliser ce pipeline pour reformater la date avant son injection dans la base.Bon, je cause, je cause, mais je suis incapable de mettre tout ça en oeuvre :-)
La réponse est dans ce forum. à la date du 27 avril.
@Aurélie : à ma connaissance le pipeline pre_insertion ne fonction qu’avec des champs indéxés.
le lien est ici
Répondre à ce message
Bonjour,
j’ai utilisé la fabrique pour créer un nouvel objet éditorial dont je rêvais depuis longtemps ! Génial ! La je viens de rencontrer un petit hic - dans mes champs texte j’affiche bien la barre d’outils SPIP qui se mettent comme il faut. En revanche les raccourcis ne sont pas interprétés - j’imagine que c’est un rien du tout à rajouter quelque part... Mais quoi et où ?
Merci pour ton aide !
Christian
Un début de réponse à moi-même. Je suis arrivé à appliquer les raccourcis SPIP en rajoutant à mes_options.php
$table_des_traitements[’NOMDUCHAMP’][’nomdelatable’]= ’propre(%s)’ ;
Est-ce qu’il y a un endroit dans le plugin où il faudrait installer tout ça ?
Il y a un exemple là http://zone.spip.org/trac/spip-zone/browser/_core_/plugins/svp/base/svp_declarer.php#L250 , dans le pipeline d’interface (base/prefixe.php de mémoire avec la fabrique).
Indiquer pour son champ et sa table (sans spip_) :
|propre
dans un squelette)|typo
dans un squelette)Ça permet d’avoir ce traitement de façon automatique pour le champ indiqué.
Cf. aussi paragraphe « table_des_traitements » dans programmer.spip
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 :
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.
Suivre les commentaires : |