Contenu conditionnel

Contenu conditionnel

Un bloc Contenu conditionnel (type CONDITIONAL) fait que la leçon s'adapte à l'apprenant. Il regroupe des blocs en branches, et chaque branche a une condition portant sur ce que l'apprenant a fait dans une simulation du même contenu : combien de points il a obtenus, à quelle fin il est arrivé, une variable que la simulation conserve. L'apprenant voit les blocs de la première branche dont la condition est remplie ; si aucune ne l'est, il voit ceux de la branche finale, Sinon.

Usages typiques : un texte de renforcement seulement pour ceux qui ont mal terminé, des félicitations pour ceux qui ont atteint la meilleure fin, une étape suivante différente selon une décision.

Ce qu'il faut d'abord

Les conditions lisent des simulations ; le contenu en a donc besoin d'au moins une :

  1. Un bloc de code intégré avec un paquet téléversé qui envoie une progression ou une note.
  2. Un identifiant de simulation sur ce bloc, unique dans le contenu (minuscules, chiffres et _, en commençant par une lettre, par exemple sim_u1). La condition désigne la simulation par cet identifiant.
  3. Cette simulation doit se trouver hors de toute branche. Une simulation à l'intérieur d'une branche ne peut pas être nommée, ni marquée comme Notée (elle serait masquée et ne se terminerait jamais).

Le monter dans l'éditeur

Créer le bloc

Dans le panneau d'insertion, Contenu conditionnel se trouve dans la famille Structure. Il naît avec une branche de condition vide, qui n'est pas remplie tant que vous n'écrivez pas sa condition, et la branche Sinon. Il n'est pas proposé depuis le point d'insertion d'une branche (il n'y a qu'un niveau), ni dans l'éditeur d'évaluations ou de banques.

Le cadre et ses branches

Sur le canevas, le bloc est un cadre. En haut figurent l'étiquette Contenu conditionnel et, branche par branche, le résumé de la condition en toutes lettres (« Branche 1 : affichée si sim_u1.trust est supérieur ou égal à 3 »). En dessous, une zone par branche : les branches de condition dans leur ordre et Sinon à la fin, chacune avec son étiquette (Branche 1, Branche 2…, Sinon) et ses blocs.

  • Ajouter une branche, au pied du cadre, ajoute une branche de condition (10 au maximum).
  • L'en-tête de chaque branche de condition a des boutons pour la monter, la descendre et la retirer. Réordonner change la branche vérifiée en premier ; aucun bloc ne change de branche.
  • Retirer une branche vide la retire simplement. Si elle contient des blocs, l'éditeur demande : Retirer avec ses blocs ou Conserver les blocs, qui restent dans la leçon juste après le contenu conditionnel, toujours visibles (ils ne passent jamais dans une autre branche).
  • Une branche vide affiche « Cette branche n'a encore aucun bloc » et le bouton Ajouter un bloc. Chaque branche a en outre son propre point d'insertion.

Mettre des blocs dans une branche et les en sortir

  • En les faisant glisser : déposez un bloc sur un bloc d'une branche pour le placer à cet endroit, ou sur la zone d'une branche (même vide) pour le placer à la fin. Faire glisser le cadre déplace le contenu conditionnel avec toutes ses branches.
  • Sans glisser (au clavier ou sur écran étroit) : dans la barre du bloc, Déplacer vers… liste chaque branche de chaque contenu conditionnel de la leçon (avec son numéro s'il y en a plusieurs) et, depuis une branche, Hors du conditionnel, qui le place juste après. Le bloc entre à la fin de la branche.
  • Monter et Descendre déplacent un bloc à l'intérieur de sa branche. Les blocs d'une branche sont numérotés par branche : « Actions du bloc 2 de la branche 1 ».

Supprimer, dupliquer et modèles

  • Supprimer le bloc sur un contenu conditionnel qui a des blocs demande : Supprimer avec ses blocs ou Conserver les blocs (ils restent dans la leçon, à leur place et toujours visibles). Les deux options s'annulent avec Annuler.
  • Dupliquer le bloc duplique le contenu conditionnel avec toutes ses branches et ses blocs. Un bloc dupliqué dans une branche reste dans cette branche.
  • Quand vous choisissez des blocs pour un modèle ou pour l'IA, le contenu conditionnel emporte ses blocs ; un bloc d'une branche ne se choisit pas seul. Un modèle collé depuis une branche entre dans cette branche.

La condition de chaque branche

Modifier le bloc ouvre le panneau du contenu conditionnel, avec une partie par branche de condition :

  • Le champ Condition de la branche N, où s'écrit la condition (voir « Écrire une condition » plus bas). Si elle n'est pas comprise, le motif et le caractère où la lecture s'est arrêtée s'affichent en dessous, par exemple « « ) » inattendu au caractère 12 » ; sinon, le résumé en toutes lettres, le même que dans l'en-tête du cadre.
  • Les avertissements de cette branche (voir « Avertissements » ci-dessous).
  • Un assistant qui l'écrit pour vous. Choisissez la Simulation (celles de cette leçon et des autres leçons du contenu qui sont hors de toute branche), la Variable (celles que déclare son paquet, avec leur type, et celles du résultat : grade, score, maxScore, ending et kind), la Comparaison et la Valeur (une case à cocher pour vrai ou faux, un nombre, un texte pour ending et une liste avec good, mixed et bad pour kind), puis cliquez sur Ajouter à la condition. S'il y avait déjà quelque chose, choisissez d'abord de le relier avec et (&&, les deux doivent être remplies) ou ou (||, une seule suffit). Si le paquet ne déclare pas ses variables, vous pouvez saisir le nom à la main, avec un avertissement indiquant qu'il ne peut pas être vérifié. L'assistant écrit la comparaison à l'endroit du curseur dans le champ (ou à la place du texte sélectionné), laisse le curseur juste après et vous rend le focus ; si le champ n'a pas encore eu le curseur, il l'ajoute à la fin.

