Contenido condicional

Contenido condicional

Un bloque Contenido condicional (tipo CONDITIONAL) hace que una lección se adapte al alumno. Agrupa bloques en ramas, y cada rama tiene una condición sobre lo que el alumno hizo en una simulación del mismo contenido: cuántos puntos sacó, a qué final llegó, una variable que la simulación guarda. El alumno ve los bloques de la primera rama cuya condición se cumple; si no se cumple ninguna, ve los de la rama final, Si no.

Usos típicos: un texto de refuerzo solo para quien terminó mal, una felicitación para quien llegó al mejor final, un siguiente paso distinto según una decisión.

Qué necesitas antes

Las condiciones leen simulaciones, así que el contenido necesita al menos una:

  1. Un bloque de código incrustado con un paquete subido que envíe progreso o una nota.
  2. Un identificador de simulación en ese bloque, único en el contenido (minúsculas, cifras y _, empezando por una letra, por ejemplo sim_u1). La condición se refiere a la simulación por ese identificador.
  3. Esa simulación debe estar fuera de toda rama. Una simulación dentro de una rama no se puede nombrar, ni tampoco marcarse como Evaluable (estaría oculta y nunca terminaría).

Montarlo en el editor

Crear el bloque

En la hoja de inserción, Contenido condicional está en la familia Estructura. Nace con una rama de condición vacía, que no se cumple hasta que escribas su condición, y la rama Si no. No se ofrece desde el punto de inserción de una rama (solo hay un nivel) ni en el editor de exámenes o de bancos.

El marco y sus ramas

En el lienzo, el bloque es un marco. Arriba lleva la etiqueta Contenido condicional y, rama a rama, el resumen de la condición en palabras («Rama 1: se muestra si sim_u1.trust es mayor o igual que 3»). Debajo hay una zona por rama: las de condición en su orden y Si no al final, cada una con su etiqueta (Rama 1, Rama 2…, Si no) y sus bloques.

  • Añadir una rama, al pie del marco, añade una rama de condición (hasta 10).
  • La cabecera de cada rama de condición tiene botones para subirla, bajarla y quitarla. Reordenar cambia qué rama se comprueba antes; ningún bloque cambia de rama.
  • Quitar una rama vacía la quita sin más. Si tiene bloques, el editor pregunta: Quitar con sus bloques o Conservar los bloques, que quedan en la lección justo detrás del contenido condicional, visibles siempre (nunca pasan a otra rama).
  • Una rama vacía muestra «Esta rama aún no tiene bloques» y el botón Añadir un bloque. Cada rama tiene además su propio punto de inserción.

Meter y sacar bloques

  • Arrastrando: suelta un bloque sobre otro de una rama para ponerlo en su sitio, o sobre la zona de una rama (también vacía) para ponerlo al final. Al arrastrar el marco se mueve el contenido condicional con todas sus ramas.
  • Sin arrastrar (con el teclado o en pantallas estrechas): en la barra del bloque, Mover a… lista cada rama de cada contenido condicional de la lección (con su número si hay varios) y, desde una rama, Fuera del condicional, que lo deja justo detrás. El bloque entra al final de la rama.
  • Subir y Bajar mueven un bloque dentro de su rama. Los bloques de una rama se numeran por rama: «Acciones del bloque 2 de la rama 1».

Borrar, duplicar y plantillas

  • Eliminar el bloque en un contenido condicional con bloques pregunta: Eliminar con sus bloques o Conservar los bloques (quedan en la lección, en su sitio y visibles siempre). Las dos opciones se pueden deshacer con Deshacer.
  • Duplicar el bloque duplica el contenido condicional con todas sus ramas y sus bloques. Un bloque duplicado dentro de una rama se queda en esa rama.
  • Al elegir bloques para una plantilla o para la IA, el contenido condicional se lleva sus bloques; un bloque de una rama no se elige suelto. Una plantilla que pegas desde una rama entra en esa rama.

La condición de cada rama

