Saisies

Le plugin Saisies facilite le développement des formulaires, en proposant des méthodes et outils pour déclarer et vérifier les champs.

Introduction

Créer un formulaire est une tâche toujours un peu répétitive : les champs ont souvent les mêmes propriétés, le même accompagnement (message d’erreur, explication ...) et la même structure HTML. Ce plugin est un outil d’aide au développement, ayant pour but de faciliter et d’accélérer l’écriture des formulaires.

Pour cela, Saisies propose plusieurs mécanismes (balises, API PHP) pour générer et manipuler plus facilement les champs des formulaires. De cette manière, les squelettes de formulaires sont :

  • plus lisibles : il n’y a que le strict nécessaire dedans, pas de répétition ;
  • intégrés au fonctionnement CVT de SPIP, notamment pour la gestion des erreurs sur les champs ;
  • automatiquement compatibles avec les recommandations HTML/CSS de SPIP.

Dans la présente documentation, nous présentons la manière de construire un formulaire avec Saisies de la méthode la plus robuste à la méthode la moins robuste.

Les méthodes moins robustes sont présentées pour deux raisons :

  1. ce sont les méthodes les plus anciennes. On trouve encore beaucoup de code les utilisant ;
  2. il est parfois nécessaire de passer par là, pour des réglages fins.

Pour utiliser l’API complète PHP, vous devez installer ou nécessiter le plugin YAML dans votre plugin. Ce n’est pas le cas quand on utilise juste la simple balise, ce pourquoi c’est à vous de le nécessiter.

Dans la présente documentation, lorsqu’un code est entre chevrons (comme <ceci>), vous devez le remplacer par une valeur correspondant à votre projet.

Cette documentation est valable à partir de la version 4.11.0 ou du plugin.

Méthode 1 : déclarer un formulaire CVT complet en PHP

Principe

Saisies augmente l’API CVT de SPIP avec une fonction formulaires_<nomduformulaire>_saisies() afin de déclarer l’ensemble des champs d’un formulaire et leur vérification dans une unique syntaxe. Cette fonction permet également de déclarer différents réglages de formulaire, tel que :

  • le label du bouton de validation final ;
  • l’utilisation en multiétapes.

Grâce à ce mécanisme, pour les cas les plus courants, les fonctions formulaires_<nomduformulaire>_charger() et formulaires_<nomduformulaire>_verifier() deviennent facultatives. Saisies s’occupera de tout suivant votre déclaration. Seule la fonction formulaires_<nomduformulaire>_traiter() reste toujours de votre ressort.

De même, par défaut, vous n’avez plus à vous occuper du squelette. Il doit toujours être présent, avec le même nom que votre fichier PHP dans le dossier formulaires/, mais vous devez le laisser totalement vide. Saisies s’occupera de générer le HTML complet, en suivant les recommandations de structuration de SPIP.

Enfin, dans le cas particulier où vous créez un formulaire de configuration, vous n’aurez même pas à déclarer les valeurs par défaut ni le traitement. Voir l’article « Formulaire de configuration avec le plugin Saisies ».

Mise en œuvre

Il vous faut donc créer un fichier formulaires/<nomduformulaire>.html vide, ainsi qu’un fichier formulaires/<nomduformulaire>.php contenant deux fonctions :
- formulaires_<nomduformulaire>_traiter(), qui indique ce que votre formulaire doit effectuer comme traitement ; cela n’est pas du ressort du plugin Saisies ;
- formulaires_<nomduformulaire>_saisies(), pour déclarer les saisies proprement dites.

Cette dernière fonction reçoit comme arguments les mêmes arguments que la fonction _charger() du formulaire CVT, et elle doit retourner un tableau PHP contenant la liste de toutes vos saisies suivant un formalisme attendu.

formulaires_<nomduformulaire>_saisies(…) {
    $saisies = […];
    return $saisies;
}

Déclaration de l’ensemble des saisies

Chaque ligne globale du tableau renvoyé décrit une saisie.
L’ordre des éléments sera l’ordre des saisies.

$saisies = [
    […], // une saisie
    […], // une saisie
    […], // une saisie
];

Déclaration d’une saisie individuelle

Chaque saisie est elle-même décrite dans un tableau, qui prend par exemple la forme suivante :

[
    'saisie' => 'input',
    'options' => [
        'nom' => 'nom',
        'label' => 'Votre nom',
        'defaut' => 'Valeur par défaut'
    ],
];

On consultera « Référence des saisies » pour avoir l’ensemble des saisies et des options disponibles en standard.

D’autres plugins ajoutent leurs propres saisies, et vous pouvez aussi créer vos propres saisies.

Déclaration des saisies enfants

