La saisie calcul

La saisie “calcul” prend automatiquement comme valeur le résultat d’un calcul dépendant des valeurs d’autres saisies.

La présente documentation est valable à partir de la version 2.0,0 du plugin,

Installation

Cette saisie est distribuée sous forme de plugin à part. Il n’y a rien d’autre à régler une fois le plugin installé.

Ce pourquoi la saisie est prévue

La saisie est prévue pour faire des calculs simples. Elle permet par exemple, pour un formulaire d’inscription à un évènement, de calculer le prix total.

Elle n’a pas vocation à remplacer un vrai système de panier / boutique, mais peut venir en complément à un site centré essentiellement sur des formulaires d’inscription.

Fonctionnement

Configuration de la saisie

La saisie prend un paramètre calcul. Ce paramètre peut être configuré lorsqu’on construit un formulaire avec Formidable ou autre plugin de construction de formulaire.

Configuration d'une saisie de calcul avec Formidable
Configuration d’une saisie de calcul avec Formidable

Dans ce paramètre, on indique le calcul à effectuer, en utilisant les éléments suivants :
-  opérateurs mathématiques de base : +-*/ ;
-  parenthèses ();
-  nom d’un champ entre @ : par exemple @input_1@ ;
-  ROUND() pour arrondir à l’entier le plus proche ; il est possible de mettre un deuxième argument, séparé du premier par une virgule, pour arrondir à un certain nombre de décimal, par exemple ROUND(3.33, 1) => 3.3;
-  nombre entier ou décimal, seul le point peut être accepté [1];
-  espaces et retour lignes.

Si le calcul contient autre chose que l’un de ces éléments, le calcul sera tout simplement ignoré par sécurité (afin d’éviter la mise en place d’un code javascript arbitraire).

Par ailleurs, s’appuyant [2] sur la saisie nombre, la saisie calcul possède des options de formatages :
-  nombre de chiffres dans la partie décimales;
-  séparateur de la partie décimale et de la partie entière;
-  séparateur des milliers.

Résultat dans un formulaire

Le plugin intègre un script javascript qui effectue les calculs dès lors qu’un champ de formulaire est modifié (.change() en jQuery).

Utilisation avec afficher_si

Si vous utilisez l’affichage conditionnel des saisies voici comment se comporte la saisie :
-  les calculs sont toujours effectués après l’affichage/masquage des saisies;
-  si une saisie est masquée, elle est considérée comme valant 0 pour le calcul;
-  lorsque le calcul est fait, si le résultat a changé, alors les tests d’affichage conditionnel sont ré-exécutés.

Il est donc possible d’avoir une saisie de calcul dont le résultat est conditionné par l’affichage d’une autre saisie et dont le résultat conditionne lui-même l’affichage de la saisie. Attention à ne pas faire des renvois mutuels, sinon votre javascript tournera en rond.

Vérification en PHP

Si nous demandons au formulaire que seules les valeurs autorisées puissent être postée (option globale de configuration de formulaire Formidable), alors on vérifiera que le résultat posté correspond bien au résultat du calcul. Il s’agit d’une sécurité pour éviter que des internautes “fraudent” en modifiant après coup, via l’inspecteur web, le résultat du calcul.

Exemple de démonstration

Le fichier .yaml ci-joint est un exemple de formulaire (inutile) utilisant cette saisie.

On demande dans un premier temps si on veut afficher un champ dizaine et/ou un champ unité. On affiche le résultat de l’addition des dizaine et des unités. Si ce résultat dépasse 50, alors on affiche un commentaire.

Exemple de calcul dans un formulaire

Exemple d’utilisation en cas réel

Dans un formulaire d’inscription à une activité d’astronomie :

  • nous demandons le nombre de nuits passées (select_1) ;
  • en fonction du nombre de nuits passées, nous indiquons, via l’affichage conditionnel, le tarif par personne (dégressif) sous forme de champ input en lecture seul (input_1, input_2 et input_3);
  • dans un autre champ nous demandons le nombre de personnes (input_4);
  • dans une saisie de type calcul (calcul_1), on affiche le prix total :
    • le calcul est (@input_1@+@input_2@+@input_3@)*@input_4@
    • comme seul un des trois inputs entre parenthèses est affiché en même temps, le résultat correspond toujours au prix effectif pour le nombre de nuits, multiplié par le nombre de personnes;
  • si le montant dépasse 100, alors nous affichons deux autres champs calculés :
    • les arrhes (calcul_2), correspondant à un tiers du prix, arrondi : ROUND(@calcul_1@/3) ;
    • le solde à verser à la fin : calcul_2 : prix total moins arrhes : @calcul_1@ - @calcul_2@.

Notes de version

Le passage à la version 2.x implique par rapport à la version 1.x :
-  changement du chemin du javascript, passant de js à javascript ;
-  utilisation de la saisie nombre.

