Actions

Exemples d'ExpressionScript

From LimeSurvey Manual

This page is a translated version of the page ExpressionScript examples and the translation is 100% complete.

Template:Remarque


Structure

La première partie de l'article décrira à quoi servent les expressions et où trouver/ajouter une expression. La deuxième partie fournit des exemples sur la façon d'utiliser Expression.


Catégories d'expressions

LimeSurvey utilise des expressions aux fins suivantes :


Pertinence

Objectif : Masquer les groupes de questions/questions

La pertinence contrôle si un groupe de questions ou une question est affiché ou masqué. Si le résultat de l'Expression est "vrai" (c'est-à-dire 1), l'élément sera affiché. Sinon (si le résultat de l'Expression est "faux" (soit 0)), l'élément sera masqué.

Type Affiche/masque Où trouver Capture d'écran
Groupe de questions Pertinence groupe de questions Créer/Modifier un groupe de questions -> "Équation de pertinence :"
Pertinence de la question question Créer/Modifier une question -> "Équation de pertinence :"
Pertinence de la sous-question sous-question Modifier les sous-questions -> "Équation de pertinence :"


Validation

Objectif : Valider les entrées/actions sur les questions/sous-questions/réponses

La validation contrôle si la contribution du répondant à une question ou à une action est valide ou non. Si le résultat de l'expression est « vrai » (c'est-à-dire 1), la classe « bon » sera appliquée à l'élément et au message de validation. Sinon, si le résultat de l'expression est "false" (soit 0)), la classe "error" sera appliquée à l'élément et au message de validation. Vous pouvez déclarer un style pour ces classes dans le template.css.

Type Valide Où trouver Capture d'écran
Validation de la question question Créer/Modifier une question -> "Onglet Logique" - > "Équation de validation de question"
Validation de sous-question sous-questions Créer/Modifier une question -> "Onglet Logique" -> " Équation de validation de sous-question" ‎ ‎

Sortie de texte

Objectifs : (Faire quelque chose) et écrire du texte

Une expression peut être utilisée pour écrire du texte. Par exemple, vous pouvez tester ou calculer quelque chose et spécifier le résultat en fonction du résultat du test ou du calcul. Il peut également être utilisé pour insérer le texte d'une question, les réponses, les types de questions, ... d'une question utilisée avant l'utilisation de l'Expression. La sortie texte peut être utilisée partout où un texte est affiché et peut renvoyer tout type de résultats.

Cas d'utilisation Description
Micro-adaptation Ajuster un texte, par exemple, écrire "M." ou "Mme" en fonction d'une question de genre posée auparavant
Calcul Calculez une valeur et écrivez-la, par exemple, "Votre revenu familial est de xxx"
Référence Insérez un texte à partir d'un élément, par exemple, "Tu t'appelles xxx. Quel âge as-tu ?"


Stockage des réponses

Objectifs : (Faire quelque chose) (écrire du texte) et stocker quelque chose dans la base de données

Le type de question équation peut être utilisé pour stocker quelque chose dans la base de données. Vous pouvez faire quelque chose avec une expression, afficher la question d'équation (qui est similaire à un affichage de texte) et stocker le résultat de l'expression dans la base de données. Il stocke la réponse dans le tableau des réponses. Ensuite, le résultat peut être utilisé dans la fonction de statistiques ou il peut également être importé dans l'un des formats fournis par la fonctionnalité d'exportation de LimeSurvey.

Exemples d'expressions

Insérer une réponse à une question précédente

Objectif Insérer une réponse à une question précédente
Type Référence
Exemple Question 1 (code de question " Q00") : Dans quelle ville habitez-vous ?
Deuxième question (code de question « Q01 ») Depuis combien de temps vivez-vous en VILLE ?
À faire : La réponse à la première question doit être utilisée à la place de "VILLE" de la deuxième question.
Expression {QOO}
Description La réponse fournie dans Q00 remplace le champ Q00 de la deuxième question 
Étapes Créer/Modifier la deuxième question
Insérez « Combien de temps vivez-vous en {QOO} (années) ? » dans le champ de texte de la question 

Utilisation d'une question d'équation cachée pour remplir automatiquement une réponse

