Formidable, le générateur de formulaires

Un générateur de formulaires facilement configurable pour les non-informaticiennes et facilement extensible pour les développeur⋅euses.

Cette documentation est valable à partir de la version 6.1.0 de Formidable.

Introduction

Historiquement, deux plugins avaient déjà été développés précédemment pour gérer des formulaires :

  • Forms &Tables, qui n’a pas été complètement porté pour SPIP 2.
  • et spip-formulaire créé par artego mais qui n’était plus maintenu.

La question s’est donc posée : construire sur la base d’un des deux plugins ou repartir de zéro ?
Form &Table, très complet pour les utilisateurs, présentait l’inconvénient d’avoir un côté « fourre-tout » qui le rendait difficilement modifiable et difficile à personnaliser par les dévs.

Il a finalement été décidé de repartir de zéro pour proposer quelque chose :

  • de plus facile à utiliser pour les utilisateurs d’une part,
  • mais aussi de plus facile à personnaliser pour les développeur⋅euses.
    Avec le parti pris de se baser de préférence sur plusieurs petits plugins spécialisés et de tirer parti de la nouvelle norme CVT.

Interface utilisateur

L’utilisation basique de l’interface est abordée dans ce screencast : Mon premier formulaire pas à pas : c’est Formidable !

Appeler mon formulaire

Vous devez appeler le formulaire ayant le nom « formidable », en lui passant en paramètre l’identifiant de votre formulaire.

Dans un contenu

Utilisez le modèle <formulaire> classique : <formulaire|formidable|id=34> ou bien <formulaire|formidable|id=contact>

Dans un squelette


#FORMULAIRE_FORMIDABLE{34} ou bien #FORMULAIRE_FORMIDABLE{contact}

Afficher les résultats du formulaire

Dans un contenu

Utilisez le modèle <formulaire_analyse|id_formulaire=34>

Pré-remplir dynamiquement les champs d’un formulaire

À noter, vous avez la possibilité de surcharger dans l’appel, les valeurs par défaut des champs de votre formulaire. Pour cela, vous devez passer un tableau de nom=>valeur en deuxième paramètre. Vous pourrez trouver les noms de vos champs dans l’aide-mémoire situé sur la page de configuration des traitements.

Dans un contenu

Le tableau de valeurs dans un paramètre defaut sous forme d’une suite de chaînes « clé,valeur » séparée par des virgules :
<formulaire|formidable|id=contact|defaut=hidden1,valeur,input_5,autrevaleur>

Dans un squelette

Le tableau en deuxième paramètre :

#FORMULAIRE_FORMIDABLE{contact, #ARRAY{nom_du_champ, Ma valeur}}

C’est particulièrement utile pour remplir un champ caché avec une valeur dynamique venant du squelette :

#FORMULAIRE_FORMIDABLE{contact, #ARRAY{hidden_1, #ID_DOCUMENT}}

Autres options utilisable dans le squelette

