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

812 discussions

  • 1
    rburton

    Bonjour,

    je cherche à permettre aux internautes de choisir dans une liste (case à cocher ou autre) le mail auquel un formulaire doit être aussi envoyé ...

    Mais je me demande comment faire ?

    une idée ?...

    Merci,
    RBurton

    Répondre à ce message

  • 1

    Bonjour,

    Est-ce qu’il est possible de diriger les réponses selon un choix fait dans un champ ?

    Ex :
    Menu déroulant avec plusieurs choix :

    Les tartines au chocolat
    Les tartines à la fraise
    Etc...

    Si je choisi les tartines au chocolat alors la réponse du formulaire est envoyée à tartinesauchocolat@douceur.com

    Répondre à ce message

  • 4

    Spip 2.1.17
    Php 5.4.4
    Formidable : Version : 0.6.6 [65153]
    Vérifier : Version : 0.1.16 [64891]
    facteur : Version : 1.8.9 [60363]
    Saisies : Version : 1.26.2 [64324]
    Bonux : Version : 2.3.0 [61354]
    YAML : Version : 1.5.0 [63998]

    Il semble y avoir un problème avec les nom de site qui ont des accents, car le test avec le plug « facteur » fonctionne très bien, mais si je complète le formulaire et fait un envoi, j’ai :

    « Dansé » à la place de « Dansé »

    Cordialement, Franck

    Répondre à ce message

  • 2

    Bonsoir,

    Depuis un moment j’essai de comprendre comment rré-remplir dynamiquement les champs select avec les titre des articles, mais j’ai pas sus comment faire.

    Pouvez-vous m’aider SVP

    • Mais de quels articles ? Tous ? Dans tous les cas, il n’y a pas de saisie pour ça actuellement donc :

      Tu dois créer ta propre Saisie qui fait ce que tu veux, sur le modèle des autres Saisies du plugin éponyme, c’est juste un fichier HTML qui produit le champ, et un fichier YAML qui lui donne un titre, une icône, etc. « articles.html » et « articles.yaml » par exemple, et tu peux copier sur une saisie qui ressemble comme par exemple la saisie des auteurs.

    • En fait je veux mettre uniquement des articles d’une rubrique précise, donc il y en aura qu’une dizaine au final.
      Comme il y aura peux de choix, je sais que je peux le faire à la main, mais ma crainte c’est qu’un jour j’oublie de le faire, d’ou mon obligation de le faire dynamiquement.

      J’ai essayé de voir auteur.html et auteur.yalm, mais destinataire.html et yalm semble le plus proche de ce que je veux faire.
      J’ai essayé, mais je n’y arrive pas.

    Répondre à ce message

  • 15

    Bonjour ! Et merci de ce plugin élégant et fort utile, et attendu !

    Installé le plugin avec un spip 3, ça marche en local de manière superbe (sauf la remarque précédente sur le "obligatoire" un peu trop obligatoire !). Je transfère tout sur un serveur, et patatras : "5 erreurs dans le squelette" : Table SQL « FORMULAIRES » inconnue. J’ai essayé successivement : de 1)restaurer la base à partir d’un dump - 2) restaurer la base intégrale par phpmyadmin - 3) restaurer uniquement les tables "formulaires-". C’est toujours la même chose. Et si j’essaie d’importer un formulaire yaml, j’ai un warning : Warning : Invalid argument supplied for foreach() in /home-----/ecrire/inc/modifier.php on line 112.

    Que puis-je tenter ?
    Précision : spip 3, dernière version du plugin, php 5.2.17, mysql 5.0.95-community. Il traîne dans la base de "vieilles" tables de forms&tables : elles perturberaient quelque chose ?

    • Re... Ce n’est pas pour « spammer », mais pour aider ! Ayant supprimé les vieilles tables « forms », puis les tables « formulaires » via phymyadmin, désinstallé et supprimé le plugin, puis rechargé, je repars à l’assaut. Re-patatras : voir image.

      Bel été à tout le monde !

    • merlins81

      Bonjour, j’ai le même pb. Si solution trouvée............je suis preneur
      Merci

    • Même chose ici, le transfert s’est mal passé et impossible d’obtenir un plug fonctionnel. La désactivation et désinstallation ne nettoie pas en profondeur. Du coup on ne peut pas ré-installer proprement.

    • Sonia JOHNSON

      Bonjour tout le monde, j’ai le même pb. Sauf que chez moi les formulaires s’affichent bien dans la partie publique mais pas dans l’espace privé. Quelqu’un pourrait nous aider ?
      Merci

    • SOS Il n’y a toujours personne pour nous aider ?

    • J’ai pas encore résolu le souci, mais je pense que ça vient de la déclaration des tables dans : formidable_1_0/base/formidable_tables.php

    • Re,

      donc ok c’était bien ça le souci, en remettant un peu en forme ce fichier, désactiver le plugin puis le réactiver, et hop , ça marche.
      en fait, par rapport au souci de ce fichier, spip n’arrive pas à boucler sur les table du plugin d’où le souci.
      Tout le code php était sur une ligne, donc avec les commentaires ça posait souci.

      Au final on obtient kk chose comme ça :

       
      <?php 
      // Sécurité
      if (!defined('_ECRIRE_INC_VERSION')) return;
      function formidable_declarer_tables_interfaces($interface){
      	// 'spip_' dans l'index de $tables_principales
      	$interface['table_des_tables']['formulaires'] = 'formulaires';
      	$interface['table_des_tables']['formulaires_reponses'] = 'formulaires_reponses';
      	$interface['table_des_tables']['formulaires_reponses_champs'] = 'formulaires_reponses_champs';
      	$interface['table_titre']['formulaires'] = 'titre';
      	$interface['tables_jointures']['spip_formulaires'][] = 'formulaires_liens';
      	$interface['tables_jointures']['spip_articles'][] = 'formulaires_liens';
      	$interface['tables_jointures']['spip_rubriques'][] = 'formulaires_liens';
      	return $interface;}
      	
      	function formidable_declarer_tables_principales($tables_principales){
      		//-- Table formulaires -----------------------------------------------------
      		$formulaires = array(
      			"id_formulaire" => "bigint(21) NOT NULL",
      			"identifiant" => "varchar(200)",
      			"titre" => "text NOT NULL default ''",
      			"descriptif" => "text",
      			"message_retour" => "text NOT NULL default ''",
      			"saisies" => "text NOT NULL default ''",
      			"traitements" => "text NOT NULL default ''",
      			"public" => "enum('non', 'oui') DEFAULT 'non' NOT NULL",
      			"statut" => "varchar(10) NOT NULL default ''",
      			"maj" => "timestamp",
      			"apres" => "varchar(12) NOT NULL default ''",
      			"url_redirect" => "varchar(255)"	);
      		$formulaires_cles = array("PRIMARY KEY" => "id_formulaire"	);
      		$tables_principales['spip_formulaires'] = array(
      			'field' => &$formulaires,
      			'key' => &$formulaires_cles,
      			'join'=> array('id_formulaire' => 'id_formulaire')
      		);	
      		//-- Table formulaires_reponses --------------------------------------------
      		$formulaires_reponses = array(
      			"id_formulaires_reponse" => "bigint(21) NOT NULL",
      			"id_formulaire" => "bigint(21) NOT NULL default 0",
      			"date" => "datetime NOT NULL default '0000-00-00 00:00:00'",
      			"ip" => "varchar(255) NOT NULL default ''",
      			"id_auteur" => "bigint(21) NOT NULL default 0",
      			"cookie" => "varchar(255) NOT NULL default ''",
      			"statut" => "varchar(10) NOT NULL default ''",
      			"maj" => "timestamp"	);
      		
      		$formulaires_reponses_cles = array(
      			"PRIMARY KEY" => "id_formulaires_reponse",
      			"KEY id_formulaire" => "id_formulaire",
      			"KEY id_auteur" => "id_auteur",
      			"KEY cookie" => "cookie"	);
      		
      		$tables_principales['spip_formulaires_reponses'] = array(
      			'field' => &$formulaires_reponses,
      			'key' => &$formulaires_reponses_cles,
      			'join'=> array('id_formulaires_reponse' => 'id_formulaires_reponse',
      			'id_formulaire' => 'id_formulaire',
      			'id_auteur' => 'id_auteur'		)	);	
      		//-- Table formulaires_reponses_champs -------------------------------------
      		$formulaires_reponses_champs = array(
      			"id_formulaires_reponse" => "bigint(21) NOT NULL default 0",
      			"nom" => "varchar(255) NOT NULL default ''",
      			"valeur" => "text NOT NULL DEFAULT ''",
      			"maj" => "timestamp"	);
      		$formulaires_reponses_champs_cles = array("PRIMARY KEY" => "id_formulaires_reponse, nom","KEY id_formulaires_reponse" => "id_formulaires_reponse");
      		$tables_principales['spip_formulaires_reponses_champs'] = array('field' => &$formulaires_reponses_champs,'key' => &$formulaires_reponses_champs_cles	);
      		return $tables_principales;}
      		function formidable_declarer_tables_auxiliaires($tables_auxiliaires){	$formulaires_liens = array(		"id_formulaire"	=> "bigint(21) DEFAULT '0' NOT NULL",		"id_objet"	=> "bigint(21) DEFAULT '0' NOT NULL",		"objet"	=> "VARCHAR (25) DEFAULT '' NOT NULL"	);	$formulaires_liens_cles = array(		"PRIMARY KEY" => "id_formulaire,id_objet,objet",		"KEY id_formulaire" => "id_formulaire"	);		$tables_auxiliaires['spip_formulaires_liens'] = array(		'field' => &$formulaires_liens,		'key' => &$formulaires_liens_cles	);		return $tables_auxiliaires;}
      		
      		function formidable_rechercher_liste_des_champs($tables){	$tables['formulaire']['titre'] = 5;	$tables['formulaire']['descriptif'] = 3;	return $tables;}
      		
      		?>
    • Sonia JOHNSON

      Bonjour et merci beaucoup. Chez moi ça marche correctement.

    • Le truc c’est que le fichier n’est absolument pas sur une seule ligne :
      http://zone.spip.org/trac/spip-zone/browser/_plugins_/formidable/trunk/base/formidable_tables.php

      Ni sur ce qu’affiche le dépôt SVN, ni sur aucun de mes éditeurs de texte. Donc je ne comprends toujours pas d’où ça vient...

    • Aaaaah je crois avoir compris !

      La commande « file » de mon système, me donne comme réponse : PHP script, UTF-8 Unicode text, with CR line terminators

      Ce qui signifie que quelqu’un a dû modifier, enregistrer et envoyer sur le SVN ce fichier avec un éditeur Windows pourri qui fait des fins de ligne pourris !

    • merlins81

      j’ai peur de paraître lourd mais j’ai toujours un message d’erreur à la validation de mon formulaire
      Erreur SQL 1146
      Table ’lesmerlins81.spip_formulaires’ doesn’t exist
      SELECT id_formulaire FROM spip_formulaires WHERE identifiant = ’resa and id_formulaire != 0’

      Je suis sous spip 3.03
      Merci pour votre aide

    • Mais ça sert à rien d’essayer de valider ton formulaire puisque comme déjà expliqué plusieurs fois, c’est dès l’installation que ça merdoit, le plugin n’est donc pas installé, ya pas la description des tables donc ça ne risque pas de marcher correctement. Ce problème est dû au fichier de description des tables dans le dossier base/ qui est encodé avec des fins de lignes Windows pourries, j’ai l’impression. Et du coup PHP ne reconnait pas ça comme des fins de ligne et donc ça fait n’importe quoi.

      Si quelqu’un se rappelle de la commande à faire pour changer l’encodage des fins de ligne...

    • Quelqu’un a t’il trouvé une solution pour que l’installation fonctionne et crée les tables ?

    • Je viens de poster une correction sur ce plugin, un seul fichier n’était pas UTF-8, et rien à voir avec le dossier base/ :
      http://zone.spip.org/trac/spip-zone...

      A voir si ça change quelque chose de ce côté là ?

      En revanche, je ne vois pas de fichier « formidable_administrations.php » : la compatibilité avec SPIP v3 n’est peut-être pas achevée ? A vérifier si les mises à jours de la base se font bien.

    • À priori c’est pas un problème d’UTF mais d’encodage des fins de ligne dans le fichier de déclaration qui est dans base/. Quand j’aurais le temps je passerai un coup de « sed » dessus.

    Répondre à ce message

  • Bonjour, j’utilise formidable avec le plugin transaction et j’ai un problème avec les mails.
    En effet, formidable envoie un mail dès que l’utilisateur clique sur valider, or j’aimerais que le mail parte lorsque que le paiement est validé.

    J’ai vu la méthode traiter_email_dist, comment pourrais-je l’appeler à partir du plugin transaction (quels paramètres) ?

    Merci d’avance

    Répondre à ce message

  • Abracadavra

    Bonjour,
    Est-il prévu d’ajouter une fonctionnalité ’champ input type file’ (possibilité pour l’internaute d’envoyer un CV ou autre) à Formidable pour SPIP3 ?
    Si non, comment créer cette fonction moi-même ?

    Merci d’avance pour vos retours

    Répondre à ce message

  • 17

    Bonjour,

    J’ai un drôle de problème, lorsque j’essaie d’exporter un formulaire au format csv, j’ai une erreur bizarre :

    Lors de l’enregistrement, Windows me fait poper une fenêtre avec le message suivant :

    JUq4Oa6f.csv.part ne pourra être enregistré car le fichier source ne peut être lu.

    Réessayez plus tard ou contactez l’administrateur du serveur.

    Une de mes collègues arrivent à télécharger le fichier csv, mais il est vide.

    Des idées de ce qui peut causer le problème ?

    J’ai désinstaller le plugin Accès Restreint, car je pensais que le problème pouvait venir de là, mais non, ce n’est pas ça.

    Je suis en SPIP 2.1.12, mysql 5x

    Merci de votre aide

    • Rebonjour,

      Après plusieurs tests, je pense qu’il y a quelques choses de corrompu dans ma BD, mais je n’arrive pas à savoir quoi.

      Sur le même serveur, j’ai créé un nouveau site, j’ai installé tous les plugins que j’utilise sur mon site principal. J’ai créé un formulaire tout neuf et j’ai pu exporter au format csv mes réponses.

      J’ai « restaurer » ma BD avec les données de mon site principal. J’ai retesté mes formulaires et je suis de nouveau plus capable d’exporter au format csv.

      Je suis vraiment bloquée... surtout que sortir les données à partir de PHPMyAdmin ce n’est pas joli et il faut tout reclasser.

      Toutes les idées sont les bienvenues !

      Zaa

    • Et est-ce qu’il y a une erreur quelque part dans les logs de SPIP ? Sinon il faudrait un accès au site qui merde, ou une copie, enfin quelque chose qui permette de reproduire le problème.

    • Bonjour,

      J’ai fait une recherche rapide dans les logs de SPIP avec les mot « erreur » et « error » et je n’ai rien trouvé. Aurais-je dû faire un autre type de recherche ?

      Ça me ferait plaisir de te donner accès au site de test, tu peux m’écrire au info a zaa.cc

      Merci beaucoup

    • yohooo

      Bonjour,

      Avez-vous trouvé la solution à ce problème ? Car je rencontre le même type de problème sur mon site.

    • Non, je n’ai pas trouvé de solution.

      Par contre dans le cadre du plugin Zabonnement j’ai dû écrire un fichier .csv et c’est assez facile à produire. Voici le code que j’ai utilisé pour Zabonnement (évidememnt les tables ne sont pas les même)

      C’est un fichier .html que j’ai créé dans mon dossier squelettes :

      #HTTP_HEADER{Content-Type:text/csv;charset=#CHARSET}
      #HTTP_HEADER{Content-Disposition:attachment;filename=export.csv}
      "No";"Statut";"Commande";"No de référence";"Abonné";"Adresse de livraison";"Adresse de facturation";"Téléphone";"Email";"Relance";"Début";"Échéance";"Abonnement";"Montant"
      <BOUCLE_liste_abonnements(CONTACTS_ABONNEMENTS){tri #ENV{order,date},#GET{defaut_tri}}>"#ID_CONTACTS_ABONNEMENT";"[(#VAL{abo:statut_#STATUT_ABONNEMENT}|_T)]";#SET{id_commande,''}<BOUCLE_quellecommand(COMMANDES_DETAILS){id_commandes_detail}>"#ID_COMMANDE";#SET{id_commande,#ID_COMMANDE}<BOUCLE_commande(COMMANDES){id_commande}>"#REFERENCE";<BOUCLE_auteur(AUTEURS){id_auteur}{tout}><BOUCLE_contact(CONTACTS){id_auteur}>"#PRENOM #NOM";</BOUCLE_contact>"#NOM";<//B_contact><BOUCLE_adresses_comande(ADRESSES adresses_liens){id_commande}>"[(#VOIE)][, (#VILLE)][ ((#PROVINCE))][ (#CODE_POSTAL)]<BOUCLE_pays(PAYS){code=#PAYS}> #NOM</BOUCLE_pays>";</BOUCLE_adresses_comande><BOUCLE_adresses_client(ADRESSES){id_auteur}>"[(#VOIE)][, (#VILLE)][ ((#PROVINCE))][ (#CODE_POSTAL)]<BOUCLE_pays_client(PAYS){code=#PAYS}> #NOM</BOUCLE_pays_client>";</BOUCLE_adresses_client><//B_adresses_comande><BOUCLE_telephones(NUMEROS){id_auteur}{0,1}>"#NUMERO";</BOUCLE_telephones>"#EMAIL";</BOUCLE_auteur></BOUCLE_commande></BOUCLE_quellecommand><//B_quellecommand>"[(#STADE_RELANCE)]";"[(#DATE|affdate)]";"[(#VALIDITE|affdate)]";#SET{lienobjet,#}[(#OBJET|=={abonnement}|oui)#SET{lienobjet,#URL_ECRIRE{abonnements}}][(#OBJET|=={rubrique}|oui)#SET{lienobjet,#URL_ECRIRE{naviguer,id_rubrique=#ID_OBJET}}][(#OBJET|=={article}|oui)#SET{lienobjet,#URL_ECRIRE{articles,id_article=#ID_OBJET}}][(#VAL{abo:#OBJET}|_T)]"[(#INFO_TITRE{#OBJET,#ID_OBJET})]";"[(#PRIX*|>{0}|oui)#PRIX]"</BOUCLE_liste_abonnements>

      Simplifier ça donne :

          #HTTP_HEADER{Content-Type:text/csv;charset=#CHARSET}
          #HTTP_HEADER{Content-Disposition:attachment;filename=export.csv}
          "Titre colonne champ_1";"Titre colonne champ_2";"Titre colonne champ_3"
          <BOUCLE_recup(OBJETS)  {criteres}>"#CHAMP_1";"#CHAMP_2";"#CHAMP_3"
          </BOUCLE_recup>

      Et voici un lien pour plus d’info : http://www.spip-contrib.net/Export-CSV-des-articles-pour-publication-papier#forum456043

      Si tu réécris un fichier pour Formidable, n’hésite pas à le poster ! :D

    • yohooo

      Ce mon coté, j’ai trouvé la solution depuis :

      Ce doit être un problème due à une récente mise à jour de Spip Bonux.
      Pour faire fonctionner l’export, J’ai mis en commentaire la ligne 90 dans le fichier :
      spip-bonux/inc/exporter_csv.php

      A priori, il n’y a pas d’effet collatéral.

    • Merci yohooo ! Le fait de mettre en commentaire la ligne 90 permet de faire fonctionner l’exportation csv !

      Rastapopoulos, est-ce que tu penses pouvoir fixer ça ?

    • Quel serveur (Apache ou autres) et quelle version de PHP ? Parc que ce bout de code est censé marcher, c’est pas forcément une solution de cacher sous le tapis.

    • yohooo

      En effet, il ne faut pas se précipiter.
      J’avais un client urgent, c’est pour ça que j’ai effacer cette ligne, mais je ne le conseille pas forcement à d’autre (je garde le contenu de mes commentaires en cas de dommages collaatéraux).

      Par ailleurs, je ne comprend pas trop les lignes suivantes du fichier exporter_csv.php :

      ob_clean();
      flush();

      Mon serveur est un Apache.
      Version PHP : 5.2.6-1+lenny16

      Enfin, ce forum n’est peut-être pas le bon (peut-être doit-on continuer sur celui de Spip-Bonux)

    • Rebonjour,

      De mon côté Apache 2, PHP 5.2.17

    • Oui vu que ça concerne apparemment ce fichier, le mieux est sûrement de reporter l’erreur dans l’article concernant Bonux.

    • J’avais le même problème d’export que j’ai réglé en désactivant la ligne 90 du fichier spip-bonux/inc/exporter_csv.php. Je suis prêt à laisser quelqu’un accéder au ftp/spip si ça peut aider.

      J’ai trouvé un autre problème : maintenant que l’export fonctionne, je suis étonné du contenu du csv :
      -  le champ email est paramétré en email (type de vérif « adresse de courriel »)
      -  dans le csv la colonne email se remplit bien, sauf qu’il manque le @, ce qui est un peu couillon

      Dans le même esprit, le champ site web (type de vérif « URL ») est exporté comme ceci :
      http://www.domaine.com (http://www.domaine.com ), en doublant le domaine.

      Des pistes ?

    • Bonjour,

      - dans le csv la colonne email se remplit bien, sauf qu’il manque le @, ce qui est un peu couillon

      Ce problème est indépendant du problème d’export rencontré précédemment car j’ai rencontré l’un et pas l’autre.

      Tu as regardé du coté de l’encodage de caractère ? Quel est le jeu de caractères de ton site ?

    • Bonjour,

      Je confirme, lors de l’exportation de mon .csv le champs email contient les @.

      Je ne pourrais te dire d’où vient le problème !

      Bonne chance

    • Dans mes squelettes <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />.
      Jeu de caractères pour MySQL : UTF-8 Unicode (utf8).
      Sur ecrire/ ?exec=config_lang, c’est bien déclaré en utf-8.
      L’interclassement du champ texte de la table spip_formulaires_reponses_champs est utf8_general_ci
      J’ai échantilloné la table spip_formulaires_reponses_champs et les email sont correctement renseignées avec un@.

      Le csv ne contient pas l’@. Le problème est donc lors de l’export.

      Le reste du csv est correct pour les accents.

      En y pensant, quand je reçois un nom accentué dans le sujet de l’email qui envoie le formulaire, l’accent est en hiéroglyphe . J’ai ouvert le code source de l’email et j’ai : « From : = ?iso-8859-1 ? ».

      En lançant une recherche sur « iso-8859-1 », j’ai trouvé toutes ces pages contenant, mais suis incapable de dire laquelle a l’impact sur mon résultat. J’ai viré les tmp car sinon je dépassais les 1500 caractères

      Page	Ligne	Texte correspondant
      ecrire/charsets/iso-8859-1.php [1/3]	3	# charset iso-8859-1
      ecrire/charsets/iso-8859-1.php [2/3]	5	$GLOBALS['CHARSET']['iso-8859-1'] = array (
      ecrire/charsets/iso-8859-1.php [3/3]	7	// plage invalide en iso-8859-1 mais souvent utilisee quand meme (windows)
      ecrire/charsets/iso-8859-15.php [1/3]	17	load_charset('iso-8859-1');
      ecrire/charsets/iso-8859-15.php [2/3]	19	$trans = $GLOBALS['CHARSET']['iso-8859-1'];
      ecrire/charsets/iso-8859-15.php [3/3]	29	$GLOBALS['CHARSET']['iso-8859-15'] = $trans;
      ecrire/charsets/iso-8859-6.php [1/2]	18	load_charset('iso-8859-1');
      ecrire/charsets/iso-8859-6.php [2/2]	20	$trans = $GLOBALS['CHARSET']['iso-8859-1'];
      ecrire/charsets/iso-8859-9.php [1/2]	17	load_charset('iso-8859-1');
      ecrire/charsets/iso-8859-9.php [2/2]	19	$trans = $GLOBALS['CHARSET']['iso-8859-1'];
      ecrire/inc/charsets.php [1/12]	40	if ($charset == '') $charset = 'iso-8859-1';
      ecrire/inc/charsets.php [2/12]	143	// cf. charsets/iso-8859-1.php (qu'on recopie ici pour aller plus vite)
      ecrire/inc/charsets.php [3/12]	144	...passer un charset cible en parametre pour accelerer le passage iso-8859-1 -> autre charset
      ecrire/inc/charsets.php [4/12]	157	} else if ($charset == 'iso-8859-1') {
      ecrire/inc/charsets.php [5/12]	254	// convertir les accents iso-8859-1
      ecrire/inc/charsets.php [6/12]	262	if ($charset == '') $charset = 'iso-8859-1';
      ecrire/inc/charsets.php [7/12]	270	case 'iso-8859-1':
      ecrire/inc/charsets.php [8/12]	271	$texte = corriger_caracteres_windows($texte, 'iso-8859-1');
      ecrire/inc/charsets.php [9/12]	361	// on traite le cas le plus frequent iso-8859-1 vers utf directement pour aller plus vite !
      ecrire/inc/charsets.php [10/12]	362	if (($charset == 'iso-8859-1') && ($GLOBALS['meta']['charset']=='utf-8') && function_exists(...
      ecrire/inc/charsets.php [11/12]	363	$texte = corriger_caracteres_windows($texte, 'iso-8859-1','unicode');
      ecrire/inc/charsets.php [12/12]	689	$charset = 'iso-8859-1';
      ecrire/inc/documents.php [1/1]	49	if (!defined('CHARSET_JOINT')) define('CHARSET_JOINT', 'iso-8859-1');
      ecrire/inc/envoyer_mail.php [1/1]	166	# est UTF-8 et le charset iso-8859-1 (constate php5-mac ; php4.3-debian)
      ecrire/inc/filtres.php [1/2]	297	// pas au charset de la page [iso-8859-1 par defaut])
      ecrire/inc/filtres.php [2/2]	388	if ($GLOBALS['meta']['charset'] == 'iso-8859-1') {
      ecrire/inc/import.php [1/1]	103	$charset = 'iso-8859-1';
      ecrire/inc/revisions.php [1/2]	266	## hack destine a sauver les archives des sites iso-8859-1
      ecrire/inc/revisions.php [2/2]	273	$fragment[$i] = importer_charset($fragment[$i], 'iso-8859-1');
      ecrire/install/etape_3b.php [1/2]	68	# ete tape en iso-8859-1 ; car c'est en fait ce que voit md5.js
      ecrire/install/etape_3b.php [2/2]	69	$pass = unicode2charset(utf_8_to_unicode($pass), 'iso-8859-1');
      ecrire/req/mysql.php [1/2]	92	'iso-8859-1'=>array('charset'=>'latin1','collation'=>'latin1_swedish_ci'),
      ecrire/req/mysql.php [2/2]	95	//'iso-8859-15'=>array('charset'=>'latin1','collation'=>'latin1_swedish_ci'),...
      ecrire/typographie/fr.php [1/1]	37	$chars_trans = unicode2charset(charset2unicode($chars_trans, 'iso-8859-1', 'forcer'));
      prive/style_vieilles_def.html [1/1]	14	#HTTP_HEADER{Content-Type: text/css; charset=iso-8859-15}
      prive/style_prive_plugins.html [1/1]	16	#HTTP_HEADER{Content-Type: text/css; charset=iso-8859-15}
      prive/style_prive_ie.html [1/1]	14	#HTTP_HEADER{Content-Type: text/css; charset=iso-8859-15}
      prive/style_prive_formulaires.html [1/1]	16	#HTTP_HEADER{Content-Type: text/css; charset=iso-8859-15}
      prive/style_prive.html [1/1]	14	#HTTP_HEADER{Content-Type: text/css; charset=iso-8859-15}
      prive/aide_menu.html [1/1]	2	#HTTP_HEADER{Content-Type: text/css; charset=iso-8859-15}
      plugins/auto/transaction/paiement/cmcic/paiement.php (Connexion au serveur de paiement) [1/1]	173	<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
      plugins/auto/spip-bonux/style_prive_plugins.html [1/1]	16	#HTTP_HEADER{Content-Type: text/css; charset=iso-8859-15}
      plugins/auto/spip-bonux/style_prive_formulaires.html [1/1]	14	#HTTP_HEADER{Content-Type: text/css; charset=iso-8859-15}
      plugins/auto/spip-bonux/style_prive.html [1/1]	15	#HTTP_HEADER{Content-Type: text/css; charset=iso-8859-15}
      plugins/auto/spip-bonux/spip21/style_prive_formulaires.html [1/1]	15	#HTTP_HEADER{Content-Type: text/css; charset=iso-8859-15}
      plugins/auto/spip-bonux/spip21/style_prive.html [1/1]	15	#HTTP_HEADER{Content-Type: text/css; charset=iso-8859-15}
      plugins/auto/spip-bonux/spip20/style_prive_formulaires.html [1/1]	15	#HTTP_HEADER{Content-Type: text/css; charset=iso-8859-15}
      plugins/auto/spip-bonux/spip20/style_prive.html [1/1]	15	#HTTP_HEADER{Content-Type: text/css; charset=iso-8859-15}
      plugins/auto/spip-bonux/prive/style_prive_plugin_bonux_recherche.html [1/1]	7	#HTTP_HEADER{Content-Type: text/css; charset=iso-8859-15}
      plugins/auto/spip-bonux/prive/style_prive_plugin_bonux.html [1/1]	14	#HTTP_HEADER{Content-Type: text/css; charset=iso-8859-15}
      plugins/auto/spip-bonux/inc/importer_csv.php [1/1]	35	$charset_source = 'iso-8859-1';
      plugins/auto/spip-bonux/inc/exporter_csv.php [1/1]	65	$importer_charset = $charset = 'iso-8859-1';
      plugins/auto/snippets/snippets/articles/Article_type_1.xml [1/1]	1	<?xml version="1.0" encoding="iso-8859-1"?>
      plugins/auto/saisies/saisies.css.html [1/1]	2	#HTTP_HEADER{Content-Type: text/css; charset=iso-8859-15}
      plugins/auto/polyhierarchie_v1/prive/style_prive_plugin_polyhier.html [1/1]	15	#HTTP_HEADER{Content-Type: text/css; charset=iso-8859-15}
      plugins/auto/polyhierarchie/prive/style_prive_plugin_polyhier.html [1/1]	15	#HTTP_HEADER{Content-Type: text/css; charset=iso-8859-15}
      plugins/auto/odt2spip_v0.1/inc/odt2spip.xsl [1/2]	1	<?xml version="1.0" encoding="iso-8859-1"?>
      plugins/auto/odt2spip_v0.1/inc/odt2spip.xsl [2/2]	39	encoding="ISO-8859-1"
      plugins/auto/nivoslider/css_nivoslider.html [1/1]	2	#HTTP_HEADER{Content-Type: text/css; charset=iso-8859-15}
      plugins/auto/mediatheque/prive/style_prive_plugin_medias.html [1/1]	15	#HTTP_HEADER{Content-Type: text/css; charset=iso-8859-15}
      plugins/auto/mediatheque/modalbox/style_prive_plugin_modalbox.html [1/1]	15	#HTTP_HEADER{Content-Type: text/css; charset=iso-8859-15}
      plugins/auto/mediatheque/inc/documents.php [1/1]	49	@define('CHARSET_JOINT', 'iso-8859-1');
      plugins/auto/forms_et_tables_2_0/inc/forms_texte_191.php [1/1]	464	$chars_trans = unicode2charset(charset2unicode($chars_trans, 'iso-8859-1', 'forcer'));
      plugins/auto/forms_et_tables_2_0/inc/forms.php [1/2]	823	...= unicode2charset(html2unicode(charset2unicode($corps_mail)),'iso-8859-1');
      plugins/auto/forms_et_tables_2_0/inc/forms.php [2/2]	843	...icode2charset(html2unicode(charset2unicode($corps_mail_admin)),'iso-8859-1');
      plugins/auto/forms_et_tables_2_0/action/forms_telecharger.php [1/2]	66	$out = unicode2charset(charset2unicode($out), 'iso-8859-1');
      plugins/auto/forms_et_tables_2_0/action/forms_telecharger.php [2/2]	67	$charset = 'iso-8859-1';
      plugins/auto/facteur/phpmailer-php5/class.phpmailer.php [1/1]	59	public $CharSet = 'iso-8859-1';
      plugins/auto/facteur/phpmailer-php4/class.phpmailer.php [1/1]	50	var $CharSet = 'iso-8859-1';
      plugins/auto/facteur/lang/facteur_fr.php [1/1]	33	'facteur_filtre_iso_8859' => "Convertir en ISO-8859-1",
      plugins/auto/facteur/lang/facteur_en.php [1/1]	43	'facteur_filtre_iso_8859' => "Convert to ISO-8859-1",
      plugins/auto/facteur/lang/facteur_de.php [1/1]	29	'facteur_filtre_iso_8859' => 'Nach ISO-8859-1 umwandeln',
      plugins/auto/facteur/classes/facteur.php [1/4]	298	$text = iconv("UTF-8", "ISO-8859-1//TRANSLIT", $text);
      plugins/auto/facteur/classes/facteur.php [2/4]	305	$text = unicode2charset(utf_8_to_unicode($text),'iso-8859-1');
      plugins/auto/facteur/classes/facteur.php [3/4]	311	$this->CharSet = 'iso-8859-1';
      plugins/auto/facteur/classes/facteur.php [4/4]	312	$this->Body = str_replace('charset=utf-8', 'charset=iso-8859-1', $this->Body);
      plugins/auto/couteau_suisse/outils/interface_config.xml [1/1]	1	<?xml version="1.0" encoding="iso-8859-1"?>
      plugins/auto/couteau_suisse/outils/glossaire_fonctions.php [1/2]	160	// prudence 3 : en iso-8859-1, (\W) comprend les accents, mais pas en utf-8... Donc on passe...
      plugins/auto/couteau_suisse/outils/glossaire_fonctions.php [2/2]	161	if(($GLOBALS['meta']['charset'] != 'iso-8859-1') && !$unicode)
      plugins/auto/couteau_suisse/img/smileys/index.html (Document sans nom) [1/1]	5	<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    • A quoi servent ces 2 lignes de spip-bonux ?

      plugins/auto/spip-bonux/inc/importer_csv.php [1/1]	35	$charset_source = 'iso-8859-1';
      plugins/auto/spip-bonux/inc/exporter_csv.php [1/1]	65	$importer_charset = $charset = 'iso-8859-1';
    • Après passage en spip 3 et upgrade de tous les plugins, mon problème de @ manquant s’est amplifié car les emails automatiques que je reçois après que quelqu’un ait rempli un formulaire arrivent sans @.

      L’export csv ne contient pas de @ non plus.

      Quand je désactive MAILCRYPT du COUTEAU SUISSE, mes exports CSV de FORMIDABLE contiennent bien les @. Il y a donc un problème d’incompatibilité entre MAILCRYPT et FORMIDABLE.

      J’ai signalé sur le forum de MAILCRYPT.

      Quelqu’un aurait-il une idée de ce que je peux faire ?

    Répondre à ce message

  • 1
    cloetfred

    Bonjour,

    J’ai un créé un formulaire, dans la partie administration le formulaire est bien alligné mais dans la partie publique de mon site, le formulaire n’est pas du tout alligné...

    Sur quels parametres dois je agir ?

    merci d’avance

    FRed

    • Absolument rien, le formulaire s’affiche suivant vos styles CSS, le plugin ne s’occupe pas du tout de l’affichage. À vous de faire en sorte que votre thème graphique corresponde à ce que vous voulez.

    Répondre à ce message

  • 1

    Bonjour et merci pour ce plugin,

    J’ai une petite question, est-il possible de faire un liste déroulante avec le titre des articles séléctionnés ?

    Merci

    • De quels articles sélectionnés ? Y a pas de saisies d’articles, mais tu peux t’en construire une selon le modèle des autres. Un fichier HTML qui est un squelette, et un fichier YAML qui le décrit avec les options que tu veux (options qui sont elles mêmes des saisies).

    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