Les saisies qui acceptent des enfants (comme les fieldsets) les placent dans une clé saisies dont la valeur est un tableau ayant la même structure que le tableau global :

$un_fieldset = [
    'saisie' => 'fieldset',
    'options' => [
        'nom' => 'mon_groupe',
        'label' => 'Mon groupe de champ'
    ],
    'saisies' => [
        […], // une autre saisie
        […], // une autre saisie
        […], // etc
    ]
];

Appliquer des vérifications

Pour des vérifications simples et uniques vous pouvez en déclarer des vérifications à appliquer sur chacune de vos saisies, avec le plugin API de Vérification (qui n’est pas activé automatiquement avec le plugin saisies).

Il faut alors ajouter une clé verifier selon ce formalisme :

[
	'saisie' => 'input',
	'options' => [
		'nom' => 'slug',
		'label' => 'slug',
		'obligatoire' => 'oui',
	],
	'verifier' => [
		[
			'type' => 'taille',
			'options' => ['min' => 10]
		],
		[
			'type' => 'slug',
		],
	],
];

Permet de vérifier que nous avons affaire à un slug d’une taille minimum de 10 caractères.

Consulter « Références des vérifications » pour la liste des types de vérification livrés avec le plugin et de leurs options.

Pour les versions du plugin < 4.3.0, il n’est possible de déclarer qu’une seule vérification par saisie, sous la forme :
[
    'saisie' => 'input',
    'options' => [
        'nom' => 'nom',
        'label' => 'nom',
        'obligatoire' => 'oui',
    ],
    'verifier' => [
            
        'type' => 'entier',
        'options' => [
            'min' => 100,
            'max' => 500
        ],
    ],
];

Support du multilinguisme

Saisies supporte le multilinguisme. Ainsi, dans l’exemple ci-dessous, la chaine de langue <:cle:valeur:> sera automatiquement interprétée.

[
    'saisie' => 'input',
    'options' => [
        'nom' => 'nom',
        'label' => '<:cle:valeur:>',
        'size' => 50
    ],
];

Options globales

Il est possible de déclarer des options d’affichage globales à l’ensemble du formulaire. Elles sont alors placées dans une clé options à la racine du tableau des saisies.

$saisies = [
    'options' => [
        // Changer l'intitulé du bouton final de validation
        'texte_submit' => 'Valider c’est gagné',
        …
        '<option>' => '<valeur>' //Une autre option
    ],
    […], // une saisie
    […], // une saisie
    […], // une saisie
);
OptionUsageValeur possibleValeur par défaut
Options pour le bouton de validation
texte_submit Texte du bouton de validation Texte, passe par _T_ou_typo() <:bouton_enregistrer:>
afficher_si_submit Condition pour afficher le bouton de validation Voir « Affichage conditionnel des saisies : syntaxe des tests » null
Options pour la gestion des étapes multiples
etapes_activer Activer la gestion multi-étapes, chaque fieldset de premier niveau devient une étape True|False False
etapes_presentation Mode de présentation des étapes en haut du formulaire 'defaut'|'courante', il est possible de créer son propre mode en créant un squelette formulaires/inc-saisies-cvt-etapes-<presentation>.html defaut
etapes_suivant Texte du bouton pour aller à l’étape suivante Texte, passe par _T_ou_typo() <:bouton_suivant:>
etapes_precedent Texte du bouton pour revenir à l’étape précédente Texte, passe par _T_ou_typo() <:precedent|ucfirst:>
etapes_precedent_suivant_titrer Permet d’ajouter le titre des étapes dans les boutons « précédent » et « suivant » True|False False
etapes_ignorer_recapitulatif Permet de ne pas insérer de récapitulatif avant la validation finale True|False False
Options techniques
verifier_valeurs_acceptables Permet de s’assurer que les valeurs reçues figurent bien parmi les valeurs proposées lors de la saisie du formulaire True|False False
afficher_si_avec_post Permet que les saisies masquées par affichage conditionnel soient tout de même postées True|False False
inserer_debut Contenu arbitraire à insérer au début du formulaire, par exemple pour appeler un script Javascript Chaîne de caractères null
inserer_fin Contenu arbitraire à insérer à la fin du formulaire, par exemple pour appeler un script Javascript Chaîne de caractère null

Si un texte passe par _T_ou_typo(), cela peut être :

  • un texte directement écrit dans la langue du site ;
  • un appel à une chaîne de langue sous la forme <:fichier_de_langue:chaine:> ;
  • un texte utilisant la balise <multi> pour gérer l’internationalisation.

Pipeline

Lors du chargement des saisies déclarées via une fonction formulaires_<nom_du_formulaire>_saisies(), les saisies sont passés à un pipeline formulaire_saisies. Le tableau $flux passé à ce pipeline à la structure suivante :