Il est possible de passer des options comme troisième argument du formulaire, sous forme de tableau (#ARRAY).

Options possible comme troisième argument de #FORMULAIRE_FORMIDABLE
Nom de l’optionFonctionType
forcer_modif Permet de forcer la modification d’une réponse, même si non autorisé Booléen
id_formulaires_reponses Identifiant de la réponse à modifier Entier
no_ajax Désactiver l’ajax sur le formulaire Booléen
traiter_email_destinataires Destinataires pour le traitement Tableau (#ARRAY) d’emails ou liste d’emails séparés par des virgules
traiter_email_destinataires_methode Indique si traiter_email_destinataires doit remplacer les emails déjà configurés dans le traitement ou les ajouter Au choix 'remplacer' ou 'ajouter' (valeur par défaut)
url_redirect Url de redirection Chaine

Exemple d’un formulaire Formidable dont l’identifiant est contact_libre et dont l’email destinataire est dans le champ email de la table de votre objet #EMAIL de la table spip_contacts ….

<div class="ajax">
#FORMULAIRE_FORMIDABLE{contact_libre,'',#ARRAY{traiter_email_destinataires,#EMAIL}}
</div>

Case unique

Pour rendre obligatoire la réponse oui à une case unique (pour la validation de conditions d’utilisation par exemple), il faut simplement rendre le champ obligatoire.

Courriels de notification

Une option des traitements proposés permet d’envoyer un mail de notification automatiquement, à chaque saisie d’un formulaire.

Le squelette par défaut employé pour la mise en forme de ces mails est plugins/formidable/notifications/formulaire_email.html. Vous pouvez le copier dans le répertoire ’notifications’ de votre squelette et l’y modifier à votre guise. Cette modification vaudra pour tous les formulaires.

Pour utiliser un squelette spécifique pour les mails de notification de l’un seulement des formulaires définis avec Formidable, il suffit d’ajouter son squelette dans le répertoire ’notifications’ de votre dossier squelettes, mais en ajoutant l’identifiant.

IDENTIFIANT étant l’identifiant du formulaire défini dans Formidable, les squelettes doivent se nommer :
formulaire_IDENTIFIANT_email.html pour le mail aux destinataires
formulaire_IDENTIFIANT_accuse.html pour l’accusé de réception du visiteur

Conservation des IP

Les adresse IP des personnes répondant aux formulaires sont stockées en base de donnée. Depuis la version 1.5 (SPIP 3) / 0.7 (SPIP < 3), elle sont automatiquement hashé, de manière à ce que l’IP ne soit plus reconnaissable, au bout de 124 jours (environ 4 mois).

Pour changer ce délai, vous pouvez redéfinir la constante _CNIL_PERIODE dans votre fichier mes_options.php.

Par exemple :

define('_CNIL_PERIODE', 24*3600);

permet de hasher les IP toutes les 24 heures.

Si vous voulez désactiver le hashage, mettez la valeur à 0.

Envoi de fichiers

Lire l’article complémentaire : Envoyer des fichiers avec un formulaire Formidable.

Mise en forme des saisies

Le plugin ne prévoit aucun réglage de mise en forme des saisies : c’est à chaque squelette d’avoir ses styles. Il respecte cependant la convention d’écriture des formulaire SPIP. Il permet d’ajouter des classes spécifiques sur les saisies.

Affichage des réponses sous forme de tableau

Le plugin Formidable Tablesorter permet d’afficher sous forme de tableau les réponses, dans l’espace privé, avec possibilité de tri et de filtre.

Voir aussi sur le wiki


-  Complément de doc et exemples sur les boucles et balises de formidable
-  Exemples de stylage CSS d’un formulaire Formidable
-  todoFormidable
-  Formidable, présentation aux Grottes (2010)

Discussion

811 discussions

  • Bonjour,

    Ce plugin a l’air très prometteur MAIS :

    1) comment fait on pour afficher les réponses dans la partie public avec mise en forme et sélection des données saisies. Par exemple F&T permettait de transférer une réponse dans un article ?

    2) comment lier la saisie d’un champ au résultat d’un autre (par exemple saisie du code postal qui sélectionne les villes possibles) ?

    3) Dommage qu’on ne puisse pas ajouter un document via le formulaire. Cette option sera t elle implémentée dans les versions futures ?

    Mais d’ores et déjà, chapo pour l’interface soignée et toutes les fonctionnalités développées dans ce plugin.

    Répondre à ce message

  • Bonjour,
    Ce plugin formidable, fonctionne en spip 3. (testé sous 3.0.0-rc) Il n’est pas marqué ici comme tel à ce jour.

    Pourtant il permet sans difficultés d’assurer le passage de form&tables et spip 2.1 vers spip3 (avec les snippets)

    Répondre à ce message

  • 3

    Bonjour,
    J’ai un pb avec l’image datepicker. Lorsque la saisie du champ est erronée et que le champ devient rose, l’image du bouton-calendrier n’est plus cliquable pour faire apparaître le calendrier.
    Avez-vous ce même problème ?
    J’ai checké tous mes styles et n’ayant rien modifié de spécial, je ne comprends pas d’où vient le problème.
    Merci pour vos lumières,
    (Pour voir)
    Nathalie

    • C’est un problème JS. Il doit y avoir une librairie qui manque après rechargement AJAX du formulaire. Le datepicker nécessite UI.core, UI.widget, UI.datepicker, et c’est possible que UI.core manque à l’appel.

    • Merci Rastapopoulos. Mais j’ai bien jquery.ui.core.js, jquery.ui.datepicker.js et jquery.ui.widget.js sur le serveur. J’ai également ces items cochés dans la configuration de jQuery UI (version 1.8.16) : Core UI, UI widget, UI datepicker et Core effets. Tous mes plugins sont à jour.
      Vois pas.

    • Déja ya un problème, Firebug indique que widget.js et datepicker.js se charge dynamiquement deux fois, en plus d’être déjà présent dans le head.

      Ensuite, après rechargement AJAX du formulaire, il y a cette erreur : instActive is undefined (c’est une variable utilisée dans datepicker.js).

    Répondre à ce message

  • 6

    Bonjour,

    Je ne trouve pas la bonne manière pour :
    -  L’internaute saisit une quantité (0,1,2,..)
    -  Le prix est de 10€ par unité
    -  Le formulaire multiplie et transfère le montant total qui s’affichera aussi dans l’email de confirmation.

    Merci
    dd

      1. Un formulaire avec un seul champ, pour le nombre d’unité (donc vérification entier positif).
      2. Personnaliser le mail d’envoi comme l’indique la doc, et au lieu d’afficher le champ, afficher le champ x son prix. Pour ça évidemment il faut récupérer la valeur précise du champ, pas dans une boucle générique comme le mail par défaut.
    • Merci de ta réponse rapide.
      Je vais essayer mais mon formulaire a une 20aine de champs. Enfin je débute avec Formidable donc je n’ai pas encore investigué si l’on pouvait lier des formulaires comme avec forms&tables.

      Une autre petite chose : j’avais mis un champ caché comportant l’email du destinataire mais celui-ci s’affiche dans l’email d’accusé de réception (j’ai fait autrement finalement).

      Merci
      dd

    • lavachefolle

      Bonjour à tous j’ai également une problématique de ce genre.
      J’aimerais que le montant d’une simple multiplication + addition soit affiché dynamiquement (puis envoyé par la suite en traitement). L’idée étant que le visiteur puisse voir le montant total et ne pas avoir la surprise du montant final.

      Cette fonction est déjà peut-être intégrée mais cela fait une journée que je tourne en rond et ne parviens pas à mes fins. Tout le reste du plugin est formidable, sauf ceci (que je n’ai peut-être pas su trouver).

      Merci de votre aide,
      Jean

    • lavachefolle

      quelqu’un a t-il déjà pu additionner ou multiplier 2 champs dynamiquement de manière à faire apparaître le total d’une « commande » ? Merci à tous ;-)

    • Tu ne peux pas faire ça en squelette ou simplement, ce plugin n’est pas fait pour ça. En revanche tu peux coder ton propre traitement PHP (que tu pourras alors choisir dans la liste des traitements du formulaire) et là tu peux alors modifier le message et/ou le comportement après validation. Il faut un traiter/truc.php et un traiter/truc.yaml sur le modèle des autres traitements déjà existants.

    • lavachefolle

      Merci de ton aide je suis en train de regarder cela.

      J’ai encore une question ou disons une impression :
      je n’arrive pas à avoir des listes déroulantes ou boutons radio supérieurs à 4-5 éléments. Passé ce nombre certains choix apparaissant pourtant dans les paramètres disparaissent une fois les paramètres enregistrés. De plus ils se mettent dans le désordre. C’est bizarre et en plus cela me bloque.,

      Y a t-il un maximum de lignes ou un truc du genre, puis je le changer ou n’aie-je pas de chance ;-)

      Merci à tous et à toi Rastapopoulos

    Répondre à ce message

  • 6

    bonjour,
    J’ai encore des problemes avec le datepicker qui ne s’affiche pas
    erreur (de la console de safari) : TypeError : ’undefined’ is not an object (evaluating ’interActive.online’)
    Que veux dire ce message d’erreur ?
    Dans mon cas présent si je ne mets qu’un champ date cela fonctionne parfaitement si je mets un 2d champ date cela ne fonctionne plus.
    Bref y a un bug quelquepart...

    Une piste ?

    merci

    • Ben le bug c’est qu’apparemment tu peux pas mettre plusieurs champs date en même temps. Donc il doit y avoir un problème du genre mauvais identifiant pas unique qu’il faudrait rendre vraiment unique pour chaque champ. Je connais pas le code de cette saisie, faut regarder dans saisies/date.html.

    • Merci Grandement,
      Mais suis pas assez calé pour trifouiller ce code :(
      Cordialement.

    • Cette fois-ci après MAJ en spip 3.0 RC, le datepicker ne s’affiche plus du tout , et j’en ai mis qu’un seul !
      Alors que sous spip 3 beta 2 cela fonctionnait....
      Voici l’erreur de safari console (partie public) : TypeError : ’undefined’ is not a function (evaluating ’$(input).zIndex()’)’)

      Oui j’ai vraiment besoin de ce satané datepicker ;) !!!!

      Merci d’avance !

    • Oui il y a eu des modifs. Pour l’instant le datepicker ne marche plus car il n’y a pas jQuery UI Core de chargé. Avant ce module étant chargé tout le temps, mais il a été enlevé et c’est aux fonctionnalités qui le nécessite de le charger au besoin. Donc faut modifier le datepicker (qui n’est pas dans Saisies mais dans le core de SPIP en fait) pour lui faire charger UI Core au bon moment.

    • Merci de ta prompte réponse ;)
      Bon , il y a certainement une bonne raison à supprimer JQuery UI Core
      Mais je me retrouve coincé..

      J’espère qu’une maj sera bientôt dispo.

      Meilleures salutations.

    • Oui c’est une bonne raison puisque ça sert à rien d’ajouter un JS sur toutes les pages du privé plutôt que juste sur les pages qui en ont besoin. Mais du coup c’est le datepicker qui doit penser à l’insérer quand il arrive, c’est ça qu’il reste à modifier (mais ça se fera, soyons en sûr).

    Répondre à ce message

  • 15

    Bonjour

    En local j’ai beaucoup appréciée le plugin qui offre des options complétés ; héla en passant sur le serveur impossible de le faire fonctionner.
    J’ai vu que l’erreur des tables étaient déjà nommées plus bas ; ai cherché un peu partout mais pas de solutions....
    ai fini par tout installer au propre juste pour tester le plugin ; spip vierge sur table vierge et les tables n’étaient pas présentes don installées depuis un backup de la base en local mais nouvelle erreur à la création d’une table : page blanche avec « spip_formulaires insertion sans description » ...
    avec ou sans description....
    Je me demande si cela ne viendrait pas d’OVH comme j’ai vuy plus bas la référence au même hébergeur... quel fichier LOG fournir pour aider a une solution ?
    j’ai commencé un fichier lang es au cas ou cela intéresse qqn....

    merci de votre aide

    • viens de tenter avec spip 2.1.10 en sql3 au cas ...
      idem

    • ai réussi en créant en local sur une base sql3, puis en envoyant brut de pomme sur le serveur ; les table se sont enfin créer, jusqu’ici ni avec phpadmin je n’avais réussi....
      j’essaierais un backup pour le passer en mysql voir si il se passe qqchose...
      En attendant nouveau soucis ; lors de l’envoie d’un formulaire j’ai :
      « Une erreur est survenue lors de l’envoi du courriel. »
      les autres formulaires (spip facteur fonctionne)

      merci de partager votre expérience ou solution si vous avez eu ce genre de soucis....

      Je pense que le plugin en vaut la peine...

    • Depuis quelques temps, il y a clairement un problème mais seulement sur certains serveurs. Et apparemment ce serait plus une erreur PHP que SQL car dans les logs les erreurs sont plutôt du genre : « fonction formidable_declarer_tables_principales() inconnue ». Comme si SPIP n’avait jamais inclus le fichier qui contient ces fonctions avant de les appeler.

      Mais je n’arrive vraiment pas à comprendre pourquoi.

    • Bonjour et merci pour l’intérêt porté !

      dans les logs j’ai :
      mysql.log

      La table ’test.pour’ n’existe pas - SHOW CREATE TABLE POUR
      ’test.spip_forms_champs_choix’ n’existe pas - SHOW CREATE TABLE spip_forms_champs_choix
      ’test.forms_donnees’ n’existe pas - SHOW CREATE TABLE FORMS_DONNEES
      ’test.condition’ n’existe pas - SHOW CREATE TABLE CONDITION
      Echec mysql_connect. Erreur : Can’t connect to local MySQL server through socket ’/var/run/mysqld/mysqld.sock’ (2)

      private_mysql
      ’test.formulaires_editers’ n’existe pas - SHOW CREATE TABLE formulaires_editers
      ’test.pour’ n’existe pas - SHOW CREATE TABLE POUR
      ’test.pour’ n’existe pas - SHOW CREATE TABLE POUR

      prive_spip.log
      erreurs=a:1 :s:14 :« message_erreur » ;.., self=./ ?exec=articles&id_art.., valeur=2, lang=es, date=’2012-04-07 06:13:03’, date_default=1, date_redac=’2012-04-07 06:13:03’, date_redac_default=1 (662 octets)
      _

      spip.log

      _saisies=a:5 :i:0 ;a:3 :s:7 :« options ».., id=2, _hidden=’<input type=« hidden » name=« ..’, formidable_afficher_apres=valeurs, formulaire_args=DvvAd43GvPe9n/fKzCgHD/uui0e.., erreurs=a:1 :s:14 : »message_erreur" ;.., action=spip.php ?artic.., form=formidable, editable=’ ’, message_erreur=’

      Voila je sais pas si
      ça peut aider.....

      les erreurs de tables pour et condition me semblent etranges...

    • Je viens de me rendre compte de qqchose :
      su le site sur base mysql les tables sont bien présentes puisque dans la création d’un backup du site j’ai l option de les sauvegarder, par contre sur lña page création d’un formulaire j’ai :
      table inconnue ou
      Invalid argument supplied for foreach() in ecrire/inc/modifier.php on line 67 une fois que j’essaie de sauvegarder un nouveau formulaire....

      Saludos

    • une piste !!!!

      pour le site en essai sur mysql j’ai réussi a créer les tables !!!
      j’ai supprimer tous les lignes blanches (espace) des documents php du formulaire.
      j’avais lu quelque part que cela pouvait générer des erreurs....

      le message Une erreur est survenue lors de l’envoi du courriel n’aparait plus par contre je ne recois pas les mails...

      j’ai remarqué un conflit avec le plugin Inscription 3 qui ne permet pas d’envoyer un formulaire lorsque l’on est auteur ou visiteur (Cette adresse email est déjà enregistrée. Utilisez le formulaire de connexion pour accéder à votre compte.) comme si il s’agissait d’une inscription....

    • Cela fonctionne !!!!
      Il faut donc supprimer les lignes blaches, espaces des documnets.php du plugin !
      désinstaller et réinstaller le plugin

      dernier soucis le conflit avec inscription3 ; une idée ?

      else
      // verifier que le mail est valide
      if(!email_valide($valeur))
      return _T(’inscription3:erreur_email_valide’) ;

      // Verifier si le mail est déjà connu
      if (strlen($valeur) > 0 AND email_valide($valeur))
      if ($id = sql_getfetsel(« id_auteur »,« spip_auteurs »,« id_auteur !=’ ».intval($options[’id_auteur’]).« ’ AND email = ’$valeur’ »))

      // si un inscrit depuis moins de quelques minutes est dans la session
      // c’est qu’il cherche a corriger sa fiche
      // on le laisse passer
      include_spip(« inc/inscription3_session ») ;
      if($id_inscrit = i3_session_valide())
      return false ;

      // est-ce un email connu à qui il manque des champs obligatoires
      // (inscrit partiellement par spip listes par ex) ?
      // si oui, on pose une session et on le laisse passer.
      // Il parrait q’un admin spip peut créer un compte avec un email existant...
      // Ne faites pas ca, si vous êtes sain d’esprit et comptez utiliser ce code !
      include_spip(« inc/inscription3_inscrit_partiel ») ;
      if(i3_inscrit_partiel($id))
      return false ;

      return _T(’inscription3:erreur_email_deja_enregistre’) ;

    • une piste !!!!

      pour le site en essai sur mysql j’ai réussi a créer les tables !!!
      j’ai supprimer tous les lignes blanches (espace) des documents php du formulaire.
      j’avais lu quelque part que cela pouvait générer des erreurs....

      Ben non encore heureux qu’on ait le droit de faire des lignes blanches, sinon ce serait illisible. C’est s’il y en a en dehors des balises PHP <?php ... ?> que là ça peut faire péter parfois. Mais je ne vois pas dans quel fichier ça casse.

      Tu peux faire ta manipulation au cas par cas pour savoir lequel ou lesquels des fichiers sont incriminés ?

    • formidable_installation.php et formidable_tables.php sont ceux qui apparemment font que cela fonctionne ou pas ; je dis pas de supprimer toutes les lignes vides mais juste celles après

      <?php 
       et ça fonctionne...
      ?>

      ai essayé sur un autre site en essai avec le formulaire qui ne fonctionnait pas non plus et après changement de ces deux fichiers ; fonctionne....

      une idée pour le plugin inscription avec formidable pour les soucis d’emails auteurs et visiteurs qui ne peuvent envoyer de formulaire ?

      autre chose ; peut on joindre aux Destinataires des emails a partir de champs email pour envoyer a ses amis... genre recommander ce site a ses amis...
      #FORMULAIRE_FORMIDABLE1,#ARRAYtraitements,input_3,input_4 ne semble pas fonctionner
      une idée ?

    • ici par exemple ils en parlent de cette ligne blanche chez ovh...

    • je reformule ma question

      n’y aurai t il pas un moyen de mettre dans le champ Destinataires supplémentaires de la configuration d’un formulaire @imput_3@, @imput_4@ ....

    • Mais je sais bien qu’il ne faut rien laisser en dehors de la balise PHP, c’est justement ce que j’ai dit dans mon message précédent. Sauf que re-justement je ne vois aucun caractère ni ligne vide en dehors du PHP, dans les deux fichiers en question, donc je n’arrive pas à comprendre ce que tu as pu supprimer.

    • juste la ligne après

      <?php
      _ soit:
      
      <?php
      
      // Sécurité
      
      
      
      <?php
      // Sécurité
      
      une idée pour un «moyen de mettre dans 
      _ le champ Destinataires supplémentaires de la 
      _ configuration d’un formulaire @imput_3@, @imput_4@ ....»??
    • C’est vraiment bizarre car dans TOUS les fichiers de TOUS mes plugins, il y a une ligne vide après le <?php et ce depuis fort longtemps. Et pourtant les autres plugins s’installent bien, non ? Donc c’est un peu de l’incantation magique là... je n’arrive pas à comprendre la logique.

      Pour ton autre question, non il n’y a pas moyen d’envoyer à des destinataires qui seraient remplis par le visiteur.

    • oui je sais que ca peut paraitre étrange mais j’avais déjà eu ce problème et en faisant la même opération cela avait été réglé....
      de plus juste sur les deux fichiers mentionnés ; je t’invite a tester sur ovh pour te rendre compte par toi même....

      J’ai déjà eu le cas également à cause d’une ligne vide dans le fichier « functions.php ». Le classique « Headers already sent "

      dans cet autre post cela est confirmer ; je ne me l’explique pas mais cela fonctionne après correction....

      Pour mon soucis de imput j’ai essayé ce genre de chose aussi #FORMULAIRE_FORMIDABLE2#ARRAYchamp_destinataires_plus,@input_3@
      mais rien ne semble fonctionner ; en intégrant une option php pour champ_destinataire_plus, c’est possible ?
      un coup de main serait bien venue
      merci d’avance

    Répondre à ce message

  • 3
    benolaos

    Bonjour,

    petite question pratique : quand un champ du formulaire n’est pas rempli, l’e-mail de réponse voit quand même apparaître le champ, affecté de « sans réponse ».
    y a-t-il une manière de dire au formulaire que s’il n’y a pas de réponse, il est inutile d’afficher ledit champ dans le mail ?

    En vous remerciant

    • Non actuellement ça ne fait pas partie des options. Enfin en cliquant. Par contre tu peux très bien refaire toi-même le squelette du mail, comme expliqué dans la doc.

    • benolaos

      Bonjour RastaPopulos,
      Je ne vois malheureusement pas comment personnaliser l’e-mail d’envoi. En effet, dans formulaire_email.html, je ne vois qu’une ligne : #VOIR_SAISIES#ENV*saisies, #ENV*valeurs

      Faut-il « attaquer » saisies quelque part ? Je voudrais simplement :
      -  éventuellement enlever les réponses « sans réponse » du email (ça ne sert à rien)
      -  mettre les réponse à la suite de l’intitulé, et non en dessous.
      Ca fait gagner de la place, et en visibilité. Et pour ceux qui impriment, ça fait des économies de papier (pensons à nos arbres...)

      Merci pour ton éclairage, toujours approprié ;-)

    • #VOIR_SAISIES c’est une balise qui fait tout toute seule. Là si tu veux personnaliser c’est à toi de boucler sur la réponse en question puis sur les champs qui lui sont liée. Et en parallèle boucler sur le formulaire et les saisies qu’il contient puisque c’est là que tu auras les labels.

      C’est pas trop compliqué si tu sais que tu n’as que des champs libres (input text etc) car la valeur en base est directement la valeur que tu vas afficher. Alors que pour d’autres saisies (cases à cocher par ex) ce sont les clés qui sont enregistrées, donc faut retrouver les labels ensuite. D’où le dossier saisies-vues qui a des trucs tout fait et qu’utilise #VOIR_SAISIES.

    Répondre à ce message

  • 10
    Olivier30

    A l’attention de RastaPopoulos ou de l’un de ceux qui a déjà compris :
    Je pense que mon problème est assez simple, mais je ne trouve pas et ne comprend pas.
    Le plugin fonctionne bien avec l’insertion du modèle standard par formulaire|formidable|id=1.
    Mais je souhaiterais aligner les différents champs et ne trouve pas la localisation des CSS utilisées.
    Rien ne change en modifiant les attributs des labels dans spip_formulaire.css localisé dans /squelettes-dist (Spip version 2.1.10).
    L’ajout d’une entrée .formulaire_formidable label ne change rien non plus...
    .formulaire_formidable label display : block ; width : 500px ; float : right ;
    Comment faire ? Dans quelle feuille de styles ?
    Te (ou vous) remerciant de ta (ou votre) réponse,
    Olivier

    • Tout ceci est un problème de styles CSS, donc non lié à ce plugin qui ne fait que générer le HTML, en utilisant les mêmes normes de HTML et de classes CSS que tous les autres formulaires de SPIP.

      Je crois qu’il te faut donc apprendre les CSS. :)

      Déjà en CSS ya pas de localisation précise. On peut styler plusieurs fois un même élément, il y a ensuite un ordre de priorité, et le dernier arrivant à raison. Donc on peut très bien surcharger tel ou tel style dans une autre feuille venant après.

      Il faut effectivement forcer une taille fixe aux labels si tu veux que ce soit aligné. Mais je ne peux pas te dire où, dans quelle feuille, vu que ça dépend complètement de ton site (des squelettes quoi).

    • Olivier30

      Merci beaucoup,
      J’ai simplement ajouté les attributs « .formulaire_spip label » dans ma feuille « spip_style » appelée par mes squelettes (notament la page article qui inclut le formulaire par « formulaire|formidable|id=1 » ).
      C’est effectivement tout simple et j’espère que cet échange sera utile à d’autres.
      De mon coté, je compte bien améliorer mes compétences sur CSS et sur SPIP...
      Encore merci,

    • La seule raison pour laquelle je n’utilise pas ce plugin est de problème de css. Franchement la réponse de Raspatpopoulos me fait penser que Spip a été développé par et pour les gens du club uniquement.

      En lisant « les mêmes normes de HTML et de classes CSS que tous les autres formulaires de SPIP », je ne comprends pas pourquoi le formulaire formidable ne fonctionne pas « tout seul » sur un site qui contient déjà d’autres formulaires spip.

      Le non initié que je suis n’a finalement trouvé aucune réponse à ses interrogations dans ce message, malgré la promesse de son titre.

    • Ya que chez toi que ça ne marche pas guilaind hein. Ou alors prouve-le en nous indiquant à tous comment reproduire ton problème. Sinon ta remarque ne sert à rien.

      Le plugin n’a surtout pas à ajouter des styles CSS. C’est à toi de styler ton site comme tu veux. Ce plugin n’ajoute que des fonctionnalités, sans modifier le visuel de ton site.

      Si les formulaires de ton site ne sont pas stylés par défaut, c’est que ton site a un problème. Pas le plugin.

      Et dans le squelette par défaut de SPIP, les formulaires sont stylés correctement.

      Alors vas-y, je t’en pris : décris-nous comment reproduire ton problème.

    • A la lecture des réponses, je comprends que ce plugin ne touche pas à la feuille de style, alors que forms&tables par exemple change tout. Les puristes en sont sans aucun doute enchantés. Le néophyte que je suis s’attendait pourtant à trouver cette information basique dans la doc, avec par exemple un lien vers la page sur la gestion des formulaires de spip.

      Le néophyte que je suis va donc aller voir ailleurs et va cesser d’importuner les puristes avec ses questions stupides.

      On parlait récemment de rendre spip accessible aux néophytes. Voeu pieux ou réalité ?

    • Ça ne dit toujours pas comment reproduire ton problème. Ton problème étant, je le rappelle, que TON site n’a apparemment pas de styles par défaut pour les formulaires.

      Le vœu est plus facile à réaliser en procédant comme procède ce plugin, car justement c’est un plugin fonctionnel. Si chaque plugin ajoutait ses styles, ça aboutirait à une bouillie infâme super dur à surcharger pour savoir où styler quoi.

      Faut justement pas tout mélanger : ce plugin fournit une fonctionnalité, tandis que ton squelette et/ou ton thème fournit le graphisme du site. Ainsi madame Michu s’y retrouve mieux.

      Si tes formulaires sont moches, alors le conseil serait d’aller râler sur la personne qui t’a fourni ton thème graphique. Et je ne crois pas que ce soit SPIP, puisque le squelette par défaut style correctement les formulaires. À moins que tu n’expliques comment reproduire les mauvais styles chez nous ?

    • Mon site a un style, pas de souci de ce côté.

      Je ne parviens pas à régler la largeur de « text » identique à celle des select et text area. Voici le morceau de mon css qui correspond aux formulaires. J’ai tenté de régler la largeur dans les paramètres du champs

      /* 
         Forms 
      ------------------------------------------- */
      
      .formulaire_spip { clear: both; margin-bottom: 2em; padding: 0; border: 0; text-align: left; font-size: 1em; }
      form { margin: 0; padding: 0; } /* Bug IE/Win */
      label {display: block; text-align: left; font-weight: bold; cursor: pointer; /* pour IE/Win */ position: relative;}
      fieldset {padding: 1.4em; margin: 0 0 1.5em 0; border: 1px solid #ccc;}
      legend {font-weight: bold; font-size: 1.2em;}
      textarea {overflow: auto;}
      input.text, textarea, select {width: 99%; background: #FCFCFC; border: 1px inset #AAA; margin: 0.5em 0; padding: 4px 5px;}
      input.text:focus, textarea:focus, select:focus {background: #FFFFF5;}
      li p { margin-top: 0; margin-bottom: 0; }
      .explication { font-size: 0.8em; margin: 0.50em 0; color: #444; font-style: italic; }
      .boutons input, input.submit { background-color: #00ADEF; font-weight: bold; border: 1px, border-style: solid; border-color: #000; padding: 4px 5px;}
      .choix label{display:inline; font-weight:normal;}
      .choix input.radio,
      .choix input.checkbox {width:auto;}
      .form-error {border-color: #F00;}
    • Et si tu ajoutes : ?

      input, select, textarea { 
          box-sizing: border-box; 
          -moz-box-sizing: border-box;
          -webkit-box-sizing: border-box;
      }
    • Dans le bac à sable suivant, j’ai mis tes styles + la ligne proposée plus haut + le résultat HTML d’un formulaire produit par Formidable : http://dabblet.com/gist/2321877

    • Merci pour ce bout de code qui hélas n’a rien réglé.

      J’ai tenté de renommer le spip_formulaire.css dans le squelettes-dist et j’ai réussi à afficher mon formulaire formidable sur toute la largeur mais avec des bullet points avec qq problèmes (alignait mon bouton à gauche + flingait la mise en page de mon bouton recherche). J’ai donc remis le spip_formulaire.css du squelettes-dist et changé la ligne

      /* Champs de saisie */
      .formulaire_spip input.text { width: 15em; border: 1px inset; }

      en

      /* Champs de saisie */
      .formulaire_spip input.text { width: 99%; border: 1px inset; }

      Je ne pensais pas que le spip_formulaire.css du squelettes-dist aurait un impact là dessus.

      Mon problème de largeur est donc réglé et l’affichage nickel. La prochaine fois je m’attaque à avoir label + text sur la même ligne...

    Répondre à ce message

  • 3

    Bonjour,

    Je souhaite que l’utilisateur puisse joindre un document pdf, .doc ou une image au formulaire. Ceux-ci devraient ensuite parvenir au destinataire.
    Est-il possible de rajouter un champ « Ajouter un document » dans le formulaire ? Je ne l’ai pas trouvé dans l’interface.
    Merci pour ce beau plugin.

    Bonne journée,

    Michel.

    • Nan il n’y pas de champ fichier pour l’instant. Ça fait partie des choses à faire et que je suis censé faire assez rapidement, mais faut que je trouve le temps...

    • Merci pour la réponse,

      Existe-t-il un autre plugin qui permettrait de le faire ?
      Ou sinon, dois-je m’y prendre ? Pour exemple, le formulaire sur lequel je suis en train d’écrire me conviendrait à peu près(en y rajoutant la possibilité d’uploader des pdf et .doc et la possibilité d’envoyer le message et le fichier vers une boîte mail (destinataire unique pour tout le site)).

      Bonne journée,

      Michel

    • Si c’est pour un formulaire tout simple alors tu peux utiliser le formulaire de contact avancé

    Répondre à ce message

  • 18

    Bonjour,
    étrange comportement du plugin lorsqu’on le désactive (je ne parle pas de désinstallation), et qu’on le réactive :
    -  les formulaires semblent toujours actifs (ils apparaissent dans l’espace public, et les champs de la BDD sont manifestement toujours renseignés)
    -  dans l’espace privé, par contre, les formulaires ne s’affichent pas (donc impossible de les modifier)

    — > auriez-vous une solution pour « retrouver » la main sur ces formulaires ? En vous remerciant...

    • C’est très bizarre en fait, ça ressemble à un bon gros bug. Mais là comme ça je ne sais pas encore d’où cela pourrait venir (car juste la désactivation ne touche à rien dans la base normalement).

    • benolaos

      Bonjour RastaPopoulos,
      Il s’avère que cette erreur est récurrente (absence des formulaires dans le site privé, mais qui s’affichent correctement dans le site public).

      Plus étrange encore, des erreurs apparaissent dans le site privé lors de la première requête sur TOUS les formulaires (voir image ci-dessous), 6 erreurs qui disparaissent après rafraîchissement de la page, page qui alors indique qu’il n’y a pas de formulaires.

      Même chose si on veut produire un nouveau formulaire : 2 erreurs sont affichées, qui disparaissent après rafraîchissement... Mais impossible d’ajouter le nouveau formulaire, retournant le message « Warning : Invalid argument supplied for foreach() in ecrire/inc/modifier.php on line 67 ».

      En espérant que cela pourra amener à une résolution...

    • C’est dans SPIP 3 tout ça ? J’avais commencé une branche, qui fonctionnellement marchait chez moi mais n’étais pas adapté encore à la nouvelle manière de faire les pages privées, mais il y a eu récemment des modifs par d’autres personnes (Teddy je crois ?). Donc ces erreurs de squelettes viennent peut-être de là. Je peux pas voir pour l’instant, la zone est morte.

    • Bon ben non, là que ce soit dans la branche v0 ou dans le trunk, ya bien un critère pagination dans la boucle de ce squelette, donc le bug affiché n’a rien de logique.

    • benolaos

      Les sites (car l’erreur se répète sur 2 sites) sont sous SPIP 2.1.12, et j’avoue ne rien comprendre du tout à ce problème, ni à la façon dont je pourrais le contourner. Si je vois une solution (je ne parle pas d’une résolution du problème ;-)), je poste.

      Pour l’instant, je me contente de changer directement les données via la BDD, mais ce n’est pas très pratique ;-)

    • Et ça fait ça dès l’installation ? T’as essayé en supprimant tout et en réinstallant ? Et surtout as-tu bien désactivé tous les autres plugins non nécessaire pour bien tester que ça vient bien que de ce plugin-là ?

    • J’ai exactement le même problème que celui décrit par benolaos
      SPIP 2.1.12
      Sarka-SPIP 3.1.0
      J’ai essayé de désactiver certains plugins (en particulier Sarka et Accès Restreint), cache vidé à chaque fois. Message d’erreurs toujours le même. Je peux cliquer sur « créer un nouveau formulaire » mais rien ne s’enregistre.

    • benolaos

      J’ai désinstallé plugin par plugin, et, à la fin, bug dans l’espace privé :
      Fatal error : Call to undefined function lire_config() in xxx/xxx/ecrire/public/composer.php(49) : eval()’d code on line 77
      Aïe. Il semble que je sois maintenant coincé...

    • benolaos

      Cette erreur ci-dessus peut être corrigée en vidant tout le dossier tmp/cache. On peut ainsi reprendre la main sur le back-office.

      Pour autant, je n’arrive toujours pas à reprendre la main sur les formulaires.
      Plus étrange encore, en refaisant l’installation de tout le site sur le serveur distant (fichers + BDD), je continue d’avoir les mêmes problèmes... j’en perds mon latin (et mon spipien ;-))

    • Mais est-ce qu’il y a bien tout dans la base ? Ya bien toutes les tables de créées lors de l’installation ?

    • benolaos

      RastaPopoulos,
      oui, toutes les tables sont là.
      Mais voilà l’info qui peut peut-être faire avancer le schmillblick : en local, tout fonctionne (duplication du site, duplication de la base, désactivation et désinstallation du plugin formidable, etc...). En local, TOUT fonctionne parfaitement.

      J’ai donc fait une batterie d’essais et il semble que les problèmes soient causés lors de l’intégration sur le serveur distant (5 réinstallations complètes sans que rien ne change...). C’est LA que tout coince. Une idée de là où ça pourrait venir ?

    • Version de PHP, version du serveur SQL ?

    • benolaos

      je suis sur OVH (PHP5) htaccess chargé de SetEnv PHP_VER 5

    • En tout cas ce n’est donc pas un bug du plugin mais un problème lié à ton installation particulière. Donc il faut trouver ce qu’il y a de particulier justement.

    • benolaos

      C’est bien là le problème : j’installe sur OVH les dernières versions de :
      SPIP, Vérifier, Facteur, Yaml, Bonux, Saisies (et uniquement ça). Puis .htaccess avec PHP5. Tout est neuf, sans données, propre donc.

      Mais si l’installation des plugins se déroule correctement, voici ce qui se passe :
      1) les 4 tables de Formulaire ne se créent pas (d’où erreur lorsqu’on veut créer son premier formulaire).
      2) je crée donc manuellement les tables, mais erreur :
      Warning : Invalid argument supplied for foreach() in xxx/xxx/ecrire/inc/modifier.php on line 67
      Je crée donc mon premier formulaire : la table spip_formulaires voit alors une ligne se rajouter, avec des NULL (identifiant, descriptif et url_redirect), et rien pour le titre (alors que, pourtant, renseigné lors de la tentative de création).
      3) je mets en distant des données tirées de mon site en local. Je vide les caches, et tmp/cache. Mais rien n’y fait et je retombe sur l’erreur première (que j’ai postée en image).

      — > Il y a manifestement quelque chose qui cloche quelque part ;-)

      Quelles informations supplémentaires te seraient nécessaires pour nous aider à trouver ce qui semble un gros bug, non ?

      En te remerciant pour ton aide et tes lumières.

    • Si dès la toute première installation ya déjà pas les tables qui se créent, ça ressemble plutôt à une erreur SQL. Donc il faudrait que tu fouilles les logs de SPIP tmp/*.log pour trouver cette ou ces erreurs SQL, du genre mauvaise syntaxe dans la déclaration des tables par rapport à ta version du serveur (MySQL ?).

    • benolaos

      Bonjour RastaPopoulos,
      Franchement, SQL n’est pas ma partie, mais du tout.
      Et avouons que le comportement du plugin est bien étrange, et ne devrait idéalement ne pas requérir de trifouiller ainsi dans des logs et des SQL...
      Puisqu’il ne semble pas que j’aie le choix, pourrais-tu m’indiquer plus précisément ce que je suis censé chercher/réparer ?
      En te remerciant.
      PS : comment se fait-ce que les formulaires s’affichent parfaitement dans l’espace public et qu’on ait tant de problèmes dans l’espace privé ? Voilà une question qui m’interpelle ;-)

    • Et avouons que le comportement du plugin est bien étrange, et ne devrait idéalement ne pas requérir de trifouiller ainsi dans des logs et des SQL...

      Ben non. Si ya un BUG, c’est que ce n’est PAS le comportement normal du plugin, et que donc forcément il faut fouiller dans les logs pour trouver d’où peut venir le bug...

      Une personne sur IRC avait apparemment le même problème, et en me montrant ses logs il est apparu que lors de l’activation du plugin, ça ne reconnaissait même pas les fonctions PHP du plugin. Il y avait des phrases du genre « fonction formidable_declarer_tables_principales() inconnue ». Et donc forcément sans la déclaration des tables, ça ne risque pas d’installer quoi que ce soit. Mais je n’ai pas compris encore pourquoi ça ne trouvait pas les fonctions.

      Tu peux déjà chercher si t’as le même genre de phrases, juste après la première activation (et donc l’installation) du plugin.

    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