SPIP-Contrib

SPIP-Contrib

عربي | Deutsch | English | Español | français | italiano | Nederlands

288 Plugins, 197 contribs sur SPIP-Zone, 220 visiteurs en ce moment

Accueil > Outils pour plugins > Saisies > Saisies

Saisies

27 mars 2010 – par RastaPopoulos – 490 commentaires

60 votes

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 pour les développeurs ayant pour but de faciliter et d’accélérer l’écriture des formulaires.

Pour cela, Saisies propose un ensemble d’outils (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 2, notamment pour la gestion des erreurs sur les champs ;
  • automatiquement compatibles avec les recommandations HTML/CSS de SPIP, y compris pour le plugin CFG.

La balise #SAISIE

Cette balise 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 soit :

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

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

Voici quelques exemples d’utilisation, pour comprendre l’approche.

  1. Génère un simple champ texte, indiqué comme étant obligatoire :
  2. #SAISIE{input, email, label=Votre courriel, obligatoire=oui}
  3.  
  4. Génère des boutons radios avec un choix "oui ou non" :
  5. #SAISIE{oui_non, zanini, label=Tu veux ou tu veux pas ?}
  6.  
  7. Génère un choix multiple parmi les utilisateurs du SPIP :
  8. #SAISIE{auteurs, destinataires,
  9. label=Destinataires du message,
  10. explication=Choisissez une ou plusieurs personnes à qui sera envoyé le message.,
  11. multiple=oui}

Télécharger

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

Consultez également :

-  La référence de la balise #SAISIE

-  Un complément de doc avancée sur les saisies

Multilinguisme

#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.

Attention, pour utiliser tout ce qui suit, vous devez installer aussi le plugin YAML.


Afficher les erreurs