-  $flux['args']['form'] : le nom du formulaire ;
-  $flux['args']['args'] : les différents arguments passés ;
-  $flux['data'] : les saisies.

Il est donc possible à un plugin de modifier dynamiquement les saisies d’un formulaire en utilisant les différentes fonctions de l’API de saisies.

Méthode 1a : déclarer un formulaire CVT en PHP, mais effectuer soi-même des vérifications

Parfois il est nécessaire d’avoir des vérifications supplémentaires sur les saisies. Pour ce faire, vous devez déclarer votre propre fonction formulaires_<nomduformulaire>_verifier().

Dans ce cas, vous ne perdrez pas le bénéfice d’une déclaration des vérifications de base dans votre tableau de saisies : celles-ci sont alors automatiquement effectuées après vos propres vérifications.

Toutefois, il est parfois nécessaire de faire en sorte que les vérifications « par déclaration » se fassent avant vos propres vérifications. Dans ce cas, la méthode la plus propre est de déclarer ses vérifications non pas sous forme d’une fonction formulaires_<nomduformulaire>_verifier(), mais par la création d’une fonction formulaires_<nomduformulaire>_verifier_post_saisie(), ou sa variante verifier_etapes_post_saisies() dans le cadre du multiétape.

À noter qu’il existe deux pipelines pour ajouter des vérifications à un formulaire existant : formulaire_verifier_post_saisies et formulaire_verifier_etapes_post_saisies.

Méthode 1b avec #GENERER_SAISIES : contrôler la structure globale du formulaire, mais utiliser le formalisme de saisies

Dans quelques cas rares, la structure globale du formulaire livrée avec Saisies ne convient pas. Pour autant, vous souhaitez.

  • profiter du formalisme de déclaration des saisies
  • profiter de la vérification automatique de ces saisies (sauf si vous utilisez la méthode 1a).

Dans ce cas :

  • vous mettez dans votre fichier formulaires/<nomduformulaire>.html la structure globale du formulaire correspondant à votre besoin ;
  • là où vous souhaitez insérer vos saisies, vous utilisez la balise #GENERER_SAISIES.

Cette balise permet de générer toutes les saisies d’un formulaire, en une seule fois. Pour cela on lui passe en paramètre le tableau de description.

Exemple d’utilisation :

