Avertissement :
Il ne s’agit pas là d’une documentation officielle et aboutie de « Forms & tables » mais d’une compilation de messages divers de Cedric (l’auteur de ce plugin) sur différentes listes et sur irc. Ce qui implique qu’il peut y avoir des erreurs et imprécisions, voire que certains commentaires sont datés car le code a pu évoluer. L’idée a été qu’il fallait mieux publier ces notes en l’état plutôt que d’attendre la documentation complète qui sera un gros morceau à réaliser vu les potentialités de Forms & tables.
N’hésitez pas à vous servir de ce plugin dès maintenant, il est fonctionnel, et à contribuer à sa documentation, ne serait-ce que via le forum associé
NicolasR
Introduction
Créer aujourd’hui à partir de SPIP une application gérant un objet X gérant par exemple des auteurs, des mots clés et 2 champs texte, ca prend pas 2 jours ... mais à terme, ca pourrait prendre 1 heure !
C’est déjà aujourd’hui, c’est Forms&tables, c’est 5 min, c’est tout ajaxé.
Tu y définis la table, les champs, le formulaire d’édition/saisie d’un seul coup. Tout cela est utilisable depuis la partie privée, ou depuis la partie publique directement. Il y a une gestion de statuts pour modérer les données proposées depuis la partie publique. Tu associe les données de ta table personnelle avec les articles comme tu le fais avec les auteurs ou les mots clés par exemple.
On peut associer des documents et images aux données, comme pour les articles.
Les données peuvent etre importées/exportées en csv avec le plugin (c’est csv_import) qui marche de concert. Les structures des objets peuvent être importées/exportées en xml avec le plugin Snippet qui marche de concert. Il y a un début d’API pour utiliser tout cela depuis d’autres plugins, et un bon exemple d’utilisation de l’API est le plugin spip-sms-listes qui cree plusieurs tables différentes avec jointures chaines de langues spécifiques etc ...
Téléchargement
Récupérer les zips suivants sur l’espace de téléchargement, ou le(s)miroir(s), de spip-zone :
- forms_et_tables
- snippets
- csv_import
Installation
Comme tous les autres plugins, cf. http://www.spip.net/fr_article3396.html
La partie Forms
à rédiger ... peut etre en reprenant des extraits de plugin Forms : création de formulaires
Rajouter notamment pour SPIP 1.9.1 (n’est pas nécessaire avec SPIP 1.9.2 ou jquery est inclus dans le core) : « L’activation du plugin j-query permet d’améliorer sensiblement le déplacement des champs. Le déplacement par les flèches disparaît au profit d’un déplacement par "cliquer-glisser" qui permet de réorganiser complètement le formulaire ou d’insérer plus facilement un champ oublié »
Forms & table successeur de Forms
Mais la doc de Forms est encore utilisable en grande partie, voir cet échange repris sur l’irc le 10 décembre 2006
cedric : forms&tables il est clic and play
cedric : completement pret a l’emploi
cedric : j’ai fait un effort suite au retour d’experience sur l’agenda justement ...
cedric : donc j’ai meme integré les modeles qui vont bien
nicolasr : pour sa présentation : c’est le successeur de Forms qui pass en archives ?
nicolasr : (forms&tables)
cedric : oui il remplace forms
cedingrotte : a partir de la 1.9.1
nicolasr : est-ce qu’une partie de la doc de Forms est réutilisable (pour la partie forms), ou ça n’a rien à voir ?
Linstit : si, c’est ok, la doc sur contrib, elle est bonne AMHA
Linstit : faut juste documenter sondages et tables en plus, non, Cédric ?
cedric : oui tout ce qui concerne la creation de formulaires reste en grande partie vraie
cedric : quelques amenagements a faire suite a l’evolution de l’interface
Voir donc : plugin Forms : création de formulaires
La partie Tables
Avec la partie tables, le formulaire est utilisé aussi (dans la partie privée ou publique) pour ajouter/modifier des données de tables, donc potentiellement plusieurs id_donnee pour un seul id_auteur. Je pense donc qu’il faudrait qu’id_donnee soit passée dans l’url pour permettre la modif pour un auteur connecté. C’est ce que fait déjà le formulaire lorsque l’on est dans l’espace privé (mais je n’avais pas encore réfléchi à comment l’intégrer dans la partie publique)
La partie tables de Forms&tables fonctionne sur la même mécanique. Elle est juste séparée de la partie Forms car correspond a un usage différent. Pour définir une table, on définit ses champs à travers le formulaire de saisie.
Chaque champ peut être :
- spécifiant : il sera considéré comme pertinent pour trier/filtrer/rechercher les donnees dans la table
- public : les données de ce champ sont affichées dans les modèles, dans le cas contraire elle ne sont visibles que dans l’espace privé
- obligatoire : le champ doit être rempli lors de la saisie
Attention, ce ne sont pas des tables physiques, mais des tables logiques implémentées dans un nombre de tables physiques fixe. La question subsidiaire concerne plutot les perf, mais avec qq milliers de refs ca ne s’écroule pas. Et par contre la recherche est potentiellement efficace car tous les champs étants implémentés le champ valeur d’une même table, une recherche dans touts les données se résume à un SELECT ... WHERE valeur LIKE ’%mixeur%’ par exemple.
Aide contextuelle
Par ailleurs, une aide contextuelle peut être définie pour chaque champ. Le wrapping html permet de définir des encapsulation des champs dans la vue donnée (typiquement pour faire du microformat), sur le format :
- implicite : la donnee est insérée au milieu de l’encapsulation qui peut comporter plusieurs tags <div class='truc'></div>
- explicite : la donnee est inseree a la place du $1<a href='$1' class='truc'>$1</a>
Import/export aux formats csv et hCard
Le plugin contient un exemple de structure hCard (Snippets/forms/hCard.xml) qui utilise ce format. Mais la fonctionnalité est encore incomplète, il manque la possibilité de gérer une hiérarchie de div englobants. (Les fieldsets sont utilisés pour gérer un premier niveau de groupe, mais il est nécessaire de pouvoir faire des sous groupes, j’y refléchis).
Le hCard.xml contenu dans le plugin est importable à l’aide du plugin Snippets (1.9.2 uniquement) qui permet de gérer des imports/exports des structures des tables&formulaires en xml. Un formulaire peut etre exporté et réimporté dans un formulaire existant, auquel cas les champs y seront ajoutés.
Les types de champ sont personnalisables, il y a un exemple dans etc/forms_types_champs.xml. Cela permet de definir des formats qui n’ont pas de vocation à être en dur car ne ils correspondent pas a un besoin général. Pour le moment la vérification de format est limitée a un preg_match sur une regexp, mais je pense mettre un pipeline pour permettre de créer des types de champs plus complexe.
Le plugin csv_import fonctionne avec les tables de Forms&tables, et il permet de faire de l’import/export csv des données (en ajoût et mise à jour si l’id_donnee est fournie).
La différence entre une table et un formulaire
Une histoire de point de vue
reprise du post « forms et tables - formulaire multipage » du 16 juin 2007 sur la liste spip at rezo
C’est plus une question de point de vue.
Le formulaire a vocation à être utilisé pour collecter des données saisies par les internautes et les stocke pour permettre de les retrouver. Les tables ont plutôt vocation à créer des objets éditoriaux personnalisés gérés depuis l’espace privé et que l’on affiche dans le site soit via des
boucles, soit via des tags dans les articles de la formeou . Mais les fonctionnalités de l’un peuvent être utilisées sur l’autre. Si tu crée une table X tu peux donc mettre en ligne le formulaire de saisie correspondant avec un tag
pour permettre à l’internaute de proposer des infos par exemple.
La même explication traitée un peu différemment
reprise du post « API Forms&tables » du 15 février 2007 sur spip-zone at rezo
C’est juste un concept différent que j’ai distingué dans le plugin :
- un formulaire c’est dédié a la saisie de données dans l’espace publique (collecte d’informations), et on stocke les réponses pour pouvoir les suivre/gérer/traiter, comme des forums ...
- une table, c’est une structure de données destinées à être utilisées dans les squelettes. Le socle commun permet de disposer du formulaire de saisie associé, utilisable aussi bien dans l’espace privé que dans l’espace publique si besoin. La définition de la structure de la table se fait par la définition de son masque de saisie, ie son formulaire de saisie.Donc dans le premier cas, ce qui est central c’est la collecte d’informations dans l’espace publique, et le stockage est juste destiné à du post-traitement. Dans le second, ce qui est central, c’est les données et leur manipulation pour les afficher dans les pages de l’espace publique. La saisie est juste un moyen de créer/modifier des données, mais pas unique (l’import/export csv en est un autre)
Les tables sont ... des tables
reprise de ce fil de discussion http://listes.rezo.net/archives/spi...
27 janvier 2007 - <cedric.morin@yterium.com>
Les tables sont ... des tables, pour gérer des données que l’on définit comme on veut dans l’admin. C’est la même interface qui sert à définir les champs d’un formulaire et les champs d’une table. apparté Cedric : Par contre il ya des libellés pas explicites, meme en francais, et ca me plait pas non plus. Mais j’ai pas encore eu le temps de passer faire du nettoyage et de la mise en forme.
La structure des tables se définie dans l’espace privé, via l’interface de création. Chaque champs y est défini, avec un certain nombre de propriétés utilisées pour les boucles, les modèles, ... Cette structure peut se remplir par exemple via l’import d’un fichier csv par exemple), ou même directement dans l’espace privé, ou il est possible de faire de la saisie/edition des données, comme pour n’importe quel objet natif de SPIP.
Il y a une double boucle : une sur les données comme pour des articles par exemple, puis une sur les champs qui constituent ces données, la ou pour une table physique on utilise une balise par champ ... Voir le modele table du plugin par exemple... Aussi pour gèrer l’affichage, lorsque l’on rajoute un champ dans la structure il également modifier l’affichage pour qu’il s’affiche.
Exemples rapide mais concret d’utilisation
reprise de ce fil de discussion http://listes.rezo.net/archives/spi...
27 janvier 2007 - <cedric.morin@yterium.com>
Typiquement un annuaire d’associations, avec un mot clé pour le thème qui permet de sélectionner uniquement une partie, selon le thème de la page en cours :
- http://www.ville-noyon.fr/-Annuaire...
- http://www.ville-noyon.fr/Annuaire-...L’interêt évident est que la table n’est pas figée en dur, le webmestre peut ensuite ajouter/modifier/supprimer des champs dans la table sans avoir a toucher quoi que ce soit au squelette pour être pris en compte, ce qui n’est pas le cas avec une table physique définie lors de la conception du site. Et pour ma part, je n’ai jamais vu de cas ou la définition initiale était la bonne du premier coup, il y a toujours un truc qui ne va pas au moment de la finalisation, nécessitant une reprise du squelette. Sans parler de l’évolution du besoin avec le temps...
Un autre exemple, une table pour faire un trombinoscope, puisqu’on peut joindre des docs et des photos aux données comme avec les articles : http://www.saintsebastien.fr/-L-equ...
Ou une autre présentation d’un annuaire des assos : http://www.saintsebastien.fr/-Assoc...
Et ca ne sont que des exemples. Tu peux définir tout type de table, et même les types de données gérées par les tables sont d’ores et déjà extensibles (les types numéro de tel et code postal, par exemple, ne sont pas en dur car pas universels, mais définis dans un xml personalisable). L’API va être complétée pour permettre d’ajouter des types de champs plus complexes.
Mise en oeuvre
Les boucles
Les tables définies dans Forms&tables sont en fait toutes stockées dans les mêmes tables physiques. Dans les squelettes, on utilise les boucles
FORMS_DONNEES et FORMS_CHAMPS sur le mode :
<BOUCLE_reponses(FORMS_DONNEES){id_donnee}>
<BOUCLE_champs(FORMS_CHAMPS){id_form}{par rang}>
#TITRE : <span class='#_reponses:EDIT{#CHAMP}'>#LESVALEURS{','}</span>
</BOUCLE_champs>
</BOUCLE_reponses>
Notez la balise EDIT qui permet d’utiliser les crayons sur les donnees de vos tables !
La balise #LESVALEURS permet d’eviter une boucle supplémentaire sur FORMS_DONNEES_CHAMPS. Dans cette derniere boucle, #VALEUR retourne non le champ sql brut mais la valeur en clair dans le cas ou il s’agit d’un champ mot clé, select ou multiple. #VALEUR* retourne elle le champ sql brut.
Sur la boucle FORMS_DONNEES
- le critere tout permet de récuperer les données non validées
- le critere statut=.. de récuperer les données non publiées (par défaut seules les données avec le statut publié sont retournées par la boucle)
- le critère id_mot=.. de récupérer toutes les données associées à un mot clé. Cela suppose que la table comporte au moins un champ de type mot clé.
Sur la boucle FORMS_CHAMPS
- par défaut seuls sont retournés les champs publics
- le critère tout permet de récupérer tous les champs
Allègement de l’écriture
Date : 17 avril 2007 11:06:50 GMT+02:00
À : spip-zone@rezo.net
Cc : spip-zone-commit@rezo.net
Objet : Rép : [Spip-zone-commit] r11357 - /_plugins_/_stable_/forms/forms_et_tables_1_9_1/public/forms_boucles.phple commit est parti trop vite, avant que je corrige le commentaire :
- (DONNEES) -> les données d’une table
- (TABLE_CHAMPS) -> les champs d’une table
- (DONNEE_CHAMPS) -> les valeur des champs pour une donnée (donc attention DONNEE au singulier, CHAMPS au pluriel)Voila ces nommages vont alleger l’écriture. Par ailleurs, le formulaire de recherche sur les tables applique un AND entre les conditions des champs (il faut que le champ 1 ait telle valeur
ET le champ 2 telle valeur). Mais, attention tout de même, sur les champs de type multiple, cela
reste un OU entre les valeurs du meme champ (champ 1 ait telle ou telle valeur ET champ 2 aie telle valeur)Pour étendre le formulaire de recherche à tous les types de champs(select,multiple, mot par defaut) il suffit de personnaliser formulaires/forms_recherche dans son dossier squelette)
Snippets, Csv_import,ecard
Snippets est autonome, forms&tables aussi, csv_import aussi mais snippets est utilisé par forms&tables pour ajouter des fonctions. Pareil pour csv_import qui ajoute des fonctions a forms&tables. Par contre ecard nécessite froms&tables, et c’est en ce sens un plugin de forms&tables et forms&tables a été pensé pour fournir une api a des plugins, donc il en aura d’autres ...
Un peu de documentation sur Snippets
En savoir plus
Voilà un petit apercu des fonctionnalités, cela mériterait évidemment une grosse doc que je n’ai pas du tout le temps de faire en ce moment , notamment sur l’utilisation avancée du plugin comme support pour d’autres plugins :
- créations de tables sur structure xml
- création d’un type de table supplémentaire pour gérer des tables qui ne soient pas mélangées avec celles du module tables par défaut
- utilisation de l’API d’interface liste/edition/modification ... des tables ....)
Mais le lecteur/codeur curieux pourra utilement se reporter aux plugins spip-sms-listes et spip_outliner pour en savoir plus !
Discussions par date d’activité
180 discussions
Cher Developpeurs...
comme d’hab, merci pour cet excellent plugin.
J’ai noté un bug au moment de l’export d’une table en CSV.
Lorsque la table contient des sélections (choix unique ou choix multiple), et que l’utilisateur ne remplis pas le champs, le fichier CSV ne contient pas les colonnes respectives.
Ainsi entre deux lignes les résultats sont décalés.
ou c’est moi qui fait la boulette ?
A+
Répondre à ce message
Bonjour et bravo pour le plugin qui pour le moment marche impeccablement sur le site que je suis en train de développer. Je trouve le date picker sur le champ date bien utile, mais dans mon cas (date de naissance...) je souhaiterais pourvoir choisir l’année et le mois plus facilement... Le retour arrière actuel est plus que laborieux...surtout pour les personnes qui ont déjà plus de quelques années....
Aussi y a t’il un moyen de modifier çà ou éventuellement quelles seraient les modif à faire pour intégrer la V2 du datepicker de kelvin.luck à la place de la V1 actuelle ?
Merci pour votre aide.
Yann
Je suis exactement dans la même situation que toi. As-tu trouvé une solution ?
Merci.
Répondre à ce message
ca fonctionne tres bien sauf lorsque je tente de modifier des données en utilisant la barre typo depuis l’espace public :
lorsque je fais une modif du texte sans utiliser la barre typo ca va, mais des que je clique sur un des raccourcis (car la barre apparait bien) , j’obtiens :
j’obtiens alors ce message d’erreur
Répondre à ce message
Bonjour, j’ai un problème avec ce plugin, les données chargées via un formulaire s’insèrent bien dans la base de données, mais impossible d’uploader une image. A la validation du formulaire, pas de message d’erreur. quand on clique sur le lien pour aller chercher l’image dans le mail reçu, on arrive sur une page de l’admin qui spécifie « accès interdit ». De même, aucune trace de cette image dans l’admin. J’ai essayé de changer les chmod des répertoires mais rien n’y fait.
J’ai moi aussi cette difficulté : je veux que soient télécharger des photos par un champ « fichier à télécharger » dans une table. Et la validation du formulaire ne donne pas lieu à ce téléchargement
Répondre à ce message
Bonjour,
J’ai utilisé ce plugins et j’ai réalisé une trentaine de formulaires qui fonctionnent à merveille. Par contre chacun des formulaires est réglé avec les options suivantes :
données modifiable par l’utilisateur
réponses multiples
Chacun des 40 auteurs répondent à ce formulaire mais il n’est pas possible qu’il voit les réponses qu’il ont données pour une modification éventuelle. Par conséquent il sont obligés de renouveler leur réponse et l’administrateur doit filtrer les doublons.
Si je modifie la configuration du formulaire avec l’option réponse unique la modification des réponses est possible mais dans ce cas la je perds la possibilité d’avoir une réponse par auteur.
Sera-t-il possible dans une version ultérieur d’associer une réponse unique par auteur ?
Merci pour votre réponse.
Répondre à ce message
Vous l’avez trouvé où le téléchargement de ce fabuleux plugin pour spip1.9.2 ?
ici
Répondre à ce message
Bonjour,
j’ai réalisé un questionnaire qui possède un champs message d’explication.
Avec le code ci-dessous j’ai le message d’explication le retour des questions plus le remplissage de la variable $test.
J’aimerais réaliser une boucle qui vire le message d’explication en retour.
D’avance merci.
PS : J’ai vu qu’on pouvait filtrer le titre mais ça rempli m’a variable $test donc pas top car après je devrais virer une valeur de $test.
Résolu
Répondre à ce message
Bonjour, sur un spip "SPIP 1.9.2b [9699]
j’ai un message d’erreur lorsque j’utilise dans un article le modele table recherche :
je ne comprend pas du tout la provenance, j’ai essayé depuis plusieurs installation vierge de spip, meme erreur, pouvez vous m’aider ?
merci
J’ai eu le même problème. En attendant une explication plus précise sur la fonction exacte de « collecte » et surtout sur l’erreur, je l’ai retiré pour ma part de la BOUCLE-DONNEES dans le modele table_recherche.html et c’est passé... ’faire une copie du modele originel dans ton dossier squelette dans un répertoire « modeles ».
Pas top mais çà fonctionne chez moi pour le moment.
Bonjour,
Je ne sais pas si c’est ça mais j’avais eu un message identique aujourd’hui parce que je m’étais trompé sur le numéro de table
Par étourderie j’avais mis le numéro de mon mot clé au lieu de celui de ma table :/
En tout ça doit être un truc du genre parce que le message d’erreur semble bien dire qu’il ne trouve pas les données là où il croit qu’elles sont...
Oui jacques, j’ai pensé à çà au début... Mais j’ai bien le bon numéro de formulaire qui est appelé et lorsque j’enlève le critère collecte, çà fonctionne...enfin du moins dans la partie privée car dans la publique, j’ai toujours ce pb de renvoi sur ma page d’accueil à cause du critère recherche dans l’url... (ce qui ne se produit pas dans le backoffice...) Bref...
Avis aux pros...
histoire de faire un autre point sur ce probleme,
est il nécessaire d’installer autre chose que forms et table, snippet et CSVImport
j’ai vu ca et la qu’il fallait en plus le « couteau suisse » ?
le probleme ne peut pas venir de la ?
en tout cas , je suis bloqué sur plusieurs site avec ce double probleme
- forms recherche qui renvoie sur page d’accueil
- et le modele table recherche qui créé un message d’erreur du type décrit.
et pourtant le numéro est le bon,
je repete que j’ai eu ce probleme suite à la mise à jour de forms et tables alors qu’avec les versions précédente cela fonctionnait bien.
J’ai installé les autres plugins et comme on s’en doutait çà ne change rien... Un bon fallback vers un ancienne version du plug—in va peut-être me permettre de tout faire marcher... Mais encore faut il que je retrouve les anciennes versions compatibles 1.9.2b qui fonctionnent...
Si tu en as une dans un vieux dossier, çà m’intéresse.... J’ai une deadline qui approche et là je dois dire que c la mouise... Mais nous vaincrons...
ce que j’ai c’est une version de forms recherche et de table recherche plus ancienne,
simplement ca fonctionne pour l’instant, mais à mon avis ca va poser des problemes dès qu’on voudra mettre à jour.
car le plugin évolue et corrige des bugs au fur et à mesure,
n’y a t’il que nous deux qui rencontrions le probleme ?
es tu chez ovh ?
je viens de tester,
donc en utilisant ma vieille version (que je place dans squelette) de formulaires/forms_recherche et de modele/table_recherche
et bien le formulaire de recherche fonctionne ainsi que le modele table recherche
- ces versions datent de juin je crois
- par contre avec les dernières versions de ces fichiers cela produit les message d’erreur cités précédement. si tu veux je peux te mailer mes deux « vieux » fichiers pour que tu les teste
mais ca ne résoud pas du tout le problème, car ce n’est pas logique comme choix
Cédric M, si tu passes par la ? sais tu ce que c’est ? help
Merci pietrus. Je veux bien que tu m’envoies tes deux fichiers pour que je vois si chez moi aussi çà corrige temporairement le problème ( le temps qu’on trouve...avec l’aide des grands manitous le pourquoi du schmilblick de la nouvelle version...). mon adresse est lpyann at yahoo dot fr. Je suis d’accord, çà ne résoud pas le problème et c’est pas logique, mais l’urgence va faire passer la logique pour plus tard...
Sinon je ne suis pas chez ovh et pour le moment je n’ai testé mon site qu’en local sous easyphp... Mais je ne suis pas en France et le site devrait être hébergé aux US...
Merci pour tout çà. Je te tiens au courant.
Bonjour,
çà marche impeccable avec les anciens fichiers que tu m’as envoyé. Juste un petit problème de css pour l’affichage de la photo (champ fichier à télécharger)... Mais rien de grave. Il y a donc bien un big bug avec les nouveaux fichiers... Maintenant que ce « contournement » fonctionne, on pourra creuser plus sereinement la question sans avoir peur de tout péter...
Merci à toi, on reste en contact
En fait pour ma photo, cà ne vient pas du css...mais de l’url qui est récupérée lorsqu’on sélectionne le fichier. Comme je suis en local avec plusieurs sites, çà ne marche pas. Je m’explique : Il récupère l’url sous la forme : /IMG/protege/formx/photo.jpg, ce qui marchera seulement si spip est à la racine du serveur. Si il se trouve dans un sous répertoire, ce qui est mon cas, çà marche dans l’espace privé mais pas dans le public...
Bref pas très grave pour le moment, mais il serait intéressant de récupérer l’url en utilisant #URL_SITE_SPIP quelque part qu’il s’y retrouve quelque soit l’endroit ou se trouve le dossier de spip...
Pour avis et conseil...
Bonjour,
Je suis aussi intéressé par l’affichage de la photo dans le site public... mais je n’ai pas encore réussi à modifier le code.
Quelqu’un saurait-il comment procéder pour intégrer #URL_SITE_SPIP ?
Ca devrait se trouver dans le fichier forms.php
Merci !
A bientôt,
Romain
Répondre à ce message
Hello,
Possibilité de développement en réalisant un formulaire de type suivant :
#AUTEUR ligne de texte
Permet de poser la même question à l’ensemble des utilisateurs.
Répondre à ce message
Evolution possible ?
Je pense qu’il serait intéressant de pouvoir associer un mot clés à chaque formulaire afin de pouvoir les ajouter où l’on veut dans les squelettes par exemple
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 : |