Avertissements

Ce qui empêcherait une branche de s'afficher un jour, ou une simulation de fonctionner, apparaît comme avertissement dans le panneau et dans Vérifications, avec l'étiquette Contenu. Les avertissements n'empêchent jamais d'enregistrer, d'exporter ni de partager :

  • aucune branche n'a de blocs, « Sinon » compris ;
  • une branche n'a pas de condition, ou en a une qui n'est pas comprise ;
  • une condition lit une simulation absente du contenu (cela arrive en copiant entre contenus) ou une variable que son paquet ne déclare pas ;
  • une condition lit des variables d'une simulation dont le paquet n'envoie pas son état (state) ;
  • une condition emploie une variable avec un type qui n'accepte pas cette opération, d'après ce que déclare le paquet (par exemple, comparer à un nombre une variable vrai/faux) ;
  • la simulation se trouve après le contenu conditionnel dans l'ordre de lecture : quand l'apprenant y arrive, il ne l'a pas encore jouée ;
  • une simulation Notée se trouve dans une branche, ou une simulation d'une branche est lue par une condition.

Un assistant connecté par MCP reçoit ces mêmes avertissements dans warnings quand il crée le bloc, le modifie ou déplace des blocs.

Écrire une condition

Une condition est une expression courte qui est vraie ou fausse. Elle lit des variables écrites simulation.nom :

sim_u1.reused
sim_u1.trust >= 3
sim_u1.kind == "good" && sim_u1.grade >= 70
!(sim_u1.reused) || sim_u2.ending == "agreement"

Variables

NomCe qu'il contientType
gradeLa note (0–100) envoyée par le paquetnombre
scoreLe score envoyé par le paquetnombre
maxScoreLe score maximalnombre
endingL'identifiant de la fin atteintetexte
kindgood, mixed ou badtexte
tout autre nomUne variable que le paquet conserve dans son état (par exemple trust)nombre ou vrai/faux

grade, score, maxScore, ending et kind sont réservés : ils lisent toujours le dernier résultat envoyé par le paquet. Les autres noms sont les variables que le paquet déclare dans son slxd-embed.json ; demandez à la personne qui a construit le paquet lesquelles il propose.

Opérateurs

QuoiCommentExemple
Comparer des nombres< <= > >=sim_u1.trust >= 3
Égal / différent== !=sim_u1.kind != "bad"
Et&&sim_u1.trust >= 3 && sim_u1.reused
Ou||sim_u1.kind == "good" || sim_u1.grade > 80
Non!!sim_u1.reused
Additionner / soustraire+ -sim_u1.score + sim_u2.score >= 10
Grouper( )(a.x || b.y) && c.z
  • Les nombres s'écrivent avec un point décimal facultatif (3, 2.5), sans exposant. Les négatifs utilisent -.
  • Les textes vont entre guillemets doubles : "good". À l'intérieur, seuls \" et \\ sont spéciaux, et il n'y a pas de saut de ligne.
  • true et false sont disponibles comme valeurs.
  • Il n'y a aucune conversion : on ne peut pas comparer un nombre avec un texte, et un texte ne se compare qu'avec un autre texte, avec == ou !=. sim_u1.trust == "3" est une erreur.
  • Les comparaisons ne s'enchaînent pas : 1 < sim_u1.trust < 3 est une erreur ; écrivez sim_u1.trust > 1 && sim_u1.trust < 3.
  • && et || s'arrêtent dès que la réponse est connue, comme en JavaScript.
  • L'expression entière doit être vraie ou fausse.

Limites

Une condition compte au plus 500 caractères. Si vous écrivez quelque chose d'incompréhensible, l'éditeur indique le caractère où il s'est arrêté.

Plusieurs branches et « Sinon »

Un bloc Contenu conditionnel peut avoir jusqu'à 10 branches avec condition, plus la branche Sinon, qui existe toujours et n'a pas de condition. Les branches sont examinées dans l'ordre et la première dont la condition est remplie l'emporte ; placez donc la plus spécifique en premier :

  1. sim_u1.kind == "good" && sim_u1.trust >= 3 → félicitations
  2. sim_u1.kind == "good" → bref retour positif
  3. Sinon → renforcement