Saisie gère nativement l’affichage des erreurs.
Si la fonction CVT verifier() retourne une erreur du même nom celle ci sera affichée.
Pour la saisie[(#SAISIE{input, annee, label=<:monplugin:annee:>})] , si verifier retourne : $erreurs['annee'] = "une erreur" alors <span class="erreur_message">une erreur</span> sera affichée à la suite de la saisie.

Gérer les tableaux de saisie

La norme html permet de gérer des variables sous la forme de tableau. Il est recommandé d’utiliser alors le formalisme suivant tableau/variable. Par exemple : [(#SAISIE{input, annee/debut, label=<:monplugin:annee:>})] pour obtenir un tableau annee.

Pour information la forme naturelle [(#SAISIE{input, annee\[debut\], label=<:monplugin:annee:>})] est valide mais est incompatible avec la gestions des erreurs.
Cette écriture est donc déconseillée.

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 un tableau suivant une norme précise qui va contenir la description complète de toutes les saisies.

Exemple d’utilisation :

  1. <ul>
  2. #GENERER_SAISIES{#ENV{mes_saisies}}
  3. </ul>

Télécharger

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 2 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 :

  1. [(#EDITABLE|non)
  2. #VOIR_SAISIES{#ENV{mes_saisies},#ENV}
  3. ]

Télécharger

Une norme pour décrire les saisies

Afin de manipuler plus facilement tout un ensemble de champs de formulaire, que ce soit pour générer leur HTML ou pour les modifier automatiquement dans un script, il a été défini une norme pour décrire des saisies dans un tableau PHP.

Le tableau doit respecter les points suivant :

  • Chaque saisie est un tableau de la forme :
    1. $une_saisie = array(
    2. 'saisie' => 'input',
    3. 'options' => array(
    4. 'nom' => 'nom',
    5. 'label' => 'Votre nom',
    6. 'size' => 50
    7. )
    8. );

    Télécharger

  • Chaque ligne du tableau d’ensemble est une saisie, elle-même étant décrite dans un tableau. L’ordre des éléments sera l’ordre des saisies.
    1. $saisies = array(
    2. array(...), // une saisie
    3. array(...), // une saisie
    4. array(...) // une saisie
    5. );

    Télécharger

  • Les saisies qui acceptent des enfants (comme les fieldset) les placent dans une case « saisies » qui contiendra un tableau ayant la même structure que le tableau global :
    1. $un_fieldset = array(
    2. 'saisie' => 'fieldset',
    3. 'options' => array(
    4. 'nom' => 'mon_groupe',
    5. 'label' => 'Mon groupe de champ'
    6. ),
    7. 'saisies' => array(
    8. array(), // une autre saisie
    9. array(), // une autre saisie
    10. array() // etc
    11. )
    12. );

    Télécharger

Exemple complet :

  1. $saisies = array(
  2. 'saisie' => 'input',
  3. 'options' => array(
  4. 'nom' => 'nom',
  5. 'label' => 'Nom'
  6. )
  7. ),
  8. 'saisie' => 'input',
  9. 'options' => array(
  10. 'nom' => 'email',
  11. 'label' => 'Adresse de courriel'
  12. )
  13. ),
  14. 'saisie' => 'fieldset',
  15. 'options' => array(
  16. 'nom' => 'adresse',
  17. 'label' => 'Adresse postale'
  18. ),
  19. 'saisies' => array(
  20. 'saisie' => 'input',
  21. 'options' => array(
  22. 'nom' => 'voie',
  23. 'label' => 'Voie'
  24. )
  25. ),
  26. 'saisie' => 'input',
  27. 'options' => array(
  28. 'nom' => 'ville',
  29. 'label' => 'Ville'
  30. )
  31. ),
  32. )
  33. ),
  34. 'saisie' => 'radio',
  35. 'options' => array(
  36. 'nom' => 'livre',
  37. 'label' => 'Votre livre préféré',
  38. 'datas' => array(
  39. 'vermines' => 'Au régal des vermines',
  40. 'bonheur' => 'Le bonheur',
  41. 'alain' => 'Alain Zannini',
  42. 'homme' => "L'homme qui arrêta d'écrire"
  43. )
  44. )
  45. ),
  46. );

Télécharger

Problème avec Xdebug

Si vous êtes développeur et que vous utilisez 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 modifier avec une variable. Vous devez donc ajouter cela dans votre configuration PHP/Xdebug :

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

Télécharger

Et hop, ça remarche.

Voir en ligne : http://plugins.spip.net/saisies

Dernière modification de cette page le 1er avril 2017

Retour en haut de la page

Tout afficher

Vos commentaires

  • Le 23 septembre à 13:59, par sirom En réponse à : Saisies

    Bonjour à tous

    Juste pour signaler que sur un site 3,1 j’ai une petite erreur dans la console de mon navigateur :

    ReferenceError: Can't find variable: jQuery sur le fichier saisies.js

    avec mon formulaire (formidable)

    Pourquoi ?
    (le site fonctionne et je n’ai pas de conflit jQuery )

    Merci de votre aide

    Répondre à ce message

  • Le 14 septembre à 16:18, par Hanjo En réponse à : Saisies

    Bonjour,

    Je trouve deux chaînes codées en dur dans le fichier saisies_doc.html

    Peut-être une petite modification pour une prochaine version de cet excellent plugin ?

    Cordialement,
    Hanjo

    Répondre à ce message

  • Le 5 juillet à 16:20, par Yohooo En réponse à : Saisies

    Bonjour,

    Suite à une mise à jour, j’observe un problème très spécifique avec le plugin Champs_extra_interface. Cela concerne concerne l’affichage d’erreur si la condition de champs extra sont activé à la fois dans le champ « Afficher si remplissage » et dans le champ « Afficher si ».

    Il me semble qu’il faille une condition « AND » entre le traitement de ces 2 champs. Si c’est le cas, je propose d’ajouter ligne 498 de « saisie_afficher.php » :

    1. if ( $condition != " ") {
    2. $condition .= "&& ";
    3. }

    Télécharger

    • Le 13 juillet à 18:08, par RastaPopoulos En réponse à : Saisies

      Mmm je ne connais pas assez le afficher si (pas du tout même) pour avoir un avis :(
      Maieul ?

    Répondre à ce message

  • Le 17 janvier à 09:31, par PRX En réponse à : Saisies

    Bonjour,
    sans conséquences notables à ce moment, voici les messages (que je trouve alarmants inutilement) sur un mise à jour de quelques plugins :

    Erreurs survenues (donc en rouge)
    Impossible d’activer le plugin ../plugins/auto/saisies/v2.18.1
    Utilise le plugin VERIFIER en version ≥ 1.6.0.
    Impossible d’activer le plugin ../plugins/auto/ieconfig/v1.3.1
    Impossible d’activer le plugin ../plugins/auto/jeux/v3.4.1
    Impossible d’activer le plugin ../plugins/auto/menus/v1.6.5
    Nécessite le plugin ZPIP
    Nécessite le plugin SPIPR
    Nécessite le plugin SPIPR_BLOG
    Nécessite le plugin SPIPR_DIST
    Nécessite le plugin SPIPR_DOC
    Impossible d’activer le plugin ../plugins/auto/fbantispam/v1.2.3
    Impossible d’activer le plugin ../plugins/auto/noizetier/v2.5.0
    Impossible d’activer le plugin ../plugins/squelette_maparaan
    Nécessite le plugin TYPOENLUMINEE
    Nécessite le plugin GRAVATAR
    Nécessite le plugin SLOGAN
    Impossible d’activer le plugin ../plugins/auto/formidable/v3.0.1
    Utilise le plugin COLLECTIONJSON en version ≥ 1.5.0.
    Utilise le plugin CVTUPLOAD en version ≥ 1.9.4.
    Utilise le plugin CORBEILLE en version ≥ 3.1.0.
    Impossible d’activer le plugin ../plugins/auto/aveline/v2.5.7
    Utilise le plugin ZVIDE en version ≥ 2.0.0.
    Utilise le plugin SUIVANT_PRECEDENT en version ≥ 1.3.1.
    Utilise le plugin ANYTHINGSLIDER en version ≥ 2.0.0.

    Actions réalisées (en vert = OK)

    La mise à jour du plugin « Saisies pour formulaires » (de la version : 2.17.1 à 2.18.1) s’est correctement déroulée
    La mise à jour du plugin « NoSPAM » (de la version : 1.5.15 à 1.5.16) s’est correctement déroulée
    La mise à jour du plugin « Facteur » (de la version : 3.4.8 à 3.4.9) s’est correctement déroulée
    L’installation du plugin « Facteur » (version : 3.4.9) s’est correctement déroulée
    La mise à jour du plugin « API de vérification » (de la version : 1.4.2 à 1.6.0) s’est correctement déroulée

    • Le 5 juillet à 19:47, par Matthieu Marcillaud En réponse à : Saisies

      Ces problèmes (ordre pas toujours correct des plugins à activer) sont corrigés en version 3.2 de SPIP (actuellement en beta), ce qui enlève la plupart de ces fausses erreurs.

    Répondre à ce message

  • Le 5 juillet à 11:51, par Dudule En réponse à : Saisies

    Bonjour,
    Pouvez-vous me dire s’il est possible d’associer à un champ input un élément « datalist » de manière à avoir non seulement la possibilité de saisir une valeur mais également une liste de valeurs possibles. La fonction autocomplete peut être une piste mais elle ne prend en compte que les valeurs déjà saisies par l’utilisateur alors que je voudrais m’appuyer sur une liste de choix déterminée. Merci pour votre retour

    Répondre à ce message

  • Le 28 juin à 11:32, par Chourak En réponse à : Saisies

    Bonjour,

    Est-il voulu que sur une saisie de type radio et obligatoire (en html5) il n’y ait pas de required="required" sur l’input correspondant ?

    • Le 28 juin à 12:59, par RastaPopoulos En réponse à : Saisies

      C’est peut-être un oubli oui, mais note quand même que normalement pour des radios, en ergonomie il *devrait* y avoir l’un des boutons déjà coché, car ce sont des radios et qu’on ne ensuite jamais revenir à l’état « pas coché ».

    • Le 28 juin à 15:52, par Maïeul En réponse à : Saisies

      Pas d’accord avec toi. Car avec une option déjà coché, au cours le risque que la personne ne vérifie pas la valeur.

      Ex avec deux choix : « j’autorise à prendre des photos » / « je n’’autorise pas ». Si je coche par défaut l’un des deux je risque de ne pas réeellement recueillir le consentement

    • Le 28 juin à 16:03, par RastaPopoulos En réponse à : Saisies

      Il peut sûrement y avoir des exceptions mais c’est une mauvaise pratique la majorité du temps.

      Le W3C dit

      To avoid confusion as to whether a radio button group is required or not, authors are encouraged to specify the attribute on all the radio buttons in a group. Indeed, in general, authors are encouraged to avoid having radio button groups that do not have any initially checked controls in the first place, as this is a state that the user cannot return to, and is therefore generally considered a poor user interface.

    • Le 28 juin à 16:08, par Chourak En réponse à : Saisies

      Vos deux points de vue se valent !

      Dans mon cas c’est un simple choix de civilité Monsieur / Madame, mais qui est obligatoire.
      Je ne peux pas préjuger de la civilité de la personne qui remplit le formulaire, je préfère donc que rien ne soit coché par défaut et qu’en cas d’oubli le fait que ce soit obligatoire « force » les gens à choisir la bonne civilité.

      J’ai donc surchargé localement la saisie radio pour prendre en compte le required.

      merci :)

    Répondre à ce message

  • Le 21 mars à 09:23, par Alexandre En réponse à : Saisies

    Bonjour,
    J’ai rencontré un problème avec la fonction "afficher_si" sur des checkbox donc la valeur est composé de plusieurs mots. J’ai corriger ce problème dans le fichier "saisies_afficher.php" à la ligne 386 :

    $condition = preg_replace('#@'.preg_quote($nom).'@#U', '($(form).find(".checkbox[name=\''.$nom.'[]\'][value=\''.$value.'\']").is(":checked") ? $(form).find(".checkbox[name=\''.$nom.'[]\'][value=\''.$value.'\']").val() : "")', $condition);

    Ajout de « \’ » dans « [value=’.$value.’] »

    Cependant les valeurs contenant des espace et des «  » risque de poser problème non ? :)

    • Le 21 mars à 10:06, par Maïeul En réponse à : Saisies

      j’avoue ne pas savoir. A tester non ? et puis il faut aussi du coup modifier un fichier qui effectue un test sur afficher_si lorsqu’on vérifie qu’un champ obligatoire est bien rempli

    Répondre à ce message

  • Le 20 janvier à 10:22, par PRX En réponse à : Saisies

    Amélioration ?
    Bonjour , je cherche à paramétrer et supprimer les 3 lignes envoyées dans l’email de confirmation à celui qui poste :
    « Envoi via le site MONSITE
    Vous pouvez voir cette réponse sur cette page.
    Vous pouvez gérer l’ensemble des réponses sur cette page. »

    Comment est-ce possible SVP ? Merci d’avance
    (MAJ de V2.18.1 vers 2.18.2 sans soucis au passage)

    • Le 20 janvier à 14:04, par RastaPopoulos En réponse à : Saisies

      Salut, je ne vois pas de quoi tu parles ni le rapport avec Saisies, ce plugin n’envoyant aucun email. Repose sûrement la question sur le plugin qui fait cet envoi dont tu parles. :)

    • Le 20 janvier à 14:43, par PRX En réponse à : Saisies

      oui effectivement , c’était pour toi mais dans le plugin Formulaires.désolé

    Répondre à ce message

  • Le 12 octobre 2016 à 17:36, par Vincent En réponse à : Saisies

    Bonjour,

    Aussitôt que le plugin Saisies est actif, j’obtiens cette erreur javascript, qui bloque d’autres scripts.

    Uncaught ReferenceError : onAjaxLoad is not defined

    Pourquoi ?

    • Le 12 octobre 2016 à 17:44, par RastaPopoulos En réponse à : Saisies

      Tu as testé en installant QUE le plugin saisies ? Sinon ça ne teste pas ce plugin uniquement mais la conjonction de plein de trucs.

    • Le 12 octobre 2016 à 17:53, par Vincent En réponse à : Saisies

      Salut !

      Je viens de désactiver tous mes plugins, et ça ne fonctionne pas plus. Toujours la même erreur.

      Vincent

    • Le 12 octobre 2016 à 17:58, par RastaPopoulos En réponse à : Saisies

      Je cite notre cher Edgard :

      Edgard : la boule de cristal est en panne : on va avoir besoin d’une url pour voir ton site et comprendre le problème

      Parce que chezmoiçamarche © :p

    Répondre à ce message

  • Le 29 juin 2016 à 15:40, par Wilco En réponse à : Saisies

    Bonjour,
    Y a-t-il une raison spécifique pour laquelle le plugin insère ses fichiers JavaScript et CSS dans l’espace public à des positions « fixes » plutôt que de passer par les pipelines dédiés et d’utiliser les mécanismes #INSERT_HEAD et #INSERT_HEAD_CSS ? Ou est-ce juste un oubli ?

    Merci !

    • Le 29 juin 2016 à 15:45, par RastaPopoulos En réponse à : Saisies

      Parce que ça ne les ajoute pas sur toutes les pages du site mais seulement quand ça trouve des saisies dans la page (car le cas le plus courant n’est pas d’avoir des formulaires sur toutes les pages du site, et encore moins des formulaires avec Saisies).

    • Le 13 juillet 2016 à 13:32, par RastaPopoulos En réponse à : Saisies

      À priori le plugin n’insère ses trucs que s’il y a *vraiment* des saisies dans la page (la plupart des sites n’ont pas du tout des formulaires sur toutes les pages du site, inversement c’est plutôt une exception). Donc ça ne se fait qu’avec le pipeline affichage_final, quand on a disponible le contenu complet. Et non pas dans les pipelines qui ajoutent ça sur toutes les pages du site.

    Répondre à ce message