Si donc vous avez surchargé la saisie ou le javascript, il faut adapter votre code.

Footnotes

[1On se méfiera toutefois, car les calculs informatiques sur les nombres décimaux peuvent parfois révéler des surprises à cause du changement entre l’écriture décimale et l’écriture binaire.

[2Depuis la version 2.0.0 du plugin.

updated on 19 May 2020

Discussion

4 discussions

  • 4

    Bonjour,

    Peut-on faire un calcul avec les sélections effectuées sur des champs de type @radio_x@ et/ou @checkbox_x@ ?

    À savoir : j’ai 3 boutons radios de choix, avec les valeurs 2|Premier choix, 4|Second choix, 7|Dernier choix : comment récupérer la valeur sélectionnée avec @radio_1@ ? Idem avec Sélection multiple.

    Merci pour votre aide,
    françois

    Reply to this message

  • 7

    Bonjour,
    Le crayon “configurer” ne donne rien pour les champs “Nombre” et “Résultat d’un calcul” dans les interfaces de “Formidable” et “Champs Extras”.
    En SPIP 3.2.7
    Saisie de calcul 2.0.1
    Saisie de nombre 1.0.0
    Les autres champs de saisie de configuration fonctionnent bien.
    Comme je vois une mise à jour récente de “Saisie de calcul”, il y a peut-être un réglage à faire ?
    Cordialement.

    • Je ne suis pas sur de comprendre ce que voulez dire par “ne donne rien” :)

      Cela étant, la saisie nombre a des souci, et j’aurais du dépublier la mise à jour de la saisie calcul. Il faut encore que je réécrive la saisie nombre dans les prochaines semaines.

    • Le petit crayon “déplie” normalement une interface de configuration à onglets : “ne donne rien” veut dire que cette interface n’apparaît pas.
      Je peux patienter pour une nouvelle mise à jour.
      Merci pour votre réponse rapide.

    • Quelles versions avez vous du plugin saisies ? il n’y a aucune raison que cela ne donne rien en fait.

      Vous avez des onglets mais pas les champs précis ? je pourrais avoir une capture d’écran.

      + la liste exacte des plugins

    • Version saisie de calcul : 2.0.1
      Je n’obtiens pas les onglets

    • Je demandais la version du plugins Saisies. Pas saisies calcul.

      Vous avez la fameuse version fantome 4.0.0, qui n’aurai jamais exister et qui est très veille.

      -  Désactiver puis effacer cette saisies
      -  Aller dans la page des depots, puis reinitialiser le depot en effacant/recreéant
      -  Installer ensuite saisies v 3.38.0

      (je suis étonné soit dit en passant que vous ayez pas eu plus tot de bug avec la version fantome de saisies)

    • Un GRAND MERCI !
      Tout fonctionne !
      Aucune idée qu’il pouvait y avoir un version fantôme...

    • oui c’est un peu un tru penible. Mais l’avantage c’est que maintenant c’est connnu et facilement reperable.

    Reply to this message

  • 1

    \o/ \o/ \o/ M.E.R.C.I. !

    • Pour info, une v2 vient de sortir. Elle apporte de nouvelles fonctionnalité mais nécessite désormais la saisie “nombre” + casse le chemin javascript (mais a priori on s’en fiche normalement).

    Reply to this message

  • 1
    Jmtconseils

    Merci beaucoup pour ce plugin.
    Peut-on avoir le cas suivant :
    Je veux effectuer des calculs sur des champs conditionnels, ayant tous comme réponses possibles par exemple : Oui, Parfois, Non.
    J’affecte un coefficient 4 pour Oui, 2 pour Parfois et 0 pour Non
    Comment écrire alors la formule de calcul, si c’est possible ?
    Merci par avance.

    • Je ne suis pas sur d’avoir compris le besoin. J’ai pas l’impression que nous ayons la même définition de “champ conditionnel”. Pour moi un “champ conditionnel” est un champ qui est affiché dans certaine condition (afficher_si), pour vous c’est un champ qui propose plusieurs choix (type select). Ou bien je me trompe?

      Mais supposons une saisie de type selection avec les entrées suivantes:

      4|oui
      2|parfois
      0|non

      Alors dans une saisie calcul, le calcul sera le suivant

      @selection_1@ * <coefficient multiplicateur>

      (ou similaire, car je ne capte pas le besoin).

    Reply to this message

Ajouter un commentaire

Who are you?
[Log in]

To show your avatar with your message, register it first on gravatar.com (free et painless) and don’t forget to indicate your Email addresse here.

Enter your comment here

This form accepts SPIP shortcuts {{bold}} {italic} -*list [text->url] <quote> <code> and HTML code <q> <del> <ins>. To create paragraphs, just leave empty lines.

Add a document

Follow the comments: RSS 2.0 | Atom