Exemples d'ExpressionScript
From LimeSurvey Manual
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é.
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.
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
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 ) }
Où 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
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, ...
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),"")}
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)