Editar el bloque abre el panel del contenido condicional, con un apartado por rama de condición:

  • El campo Condición de la rama N, donde se escribe la condición (consulta más abajo «Escribir una condición»). Si no se entiende, debajo sale el motivo y el carácter donde se detuvo, por ejemplo «No se esperaba «)» en el carácter 12»; si se entiende, el resumen en palabras, el mismo de la cabecera del marco.
  • Los avisos de esa rama (consulta «Avisos» a continuación).
  • Un asistente que la escribe por ti. Elige la Simulación (las de esta lección y las de las demás lecciones del contenido que están fuera de toda rama), la Variable (las que declara su paquete, con su tipo, y las del resultado: grade, score, maxScore, ending y kind), la Comparación y el Valor (una casilla para verdadero o falso, un número, un texto para ending y una lista con good, mixed y bad para kind) y pulsa Añadir a la condición. Si ya había algo escrito, elige antes si se une con y (&&, se cumplen las dos) o con o (||, basta con una). Si el paquete no declara sus variables, puedes escribir el nombre a mano, con un aviso de que no se puede comprobar. El asistente escribe la comparación donde tengas el cursor en el campo (o en lugar del texto que tengas seleccionado), deja el cursor justo detrás y te devuelve el foco; si el campo aún no ha tenido el cursor, la añade al final.

Avisos

Lo que haría que una rama no se viera nunca, o que una simulación no funcionara, sale como aviso en el panel y en Comprobaciones, con la etiqueta Contenido. Los avisos nunca impiden guardar, exportar ni compartir:

  • ninguna rama tiene bloques, tampoco Si no;
  • una rama no tiene condición, o tiene una que no se entiende;
  • una condición lee una simulación que no está en el contenido (pasa al copiar entre contenidos) o una variable que su paquete no declara;
  • una condición lee variables de una simulación cuyo paquete no envía su estado (state);
  • una condición usa una variable con un tipo que no admite esa operación, según lo que declara el paquete (por ejemplo, comparar con un número una variable de verdadero o falso);
  • la simulación está después del contenido condicional en el orden de lectura: cuando el alumno llega, aún no la ha jugado;
  • una simulación Evaluable está dentro de una rama, o una simulación de una rama la lee alguna condición.

Un asistente conectado por MCP recibe esos mismos avisos en warnings al crear el bloque, cambiarlo o mover bloques.

Escribir una condición

Una condición es una expresión corta que es verdadera o falsa. Lee variables escritas como simulación.nombre:

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

Variables

NombreQué contieneTipo
gradeLa calificación (0–100) que envió el paquetenúmero
scoreLa puntuación que envió el paquetenúmero
maxScoreLa puntuación máximanúmero
endingEl identificador del final alcanzadotexto
kindgood, mixed o badtexto
cualquier otro nombreUna variable que el paquete guarda en su estado (por ejemplo trust)número o verdadero/falso

grade, score, maxScore, ending y kind están reservados: siempre leen el último resultado que envió el paquete. Los demás nombres son las variables que el paquete declara en su slxd-embed.json; pregunta a quien construyó el paquete cuáles ofrece.

Operadores

QuéCómoEjemplo
Comparar números< <= > >=sim_u1.trust >= 3
Igual / distinto== !=sim_u1.kind != "bad"
Y&&sim_u1.trust >= 3 && sim_u1.reused
O||sim_u1.kind == "good" || sim_u1.grade > 80
No!!sim_u1.reused
Sumar / restar+ -sim_u1.score + sim_u2.score >= 10
Agrupar( )(a.x || b.y) && c.z
  • Los números se escriben con un punto decimal opcional (3, 2.5), sin exponente. Los negativos usan -.
  • Los textos van entre comillas dobles: "good". Dentro, solo \" y \\ son especiales, y no hay saltos de línea.
  • true y false están disponibles como valores.
  • No hay conversiones: no se puede comparar un número con un texto, y un texto solo se compara con otro texto, con == o !=. sim_u1.trust == "3" es un error.
  • Las comparaciones no se encadenan: 1 < sim_u1.trust < 3 es un error; escribe sim_u1.trust > 1 && sim_u1.trust < 3.
  • && y || se detienen en cuanto se conoce la respuesta, como en JavaScript.
  • La expresión entera debe ser verdadera o falsa.

Límites

Una condición mide como máximo 500 caracteres. Si escribes algo que no se entiende, el editor te dice el carácter donde se detuvo.

Varias ramas y «Si no»

Un bloque Contenido condicional puede tener hasta 10 ramas con condición, más la rama Si no, que siempre existe y no tiene condición. Las ramas se comprueban por orden y gana la primera cuya condición se cumple, así que pon primero la más específica:

  1. sim_u1.kind == "good" && sim_u1.trust >= 3 → felicitación
  2. sim_u1.kind == "good" → comentario positivo breve
  3. Si no → refuerzo

Los bloques dentro de una rama son bloques normales: de cualquier tipo y en cualquier número. Las reglas que conviene recordar:

  • Un solo nivel: un bloque Contenido condicional no puede estar dentro de una rama de otro.
  • Una condición puede nombrar hasta 8 simulaciones distintas.
  • Una rama puede estar vacía.