Répondre à cet article

Qui êtes-vous ?

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 Les choses à faire avant de poser une question (Prolégomènes aux rapports de bugs. )
Ajouter un document

Retour en haut de la page

Ça discute par ici

  • Plugin Modèles media

    25 avril 2011 – 180 commentaires

    Les modèles , et produisent chacun un résultat différent et ce résultat, pour les images, dépend du fait qu’elle soit dans le portfolio ou non. Ce plugin propose une nouvelle série de modèles ayant un comportement unifié et indépendant du mode des (...)

  • Qrcode

    3 novembre 2010 – 45 commentaires

    Les QrCodes sont des codes barres lisibles essentiellement par les téléphones portables et permettent d’échanger avec ceux-ci diverses informations, et en particulier des liens. Ce plugin à pour objet de permettre à spip d’utiliser des QrCodes pour (...)

  • Speedsyndic pour SPIP 2 et SPIP 3

    11 octobre 2010 – 27 commentaires

    Ce plugin est une version compatible spip 2.0.x / 2.1 / 3.1 du plugin Speedsyndic Note : Une bonne partie du texte ci-dessous a été pompé de cet article, expliquant la version précédente du plugin. je n’ai fait qu’adapter le code pour spip 2, (...)

  • LIM : alléger l’espace privé

    20 avril 2015 – 41 commentaires

    Ce plugin permet de désactiver l’affichage de blocs ou de boutons, présents par défaut dans SPIP mais qui peuvent devenir inutiles dans le cadre de votre projet. Il allège du coup l’interface d’édition et supprime d’éventuels risques de confusion (...)

  • HTML Purifier

    5 janvier 2011 – commentaires

    Pour sécuriser l’affichage de certains textes (ceux qui proviennent potentiellement non pas des rédacteurs, mais de visiteurs non enregistrés ou de contributeurs externes, comme les forums ou les contenus des sites syndiqués), SPIP utilise en interne (...)

Ça spipe par là