<div class="formulaire_spip formulaire_#ENV{form}"[(#ENV{_etape}|oui)formulaire_multietapes]">
<form .... [ data-resume_etapes_futures="(#ENV{_resume_etapes_futures}|json_encode|attribut_html)"]>
....
<div >
    #GENERER_SAISIES{#ENV{_saisies}}
</div>
....
</form>
</div>

On notera l’emploi d’un _ en préfixe de la variable d’environnement. Cela permet que les guillemets présents dans les options ne soient pas transformés en entités HTML [1].

#ENV{_saisies} est rempli automatiquement avec la valeur de retour de la fonction formulaires_<nomduformulaire>_saisies() [2].

On n’oubliera pas les attributs suivants :
-  les différentes classes sur le <div> englobant
-  l’attribut [ data-resume_etapes_futures="(#ENV{_resume_etapes_futures}|json_encode|attribut_html)"] sur le <form>, qui permet de gérer correctement les affichages conditionnels des étapes dans un formulaire multi-étape.

Par ailleurs, on utilisera

		[(#ENV{_etape}|oui)
			<INCLURE{fond=formulaires/inc-saisies-cvt-etapes-#ENV{_saisies/options/etapes_presentation,defaut}, etapes=#ENV{_saisies_par_etapes}, env} />
		]
</div>
pour insérer le chemin d'étapes, et 

<cadre class="spip">
<INCLURE{fond=formulaires/inc-saisies-cvt-boutons,env} />

pour les boutons de validation.

Méthode 2 : la balise #SAISIE

Parfois on veut pouvoir contrôler encore plus finement la présentation des saisies. Pour ce faire, on peut insérer dans formulaires/<nomduformulaire>.html des appels à la balise #SAISIE.

Cette méthode n’est pas toujours adaptée, car elle présente des limitations :

  1. elle ne permet pas de profiter des vérifications automatiques ;
  2. elle ne permet pas de profiter du mécanisme d’affichage conditionnel.

#SAISIE permet de générer une seule saisie en lui donnant directement les paramètres désirés. Chaque saisie va générer une ligne dans un formulaire, c’est-à-dire un élément <div>.

La balise #SAISIE a deux arguments obligatoires : le type de saisie, et son nom HTML (attribut « name »). Toutes les autres options sont facultatives et servent à configurer le champ ; de ce fait, elles sont de la forme option=valeur.

La forme complète est donc la suivante :
#SAISIE{type, name, option=valeur, option2=valeur2, etc=etc}

Voici quelques exemples d’utilisation.

Génère un simple champ texte, indiqué comme étant obligatoire :
#SAISIE{input, email, label=Votre courriel, obligatoire=oui}

Génère un choix multiple parmi les utilisateurs du SPIP :
#SAISIE{auteurs, destinataires,
    label=Destinataires du message,
    explication=Choisissez une ou plusieurs personnes à qui sera envoyé le message.,
    multiple=oui}

Comme vous le voyez, des champs qui peuvent être complexes, et fastidieux à écrire de manière complète, s’écrivent ici en quelques lignes.

#SAISIE supporte le multilinguisme. Dans ce cas, attention de bien utiliser la syntaxe complète avec les crochets :

  • #SAISIE{input, annee, label=<:monplugin:annee:>,obligatoire=oui} ne fonctionne pas ;
  • [(#SAISIE{input, annee, label=<:monplugin:annee:>,obligatoire=oui})] fonctionne.

Appendice 1 : chargement des CSS et scripts Javascript sur le site public

Si votre formulaire est destiné à être public, le plugin se charge d’ajouter automatiquement les appels aux fichiers CSS et scripts Javascript associés aux saisies utilisées sur le site public, lorsque le formulaire est effectivement utilisé.forme

Toutefois, si vous avez beaucoup de formulaires utilisant Saisies sur le site public, il peut être judicieux de charger systématiquement les fichiers sur toutes les pages, afin de profiter de la compréhension et du cache navigateur. Dans la configuration du plugin (« Squelettes »->« Configuration du plugin Saisies »), une option permet d’activer cela.

Appendice 2 : enregistrer des tableaux

La norme HTML permet de gérer des réponses de formulaire sous la forme de tableau.

Dans la déclaration de la saisie, on peut utiliser la syntaxe HTML classique avec crochets :

[
    'saisie' => 'input',
    'options' => [
        'nom' => 'annee[debut]',
        'label' => 'Votre nom',
        'size' => 50
    ],
];

Mais il est recommandé d’utiliser le formalisme SPIP suivant : <tableau>/<clé>.

[
    'saisie' => 'input',
    'options' => [
        'nom' => 'annee/debut',
        'label' => 'Label',
        'size' => 50
    ],
];

Le code suivant permettra de récupérer la valeur en PHP :

$annee = _request('annee');
$debut = $annee['debut'];

Appendice 3 : la balise #VOIR_SAISIES

Cette balise permet d’afficher toutes les valeurs saisies après validation d’un formulaire. On lui passe en paramètre deux arguments :

  1. le tableau de description des saisies (au même format que pour #GENERER_SAISIES)
  2. un tableau des valeurs saisies

Exemple d’utilisation, dans le squelette d’un formulaire :

[(#EDITABLE|non)
    #VOIR_SAISIES{#ENV{mes_saisies}, #ENV}
]

Appendice 4 : problème avec Xdebug

Si vous développez en utilisant le logiciel Xdebug, il existe un problème connu : par défaut celui-ci affiche une erreur à partir d’un certain niveau d’imbrication de fonctions PHP (« nesting level » dirait Shakespeare).

Le niveau d’imbrication autorisé par défaut est relativement bas, mais on peut le paramétrer. Vous devez donc ajouter cela dans votre configuration PHP/Xdebug :

[xdebug]
xdebug.max_nesting_level = 200 ou 500 ou plus…

Et hop, ça remarche.

Notes

[2Historiquement, elle pouvait aussi être remplie manuellement en ajoutant une clé _saisies dans le tableau de retour de la fonction formulaires_<nomduformulaire_charger(), toutefois ceci ne permet pas de bénéficier de tous les mécanismes d’automatisme du plugin saisies, et les bugs risquent d’être présents. Ce n’est donc pas une fonctionnalité officiellement supportée et validée.

Voir aussi la doc complémentaire et participative sur le wiki :
Saisies : Doc complémentaire

Discussion

179 discussions

  • 4

    Hello

    2 questions à propos de la fonction formulaires_montruc_saisies_dist() qui charge et vérifie :
    -  Si je veux pouvoir initialiser mes saisies avec quelque chose que je récupère en base, il faut aussi que je crée formulaires_montruc_charger_dist() ? ou y’a un truc plus simple.
    -  Je voudrais afficher un message général d’erreur en tête de formulaire si une des saisies ne passe pas la vérification... Là je ne vois pas trop comment faire

    Merci

      1. Tu peux faire ça dans le charger, ou dans la même fonction en remplissant le « defaut=... »
      2. Pour le message général, ce n’est pas une saisie donc ce n’est pas du ressort de Saisies. Je sais que JLuc a ajouté cette fonctionnalité à Formidable, il me semble.
    • Pour le message général, le souci est que la fonction vérifier de saisies est appelée après celle de mon plugin. Donc même si je fais une fonction dans ce genre, la verif est effectuée 2 fois et comme la 2e c’est celle de saisies, ben rien n’est affiché :

      function formulaires_tournee_verifier_dist($id_date=""){
      	$erreurs = array();
      	include_spip('inc/saisies');
      	$erreurs = saisies_verifier($saisies);
      	if ($erreurs and !isset($erreurs['message_erreur']))
      		$erreurs['message_erreur'] = _T('tournee:erreur_generique');
        	return $erreurs; // si c'est vide, traiter sera appele, sinon le formulaire sera resoumis
      }

      Donc je ne vois pas d’autre solution que d’utiliser les fonctions classiques CVT... A moins que...?

    • Bonjour,

      je coince aussi sur verifier ...

      en fait, j’ai des champs afficher_si qui sont aussi « obligatoire_si »
      ma fonction formulaires_monCVT_verifier() fait le test et supprime bien les erreurs si elles sont inutiles... mais le Traitement ne se fait pas... les champs « obligatoire_si » sont marqués en erreur

      pas possible de squizer le verifier auto de Saisies ?

    • Je ne saurais dire : je n’ai jamais mis le nez dans le code des « afficher_si » et consorts. À priori c’est dans la vérification faite par Saisies qu’il faudrait gérer tout ça proprement.

    Répondre à ce message

  • 5
    P’tit Ben

    Bonjour,

    Une petite question : une boucle est-elle possible à l’intérieur d’un array d’une balise saisie ? Je m’explique : je désire récupérer les valeurs d’une table externe dans #array pour afficher une liste sous forme de sélection comme ci-après.

    [(#SAISIE{selection, pays,
    label=<:label_pays:>,
    datas=#ARRAY{<BOUCLE_pays(geographie:PAYS){","}>
    #REL,#NOM</BOUCLE_pays>}})]

    Mais ça bug total…

    Quelqu’un aurait-il une solution ?

    Merci d’avance

    • Il faut faire ta boucle avant, et remplir le tableau avec #SET{truc, #ARRAY{truc,truc}}. Après tu utilises |array_push par exemple ou si tu as Bonux directement #SET_PUSH pour ajouter une cellule au tableau.

    • Pour être plus précis, et d’une façon générale, il est IMPOSSIBLE de mettre une boucle DANS une balise.
      Il faut faire comme le dit Rasta’ ^^ Par contre ya une subtilité pour remplir ton tableau, si tu veux des clés numériques précises (pour gérer tes pays par ID, typiquement).
      Tu remplis le tableau avec des SET en #VALEUR => #CLE et a la fin (dans la partie ) tu inverse le tableau avec un array_flip php ; par exemple :

      #SET{array_categories,#ARRAY}
      <BOUCLE_crit1(CRITERES){lang_critere='fr'}{categorie=1}{par titre}>
      	#SET{array_categories, 	   #GET{array_categories}|array_merge{#ARRAY{#TITRE,#ID_CRITERE}}}	
      </BOUCLE_crit1>
      	#SET{array_categories, #GET{array_categories}|array_flip}
      </B_crit1>

      Ensuite tu peux initialiser proprement ta SAISIE avec un :

      datas=#ARRAY{array_categories}

      Hope that helps...

      Mojo

    • Pardon, il fallait bien entendu lire

      datas=#GET{array_categories}

      Pas bien important, mais mieux vaut être précis ;)

    • Ceci dit... si c’est juste pour les pays et pas le détail de la France entière, et bien le plugin « Pays » fournit déjà une saisie « pays ». D’ailleurs le plugin Saisies en a une aussi, mais qui utilise la table du plugin Géographie.

    • P’tit Ben

      Nickel ! Ça marche !

      Merci à tous les deux.

    Répondre à ce message

  • 7

    Bonjour,

    Merci pour ce plugin très pratique, cependant il serait judicieux de spécifier le fait que le plugin yaml est nécessaire pour utiliser la balise très utile : #GENERER_SAISIES . Car on ne trouve pas beaucoup d’aide sur le fait que la fonction yaml_decode_file ne soit pas définie.
    Et pour être plus précis voilà le lien pour télécharger et installer ce plugin : http://files.spip.org/spip-zone/yaml.zip

    Une autre erreur s’est glissé dans l’exemple : ’saisie’ => ’radios’ ( ligne 40 de l’exemple complet ). Il n’existe pas de squelette « radios.html ». Par contre il existe un squelette « radio.html ».
    Il suffit donc de modifier cette ligne en remplaçant « radios » par « radio » afin que tout fonctionne correctement.

    Bonne journée

    • petite inversion de code spip dans le lien pour le plugin yaml : plugin Yaml

    • Merci, j’ai fait les deux modifications.

    • Hello

      Je déterre... Il manque toujours à ce jour un necessite de yaml, non ?

    • Ben non, comme je l’avais déjà dit autre part, il y a plein de plugin qui utilisent Saisies uniquement dans les squelettes avec la balise #SAISIE simple, pour que les formulaire soient plus lisibles. Et donc ils n’utilisent pas du tout l’API, et donc ils n’ont aucunement besoin de YAML.

    • Il me semblais bien avoir vu passer un truc la dessus, mais je ne retrouvais plus... Donc c’est au plugin utilisant des fonctions de saisies utilisant YAML de faire le necessite... Faudrait peut préciser ça dans la doc...

    • Faudrait peut préciser ça dans la doc...

      Euuuh... c’est déjà le cas depuis le 12 octobre 2010... C’est marqué en gras + séparé par des barres en plein milieu de l’article.

    • Pfff... Et pourtant j’ai relu l’article avant de poster !

    Répondre à ce message

  • 3

    Bonsoir,
    J’ai installé le plugin formidable et mes premiers tests sont satisfaisants. Merci pour ce beau travail.
    Reste un problème : l’affichage des lettres accentuées.
    par exemple le é devient é
    J’utilise SPIP en codage iso-8859-1
    Si le le passe en UTF-8 tout va bien pour le formulaire mais plus pour le site bien sur (les lettres accentuées sont remplacées par des ? dans des losanges)
    Je ne me sens pas de passer le site (squelettes, base, ...) en UTF-8 de suite et j’aimerais savoir si on peut modifier une config de Formidable (ou d’un plugin associé) pour résoudre ce problème. Mais recherches et essais n’ont pas abouti.

    Merci par avance

    désolé de « squatter » ce forum consacré au plugin Saisie mais je n’ai pas trouvé l’équivalent pour Formidable, mais je suis preneur de tout lien ...

    • Manu T’J

      Bonjour

      je confirme : avec la même config (site en iso-8859-1) les caractères accentués sont tous convertis en signes bizarres.

      A une époque, j’avais un souci équivalent avec Porte Plume et Matthieu avait apporté un correctif (voir ici : http://zone.spip.org/trac/spip-zone/changeset/34471)

      Je ne maîtrise pas assez le code pour savoir si cette piste est la bonne, et si oui, pour l’intégrer dans Saisies (ou Formidable d’ailleurs)

      En tout cas merci à tous pour votre travail.

    • Aucune idée, je n’y connais rien en charset et je fais toujours tout en UTF-8... Donc je ne sais pas trop où se trouve le problème pour l’instant.

      Si quelqu’un veut aider, il faudra aussi dire se trouve vos bugs là, parce que pour l’instant on sait juste que vous avez tous les deux des caractères bizarres, mais on ne sait pas où : dans le constructeur ? dans l’affichage du formulaire sur les labels et autres infos configurées ? dans le mail ? où ?

    • Les caractères accentués sont remplacés par ces caractères étranges dès la construction du formulaire dans l’espace privé de Spip, que ce soit dans l’écriture des labels, explications, ... et restent ainsi après enregistrement et lors de l’appel du formulaire depuis un article ainsi qu’à l’envoi par mail.
      Par contre si en saisissant ces caractères directement en codade iso - en saisissant &eacute pour le é par exemple - tout va bien, mais ce n’est pas très simple.

      Ce qui est curieux c’est que l’on peut saisir sans problème une texte accentué dans un bloc de texte sans avoir d’affichage « codé ».

      La solution sera sans doute de passer tout le site en utf-8 mais ce n’est pas une opération si simple.

      Merci pour vos réponses

    Répondre à ce message

  • 5

    Bonjour,

    Avec le plugin Formidable, j’ai eu un problème avec une case unique : je voulais qu’elle soit cochée par défaut et pas moyen.

    Dans le plugin saisies, fichier saisies/case.html, j’ai modifié la ligne 14 :

    #SET{valeur,#ENV{valeur}|=={''}|?{#ENV{defaut},#ENV{valeur}}}

    J’ai donc remplacé le filtre |is_null par |=={''} (est vide).

    Avec is_null, la variable « valeur » était toujours vide et le [ (#GET{valeur}|oui)checked='checked'] n’affichait jamais rien.

    • Le problème c’est que cette saisie et « oui_non », renvoient soit « on » soit «  » (chaine vide). Donc la chaine vide n’indique pas qu’il n’y a rien, mais indique le « non » ou le « pas coché ».

      Du coup si là tu mets coché par défaut, si tu sélectionnes volontairement pas coché et que tu reviens sur le formulaire (parce qu’un autre champ a une erreur par exemple) et bien ça restera à ta valeur par défaut.

      Le problème est donc plus complexe. Il vient surtout du fait que le mécanisme CVT de SPIP ne laisse pas la valeur « null » mais la remplace par la chaine vide. Et donc ça ne correspond plus à la réalité. Il faut que je revois ça avec Cédric, ou faire une remarque sur la liste mail « spip-dev ».

    • Désolé, j’ai répondu au mauvais fil. Cela concerne le fil du 23/2/11

      Merci pour ces explications claires.

      J’ai presque fini d’intégrer le plugin Pays. Il me reste la partie analyse.

      Sur Saisies, j’ai une remarque : si je met une contrainte sur un champ, par exemple saisie d’une url, si le champ est vide, cela envoie un message d’erreur après validation du formulaire. Cela ne devrait pas être le cas à mon avis. Il y a la contrainte obligatoire pour forcer la saisie.

    • Sur Saisies ou sur Formidable pour le dernier point ?

    • Sur Formidable, mais je pense que cela vient de Saisies. Je précise que c’est lors de la validation d’un formulaire sur l’espace public, pas dans la partie création d’un formulaire de l’espace privé.

    • Non l’erreur était bien là mais dans le plugin Vérifier. Faut mettre à jour en version 0.1.9 pour tester. Normalement ça devrait être bon : si le champ est vraiment vide ça ne fait pas de test.

      Si tu as SVN tu peux tester tout de suite. Sinon faut attendre une heure que le nouveau ZIP arrive.

    Répondre à ce message

  • 1

    Bonjour,
    Je ne sais pas si c’est l’endroit pour discuter de formidable, qui porte bien son nom.
    Je n’ai pas compris comment ajouté des fieldset. Je suppose que c’est lié au groupe de champs.Je ne vois pas bien comment on insère des champs dans un groupe de champs.

    Je voudrais aussi insérer la liste des pays qui vient du plugins pays, mais là aussi je bloque.

    quelques éclaircissements seraient le bien venu.

    Merci

    • Ce n’est pas trop l’endroit effectivement mais il n’y a pas encore de doc officielle pour Formidable puisqu’il n’est pas encore « stable ».

      Pour insérer des champs dans un groupe de champs (y compris un autre groupe) il suffit d’utiliser le tout premier paramètre dans le form de configuration qui s’appelle « Position ». On place un champ devant un autre champ ou bien à la fin d’une liste. Il faut donc le placer « à la fin » de la sous-liste du groupe de champ. Normalement quand il y a une sous-liste c’est bien décalé sauf sous Safari ou Opera je crois.

      Pour le pays et bien il faudrait que vous fassiez une saisie « saisies/pays.html » et sa description des options « saisies/pays.yaml » ainsi que « saisies-vues/pays.html » et « saisies-analyse/pays.html » pour la visualisation, dans le plugin du même nom. Et si ça marche bien demander à quelqu’un de l’intégrer ou demander un compte pour contribuer vous aussi !

    Répondre à ce message

  • 11

    Bonjour
    A ropos de Formidable, comment faire apparaitre mon formulaire dans la page publique d’un article dans le site ? Le formulaire fonctionne très bien dans la partie privée.
    J’ai mis ce code dans le squelette de l’article concerné : #FORMULAIRE_FORMIDABLE(Contribution) mais sans résultat.
    Pour info Contribution est le nom donné au formulaire.
    Merci de votre aide

    • dans le squelettes de l’article (article.html) ou bien dans le texte de l’article ?

      de plus c sur la page de formidable que tu aurais du la poser

    • Merci de la réponse
      C’est dans la page article.html

      PS : J’ai cherché mais n’ai pas trouvé la page de formidable. En tapant formidable dans « Rechercher sur ce site », rien n’est indiqué concernant ce plugin.

    • Voila http://www.spip-contrib.net/Formidable-le-generateur-de-formulaires

      Ce qui me dit que tu faire ainsi

      #FORMULAIRE_FORMIDABLE{contribution}
    • Merci de cette réponse.
      Comme indiqué dans mon premier message c’est ce que j’ai fait et qui ne marche pas ....
      C’est pourquoi je recherche plus d’explications qui semblent introuvables sur le net.
      Encore Merci

    • et on peux voir le site ?

    • Bonjour
      Tout à fait, le site est :http://www.minitub43.com je souhaite que les visiteurs puissent apporter leur contribution à ce site par leurs documents en cliquant sur le lien du menu de gauche intitulé contribution qui pointe actuellement vers une rubrique puis un article. Le code #FORMULAIRE_FORMIDABLEcontribution figure actuellement dans le squelette de la rubrique et de l’article mais rien apparait.
      Merci du coup de pouce.
      Philippe

    • Bonjour
      Je souhaite tout simplement remercier Pierre KUHN pour avoir trouvé solution à ma recherche.
      C’est parfait.
      Bonne semaine

      Philippe

    • C’est bien de dire que le problème a été résolu et c’est sympa de dire merci. Par contre ce n’est pas très sympa de garder pour toi la solution qu’on t’a donnée et de ne pas faire profiter les autres : elle pourrait pourtant rendre service à des personnes qui rencontrent la même difficulté que celle que tu as rencontrée !!!
      Allez, zou, un peu d’altruisme !!!

    • Manu

      Oui, enfait il utilise forms&table et du coup je passer par un modèle dans l’article <form2>

      Voila pour la solution

    • Hum hum

      Premièrement je n’aurais pas su décrire la solution c’est Patrick qui l’a trouvé, ensuite faut dire qu’il n’y a pas eu grosse bousculade pour me répondre ... Alors Manu SVP modérez vos remarques désobligeantes et hâtives avant de donner une leçon de courtoisie d’autant plus que j’ai eu la correction comme vous l’avez remarqué de remercier la seule personne qui a prit la peine de répondre, chose rare sur ce forum me semble t’i en parcourant les différents forumsl.

      Les reproches ou réflexions apparemment pour certains sont plus rapides que les réponses.

      Bien courtoisement à vous.

    • PS : J’allais oublier ! Merci pour cette leçon d’altruisme.

    Répondre à ce message

  • 2
    Khalidk34

    Bonjour
    j’ai créé un formulaire avec le plugin Formidable. Tout c’est bien passé. En test je reçois bien le mail de confirmation d’inscription d’une personne. Sur ce mail il apparaît le texte suivant « Vous pouvez gérer les réponses sur cette page ». Lorsque j’ouvre cette page, j’accéde à l’espace privé : quand je clique sur le bouton « Liste des réponses rien ne se passe », quand je clique sur le bouton « Analyse des réponse » il apparait des statistiques avec les valeurs pour les différents items du formulaire et le bouton exporter les réponses ne provoque aucune action d’export.
    Je ne sais comment accéder à cette page des réponses du formulaire directement sans passer par le lien du mail !
    Ai-je oublié un paramétrage particulier ?
    Merci pour le coup de main
    Cordialement

    • Chez-moi-ça-marche. © :)

      Quand je suis sur l’aperçu d’un formulaire dans l’espace privé, et que j’ai activé l’enregistrement, et qu’il y a eu au moins une réponse, j’ai bien :

      • un bouton « Liste des réponses »
      • un bouton « Analyse des réponses »
      • et dans la page de liste, le bouton d’export me renvoie bien un fichier CSV
    • Khalidk34

      Bonjour
      Une personne vient de s’inscrire et ça marche
      Merci

    Répondre à ce message

  • 1

    Hello

    2 petites questions :
    -  si on veut qu’une saisie soit dispo dans formidable, il faut que le fichier yaml correspondant soit présent dans le dossier saisies. Je veux rajouter un champ de saisie d’URL, mais le fichier yaml est identique a celui de l’input avec juste en plus une vérification possible de l’url, y’a pas moyen de surcharger celui de l’input ou de faire un « include » ? Ou faut dupliquer ?
    -  SI je veux supprimer les espaces avant et après une saisie d’url, où dois faire ce traitement ? Dans Saisies (mais je ne vois pas comment) ? Dans Formidable ?

    Merci

      • Faut dupliquer
      • Ni l’un ni l’autre ça devrait être dans Vérifier. Pour l’instant il n’y pas d’options « Vérifier ET modifier » mais c’est plutôt dans cette voie-là qu’il faudrait aller je pense, car c’est lié à la vérif qu’on choisit, tout comme pour les numéros de téléphone ou les adresses emails : même acceptable, on veut peut-être quand même uniformiser les valeurs.

    Répondre à ce message

  • Bonjour,
    La fonction afficher_si ne fonctionne pas avec des checkbox (c’est la réponse de Joseph. Il propose de faire évoluer la fonction saisies_generer_js_afficher_si dans inc/saisies.php mais cela dépasse mes compétences actuelles et ce n’est pas faute d’avoir essayé !).
    Est il possible de contourner ce problème avec un javascript (je dispose d’un code permettant d’afficher un champ input de type texte si une checkbox est cochée.)
    J’ai placé le script dans le head de mon formulaire html mais je ne sais pas où placer l’évènement javascript onClick, mes saisies étant générées par la balise #GENERER_SAISIES.
    Est ce que quelqu’un pourrait me conseiller ?
    Merci par avance.

    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