Nunca en exámenes ni en bancos de preguntas. El contenido condicional solo está disponible en lecciones normales. El editor no lo ofrece en exámenes ni en bancos, una lección que lo contenga no se puede convertir en examen ni mover a un banco, y lo mismo ocurre por MCP.

Qué ve el alumno

El alumno solo ve los bloques de la rama que corresponde, en su sitio, como si el bloque Contenido condicional no estuviera. Las demás ramas no existen para él: no cuentan para el progreso, no lo frenan y no envían xAPI.

Algunos detalles:

  • Una rama solo puede cumplirse cuando las simulaciones que lee han terminado. Una simulación termina cuando su paquete avisa de que ha acabado (complete, o un estado final). Hasta entonces esas condiciones son falsas y el alumno ve la rama siguiente o Si no. Si una variable todavía no existe, o tiene un tipo distinto, esa condición también es falsa.
  • Se reevalúa en directo. Si el alumno repite una simulación y la respuesta cambia, la lección se actualiza. Los lectores de pantalla reciben un aviso cortés de que el contenido ha cambiado; el foco no se mueve.
  • Lo ya hecho se conserva. Si la rama visible cambia por encima de donde está el alumno, un bloqueo pendiente dentro de la rama nueva sigue teniendo que cumplirse, y lo que ya había completado sigue completado.
  • Al volver (SCORM): si el alumno dejó la lección dentro de una rama que ya no corresponde, se reanuda al principio de la rama que sí corresponde, o en el siguiente bloque si está vacía.
  • Las variables del paquete se guardan con el progreso del alumno. Si el progreso no cabe en el espacio del LMS, Creator protege las variables que leen las condiciones.

Vista previa

Los autores necesitan ver todas las ramas, no solo la que corresponde a su prueba.

  • En la vista previa, en una versión (instantánea) y en la revisión, la barra tiene el interruptor Mostrar todas las ramas. Con él activado, el reproductor enseña todas las ramas una tras otra, en orden de lectura: las ramas del bloque condicional por orden y después Si no, sin aviso. En la revisión, abrir un comentario de una lección que tiene contenido condicional lo activa.
  • Cada rama lleva delante, solo en esta vista, un rótulo con el resumen en palabras de su condición («Rama 1: se muestra si sim_u1.trust es mayor o igual que 3»), o Si no, y la rama que vería el alumno ahora mismo lleva además una línea que lo dice. El alumno no ve nunca estos rótulos.
  • Los enlaces compartidos no llevan el interruptor: enseñan lo que ve el alumno.

PDF

El PDF es material de consulta sin alumno, así que imprime todas las ramas, en orden de lectura. Delante del primer bloque de cada rama imprime el rótulo «Se muestra si: …» con la condición escrita en palabras, en el idioma del curso (por ejemplo, sim.trust es mayor o igual que 3 y sim.reused es verdadero; si no se puede leer, tal como la escribiste), y «Se muestra si no se cumple ninguna de las anteriores» delante de Si no. Las ramas vacías no se rotulan.

Entender los errores de una condición

El panel señala una condición que no se entiende con el motivo y el carácter donde se detuvo, y avisa de una simulación que no existe en el contenido. Cuando un asistente escribe el bloque por MCP, la condición entera se comprueba además contra las reglas anteriores antes de guardar nada. Errores típicos: Cuando un asistente escribe el bloque por MCP, la condición entera se comprueba además contra las reglas anteriores antes de guardar nada. Errores típicos:

ProblemaEjemploArreglo
Texto comparado con un númerosim_u1.ending == 3sim_u1.ending == "agreement"
Número comparado con un textosim_u1.trust == "3"sim_u1.trust == 3
Variable de verdadero o falso comparada con un númerosim_u1.reused == 3sim_u1.reused
!, && o || sobre un número, o ordenar verdadero y falso!sim_u1.trustsim_u1.trust == 0
! sobre un texto!sim_u1.kindsim_u1.kind != "bad"
Comparación encadenada1 < sim_u1.trust < 3sim_u1.trust > 1 && sim_u1.trust < 3
No es verdadera o falsasim_u1.trust + 1sim_u1.trust + 1 > 3
Simulación que no existe o que está dentro de una ramasim_x.trustusa el identificador de una simulación fuera de toda rama

Si el paquete declara el tipo de sus variables (número o verdadero/falso), el panel y el MCP también comprueban que las uses con ese tipo: sim_u1.reused == 3 es un error si reused es verdadero o falso. Una variable que el paquete no declara no se puede comprobar.

Siguientes pasos

Contenido condicional