Les blocs d'une branche sont des blocs ordinaires : de n'importe quel type et en n'importe quel nombre. Règles à retenir :

  • Un seul niveau : un bloc Contenu conditionnel ne peut pas se trouver dans la branche d'un autre.
  • Une condition peut nommer jusqu'à 8 simulations différentes.
  • Une branche peut être vide.

Jamais dans les évaluations ni les banques de questions. Le contenu conditionnel n'est disponible que dans les leçons ordinaires. L'éditeur ne le propose pas dans les évaluations ni les banques, une leçon qui en contient ne peut pas être convertie en évaluation ni déplacée vers une banque, et il en va de même via MCP.

Ce que voit l'apprenant

L'apprenant ne voit que les blocs de la branche qui s'applique, à leur place, comme si le bloc Contenu conditionnel n'existait pas. Les autres branches n'existent pas pour lui : elles ne comptent pas pour la progression, ne le retiennent pas et n'envoient pas de xAPI.

Quelques précisions :

  • Une branche ne peut être remplie que lorsque les simulations qu'elle lit sont terminées. Une simulation est terminée quand son paquet signale qu'il a fini (complete, ou un état final). Jusque-là, ces conditions sont fausses et l'apprenant voit la branche suivante ou Sinon. Si une variable n'existe pas encore ou a un autre type, cette condition est aussi fausse.
  • La réévaluation se fait en direct. Si l'apprenant rejoue une simulation et que le résultat change, la leçon se met à jour. Les lecteurs d'écran reçoivent une annonce polie indiquant que le contenu a changé ; le focus ne bouge pas.
  • Ce qui a été fait est conservé. Si la branche visible change au-dessus de l'endroit où se trouve l'apprenant, un blocage en attente dans la nouvelle branche doit toujours être levé, et ce qui était déjà terminé le reste.
  • Au retour (SCORM) : si l'apprenant a quitté la leçon dans une branche qui ne s'applique plus, il reprend au début de celle qui s'applique, ou au bloc suivant si elle est vide.
  • Les variables du paquet sont enregistrées avec la progression de l'apprenant. Si la progression ne tient pas dans la place du LMS, Creator protège les variables que lisent les conditions.

Aperçu

Les auteurs ont besoin de voir toutes les branches, pas seulement celle qui correspond à leur essai.

  • Dans l'aperçu, dans une version (instantané) et dans la relecture, la barre comporte l'interrupteur Afficher toutes les branches. Activé, le lecteur affiche toutes les branches l'une après l'autre, dans l'ordre de lecture : les branches du bloc conditionnel dans l'ordre, puis Sinon, sans annonce. En relecture, ouvrir le commentaire d'une leçon contenant du contenu conditionnel l'active.
  • Uniquement dans cet aperçu, chaque branche est précédée d'une étiquette avec le résumé en toutes lettres de sa condition (« Branche 1 : affichée si sim_u1.trust est au moins 3 »), ou Sinon, et la branche que l'apprenant verrait en ce moment porte une ligne de plus qui le dit. L'apprenant ne voit jamais ces étiquettes.
  • Les liens de partage n'ont pas l'interrupteur : ils montrent ce que voit l'apprenant.

PDF

Le PDF est un document de référence sans apprenant ; il imprime donc toutes les branches, dans l'ordre de lecture. Avant le premier bloc de chaque branche, il imprime le libellé « Affiché si : … » avec la condition rédigée en toutes lettres, dans la langue du cours (par exemple, sim.trust est supérieur ou égal à 3 et sim.reused est vrai ; si elle est illisible, telle que vous l'avez écrite), et « Affiché si aucune des conditions précédentes n'est remplie » avant Sinon. Les branches vides ne sont pas étiquetées.

Comprendre les erreurs de condition

Le panneau signale une condition qui n'est pas comprise avec le motif et le caractère où la lecture s'est arrêtée, et avertit d'une simulation qui n'existe pas dans le contenu. Lorsqu'un assistant écrit le bloc via MCP, la condition entière est en outre vérifiée par rapport aux règles ci-dessus avant d'enregistrer quoi que ce soit. Erreurs typiques :

ProblèmeExempleCorrection
Texte comparé à un nombresim_u1.ending == 3sim_u1.ending == "agreement"
Nombre comparé à un textesim_u1.trust == "3"sim_u1.trust == 3
Variable vrai/faux comparée à un nombresim_u1.reused == 3sim_u1.reused
!, && ou || sur un nombre, ou ordre entre vrai et faux!sim_u1.trustsim_u1.trust == 0
! sur un texte!sim_u1.kindsim_u1.kind != "bad"
Comparaison enchaînée1 < sim_u1.trust < 3sim_u1.trust > 1 && sim_u1.trust < 3
Ni vrai ni fauxsim_u1.trust + 1sim_u1.trust + 1 > 3
Simulation inexistante ou située dans une branchesim_x.trustutilisez l'identifiant d'une simulation hors de toute branche

Si le paquet déclare le type de ses variables (nombre ou vrai/faux), le panneau et le MCP vérifient aussi que vous les employez avec ce type : sim_u1.reused == 3 est une erreur si reused est vrai/faux. Une variable que le paquet ne déclare pas ne peut pas être vérifiée.

Étapes suivantes

Contenu conditionnel