Problème : Imaginez que vous ayez deux questions Q1 et Q2. Q1 demande aux répondants leur âge. Q2 divise les répondants en trois groupes : l'âge est inférieur à 20 ans, l'âge est de 20 ans, l'âge est supérieur à 20 ans. Donc, Q2 doit utiliser les valeurs "1", "2", "3", qui correspondent à les conditions ci-dessus. N'oublions pas non plus de rendre Q2 invisible (la question ne sera pas affichée dans l'enquête, mais les valeurs le seront via le "processus en arrière-plan" au sein du tableau des réponses).

Pour remplir la base de données à l'aide du type de question Équation :

  • Créez d'abord une question avec le code Q1 comme question à saisie numérique.
  • Créez ensuite une autre question avec le code Q2 comme question d'équation .
  • Dans le chapitre de l'onglet "Paramètres d'affichage" de Q2:
    • définissez le champ "Toujours masquer cette question" sur "On"
    • tapez dans le champ "Équation" l'expression:
 {si(Q1.NAOK < 20, "1", si(Q1.NAOK > 20, "3", "2"))}

Créer une page de résumé à l'aide d'espaces réservés

Ce didacticiel montre comment créer un aperçu à la fin de l'enquête, répertoriant toutes les questions et réponses via ExpressionScript placeholders. Il montre également comment limiter un tel aperçu aux questions répondues uniquement.

Notre exemple peut être téléchargé à partir d'ici : Exemple d'enquête sur les espaces réservés d'enquête.


Types de questions utilisés ici :

1. Questions à choix unique / texte unique/questions numériques

  • Liste (liste déroulante)
  • Liste (radio) [L]
  • Oui/Non [O]
  • Texte long libre [T ]
  • Texte libre court [S]
  • Saisie numérique [N]
  • Équation [*]


2. Question avec sous-questions

  • Texte court multiple [Q]
  • Choix multiples [M]
  • Array [F]
  • Array (Oui/Non/Incertain) [C]
  • Tableau (choix de 10 points) [B]


3. Questions avec 2 échelles

  • Array double échelle [1]


4. Questions avec les échelles X et Y

  • Array (Nombres) [:]


5. Masquer les questions

  • Affichage du texte [X]


Dans cet exemple simple, notre aperçu sera une simple liste avec :

-Texte de la question : Réponse de l'utilisateur


Questions à choix unique/texte unique/questions numériques

Pour tous ces types de questions, Limesurvey stockera une seule réponse :

  • Liste (liste déroulante)
  • Liste (radio)
  • Liste avec commentaire
  • Choix de 5 points
  • Oui/Non
  • Texte libre court
  • Texte libre long
  • Énorme texte libre
  • Saisie numérique
  • Équation
  • Date
  • Sexe

En supposant que le code de la question est q1, nous pouvons référencer le texte de la question et la réponse en utilisant :

- {q1.question} : {q1.montré}

Exemple:

- Quel âge as-tu ? : 25 ans


Si vous souhaitez vérifier si cette question a reçu une réponse, vous pouvez mettre une instruction IF autour de votre sortie :

{if(!is_empty(q1),join("- ",q1.question,": ",q1.shown),"")}

Cela "se traduit" par : SI la question avec le code q1 n'est pas vide, affichez "-" ET le texte de la question ET " : " ET le texte de la réponse (la fonction join() joint les éléments sous la forme d'une nouvelle chaîne ; SINON : n'affiche rien (" " signifie une chaîne vide).

Question avec sous-questions

Pour tous ces types de questions, LimeSurvey utilise des sous-questions :

  • Plusieurs textes courts
  • Choix multiples
  • Choix multiples avec commentaires
  • Array
  • Array (choix de 5 points)
  • Array (choix de 10 points)
  • Array (Oui /Non/Incertain)
  • Tableau (Augmenter/Identique/Diminuer)
  • Tableau par colonne

En supposant que le code de la question est q2 et que les sous-questions sont numérotées SQ001, SQ002 (numérotation automatique effectuée par LimeSurvey), nous pouvons référencer le texte de la question et la réponse en utilisant :

- {q2_SQ001.question} : {q2_SQ001.montré}

- {q2_SQ002.question} : {q2_SQ002.montré}

Pour les questions à choix multiples, il est logique d'afficher maintenant le texte de la sous-question cochée mais d'afficher un Y pour chaque option sélectionnée :

- {q2_SQ001.question} : {q2_SQ001}

- {q2_SQ002.question} : {q2_SQ002}

...

Notez qu'actuellement, il n'est pas possible d'afficher le texte des questions avec des sous-questions, voir cette demande de fonctionnalité.


Exemple 1 (en supposant que le type de question est à choix multiples)

- Connaissez-vous ces marques de voitures ?

--Mercedes : Oui

--Audi : N

--Volvo : Oui


Si vous souhaitez afficher uniquement les éléments cochés, vous pouvez placer une instruction IF autour de votre sortie et vérifier la valeur de la case à cocher :

{ if( q2_SQ001=="Y", join( "- ", q2_SQ001.question, ": ", q2_SQ001.shown ), "" ) }


Utilisez la fonction listifop si vous souhaitez afficher une liste des éléments sélectionnés uniquement, par exemple : Mercedes, Volvo

{ listifop( 'valeur', '==', 'Y', 'question', ', ', that.q2.sgqa ) }


that.q2 s'étend à toutes les sous-questions de q2. Voir self, ceci et cela pour plus de détails.


Exemple 2 (en supposant que le type de question est Tableau (choix de 10 points))

- Veuillez évaluer la qualité des marques de voitures ci-dessous sur une échelle de 1=très mauvaise à 10=très bonne ?

--Mercedes : 7

-- Audi : 9

--Volvo : 9


Si vous souhaitez afficher uniquement les éléments notés, vous pouvez insérer une instruction IF autour de votre sortie et vérifier si la sous-question actuelle a reçu une réponse en utilisant :

{ if( ! is_empty( q3_SQ001 ), join( "- ", q3_SQ001.question, ": ", q3_SQ001.shown ), "" ) }


Utilisez la fonction listifop si par exemple vous souhaitez afficher uniquement une liste des éléments sélectionnés supérieure à huit, par exemple : Audi / Volvo

{ listifop( 'valeur', '>', 8, 'question', ' / ', that.q3.sgqa ) }


Question à deux échelles

Template:Remarque


Supposons que les codes suivants soient utilisés :

  • Code de question : q4
  • Codes de sous-question : SQ001, SQ002, ...
  • Échelle de codes de réponse 1 : A1, A2, ...*Codes réponse échelle 2 : B1, B2, ...


Template:Remarque


Générons les résultats pour les deux échelles et les deux premières sous-questions :

- {q4_SQ001_0.question} : {q4_SQ001_0.shown} / {q4_SQ001_1.shown}

- {q4_SQ002_0.question} : {q4_SQ002_0.shown} / {q4_SQ002_1.shown}

Pour afficher le texte de la sous-question, vous devez ajouter l'ID de l'échelle à l'espace réservé (bien que les textes soient les mêmes pour les deux échelles). Ainsi, au lieu de {q4_SQ001.question}, nous devons utiliser {q4_SQ001_0.question} ou {q4_SQ001_1.question}.

Si vous souhaitez exporter/afficher les résultats des sous-questions avec au moins une seule réponse, utilisez cette syntaxe pour chaque sous-question :

{if(count(q4_SQ001_0,q4_SQ001_1)>0,join("- ",q4_SQ001_0.question,": ",q4_SQ001_0.shown," / ",q4_SQ001_1.shown),"")}

Question avec les échelles X et Y

Cela s'applique à toutes les questions matricielles qui permettent une réponse pour chaque cellule (pas seulement pour chaque ligne comme indiqué précédemment) :

  • Array Texts
  • Array Numbers


Codes supposés utilisés :

  • Code de question: q5
  • Codes de sous-question: SQ001, SQ002, ...
  • Codes de réponse: A1, A2, ...

Pour faire référence au résultat d'une certaine sous-question d'une certaine colonne, vous devez utiliser QuestionCode . '_' . Sous-questionCode . '_' . Code de réponse. Exemple pour faire référence à la réponse de la troisième sous-question et deuxième colonne : q5_SQ003_A2.

Montrons les résultats pour les colonnes 1 à 3 des deux premières sous-questions :

- {q5_SQ001_A1.question} : {q5_SQ001_A1.shown} | {q5_SQ001_A2.shown} | {q5_SQ001_A3.shown}

- {q5_SQ002_A1.question} : {q5_SQ002_A1.shown} | {q5_SQ002_A2.shown} | {q5_SQ002_A3.shown}


Étant donné que pour ces types de questions, chaque cellule (combinaison des axes X et Y) équivaut à une option de réponse, un test des données existantes doit être effectué pour chaque cellule. Exemple:

{if(!is_empty(q5_SQ001_A1),join("- ",q5_SQ001_A1.question,": ",q5_SQ001_A1.shown),"")}


Template:Remarque

Masquer la question si la réponse de la question précédente est vide

Objectif Masquer la question si la réponse de la question précédente est vide
Type Pertinence de la question
Exemple Question un : code de question "nom", texte de la question "Quel est votre nom ?"
Deuxième question : texte de la question "{name}, quel âge as-tu ?"
À faire : Masquer la question deux si le champ de texte de la première question est vide 
Expression !is_empty(name)
Description is_empty() détermine si une variable est considéré comme vide. Le "!" annule le résultat. Donc, si la variable n'est pas vide, l'expression sera vraie et la question sera affichée 
Étapes Créer/modifier la question deux
Insérez "!is_empty(name)" dans "Équation de pertinence :"
Sample File Hide_question_if_empty_question_group.zip


Masquer le groupe de questions si la réponse à la question précédente est Oui ou Non

Objectif Masquer le groupe de questions si la réponse à la question précédente est Oui ou Non
Type Groupe de questions Pertinence
Exemple Première page, Groupe de questions un, Question un : code de question "PET", texte de la question "Avez-vous un animal de compagnie ?" -Oui Non
Page deux, groupe de questions deux : titre « À propos de votre (vos) animal(s) »
À faire : Afficher/Masquer le groupe de questions deux si la réponse de la première question est Oui/Non
Expression PET == "Y"
Description PET est le code de la question dont vous souhaitez vérifier la réponse. Si vous n'utilisez pas de suffixe, EM utilisera "Qcode.code". Vous comparez donc le code de réponse de la question PET à la valeur « Y ». Si le participant répond « Oui », l'expression est vraie et le groupe de questions « À propos de votre (vos) animal(s) » sera affiché.
Étapes Créer/modifier le groupe de questions deux
Insérez "PET == "Y"" dans "Équation de pertinence :"
Sample File Hide_question group_if_answer_from_previous_question_is_Yes_or_No.zip


Afficher la valeur d'un champ de question à réponse multiple

Objectif Afficher la valeur d'un champ de question à réponses multiples
Type Référence
Exemple Question 1 : code de question "AskChildAge", texte de question "Quel âge ont vos enfants ?". Codes de sous-questions -Enfant1 -Enfant2 -Enfant3 - EnfantXXX
Deuxième question : code de la question "ReportChildAge" texte de la question "À propos de votre premier enfant : - CHILD1 a AGE1."
Expression {AskChildAge_Child1.question}, {AskChildAge_Child1.value}
Description Vous souhaitez utiliser la valeur d'une sous-question dans une question suivante. Vous pouvez accéder à la valeur de la sous-question avec ce type d'expression : QcodeQuestion_QcodeSubquestion.value
Steps Créer/modifier la deuxième question
Insérez ce texte dans la description : "À propos de votre premier enfant : - {AskChildAge_Child1.question} est {AskChildAge_Child1.value}."
Sample File Display_value_of_a_multiple_answer_input_question_field. zip

Valider le nombre de cases cochées par ligne pour une question "Tableau (Nombres) Case à Cocher"

Objectif Valider le nombre de cases cochées par ligne
Type Validation
Exemple Question de type " Numéros de tableau (disposition des cases à cocher)"
Expression sum(...)
Description (sum(Test_A_1, Test_A_2, Test_A_3, Test_A_4, Test_A_5) <= X) détermine si au moins X cases de la ligne A sont cochées.
Si vous souhaitez vérifier les trois lignes (A, B, C), vous pouvez connecter l'expression en utilisant "&&" :
(somme (Test_A_1, Test_A_2, Test_A_3, Test_A_4, Test_A_5) <= X)
&& (somme (Test_B_1, Test_B_2, Test_B_3, Test_B_4, Test_B_5) <= X)
&& (sum(Test_C_1, Test_C_2, Test_C_3, Test_C_4, Test_C_5) <= X)
Steps Créer/modifier une question de type « Numéros de tableau (disposition des cases à cocher) ».
Insérez l'expression ci-dessus dans « Équation de validation de question » dans les paramètres avancés de la question (vous devrez peut-être ajuster les noms des variables !).
Fichier d'échantillon Validate number of boxes ticker per row for an Array (Numbers) Checkbox.lss

Calculer la différence entre deux dates

Objectif Calculer la différence entre deux dates
Type Pertinence / Type de question d'équation / Validation
Exemple Question 1 (date/heure, code : DOB) : Quelle est votre date de naissance ?
Deuxième question (date/heure, code : datetoday) : Quelle est la date d'aujourd'hui ?
Troisième question (passe-partout) : Vous avez XXXX jours.
A faire : Calculer et afficher le nombre de jours entre la date donnée à la question 1 et la question 2.
Expression {(strtotime(datetoday)-strtotime(DOB))/60/60 /24}
Description strtotime calcule le nombre de secondes entre le 1er janvier 1970 et la date donnée. L'expression ci-dessus calcule le nombre de secondes entre les deux dates données. Le terme "/60/60/24" calcule simplement le nombre de jours à partir du nombre de secondes.
Au lieu de demander la "dateaujourd'hui", vous pouvez également utiliser strtotime('now') ou simplement time(), qui renvoie directement le nombre de secondes depuis janvier 1970 jusqu'à aujourd'hui (c'est-à-dire l'heure à laquelle l'enquête a été réalisée). Ainsi, vous pouvez rapidement déterminer l'âge d'une personne en années avec l'équation {(time() - strtotime(DOB)) / 60 / 60 / 24 / 365.25} Dans chacun de ces cas, il est essentiel que la date soit saisie. dans un format approprié, sinon la fonction strtotime() ne fonctionnera pas correctement.
Étapes Créez deux questions sur la date (pour la date de naissance et pour la date d'aujourd'hui) et une question passe-partout.
Dans le texte de la question passe-partout, insérez : "Le {datetoday}, vous aviez {(strtotime(today)-strtotime(dob))/60/60/24} jours jours."

Remarque : La fonction strtotime peut fonctionner avec BEAUCOUP de formats de date, mais pas avec tous. Si vous rencontrez des problèmes, définissez le format de date de votre enquête sur mm/jj/aaaa ou aaaa-mm-jj ou jj.mm.aaaa"
Sample File Date_difference.zip

Utilisation d'ExpressionScript pour les évaluations

Voici un autre exemple sur la façon d'utiliser ExpressionScript avec des Questions de type tableau et des évaluations :</ br>

Disons que vous avez 2 questions matricielles et que vous souhaitez enregistrer les résultats des données de calcul dans votre base de données. C'est en fait simple, vous devrez créer et tester vos tableaux et soumettre une réponse factice pour voir si cela fonctionne et vous donne les résultats dans la page complétée.


Détails d'implémentation :

  • ajoutez une question de type équation
  • ajoutez la ligne suivante en supposant que Q1 est le code de votre question de tableau tandis que Q2 est le deuxième :
    •  {somme(Q1_SQ001.value,Q2_SQ001.value)}

Notez que SQ001 est le code par défaut pour toute sous-question. Si vous modifiez le code de la sous-question, ajustez l'équation ci-dessus en conséquence.


Utilisation de em_validation_q dans le tableau

Vous pouvez utiliser l'question validation equation pour contrôler un tableau avec n'importe quelle condition.


Détails d'implémentation :

  • pour le premier tableau : tableau à choix unique
    • Le code de la question est ARRAY
    • Les codes de sous-question sont SQ01,SQ02,SQ03 et SQ04

** mettre à jour l'équation de validation de la question entière et mettre

 !is_empty(ARRAY_SQ01) et !is_empty(ARRAY_SQ03)
  • pour le deuxième tableau : tableau de texte 
    • Le code de la question est ARRAYTEXT
    • Les sous-questions au code de l'axe Y sont SY01, SY02, SY03 et SY04
    • Mettre à jour la question entière équation de validation et mettre
       count(self.sq_SY01 >= 1) et count(self.sq_SY03 >= 3)