Podmínečné zobrazení

V průběhu vyplňování potřebujete, pokud se na základě dat, která uživatel vyplnil některé otázky nebo celé stránky zobrazí nebo naopak skryjí. Například pokud máte sadu utázek pouze pro ženy, tak tyto otázky budete chtít zobrazit pouze pokud předtím respondent vybral odpověď “žena”.

Podmínky statické

Statické podmínky předpokládají, že data už byla vyplněna na předcházejících stránkách a v tuto chvíli jsou už uloženy v databázi.

Statická podmínka se může týkat celé stránky, nebo se může týkat i jediné otázky.

Pokud se statická podmínka týká celé stránky, tak při nesplnění podmínky se stránka přeskočí. Zde například, pokud na otázku family_status byla vybrána odpověď married (ženatý) nebo in_relationship (ve vztahu), tak se zobrazí modul KMSS, což je dotazník Kansas Marital Satisfaction Scale. Pokud vybere respondent jinou hodnotu, stránka se přeskočí.

{
  "type": "page",
  "id": "page-kmss",
  "display_conditions": [
    {
      "field": "family_status",
      "value_in": [
        "married",
        "in_relationship"
      ]
    }
  ],
  "items": [
    {
      "name": "KMSS",
      "type": "import",
      "source": "KMSS"
    }
  ]
}


Pro jednotlivou otázku by stejná podmínka vypada následovně:


{
  "name": "spokojenost ve vztahu",
  "type": "single_choice_radio",
  "text": "Jste ve vztahu spokojeni?",
  "values": {
    "0": "Ne",
    "1": "Ano"
  },
  "condition": [
    {
      "field": "family_status",
      "value_in": [
        "married",
        "in_relationship"
      ]
    }
  ]
}


Jsou podporovány následující typy podmínek:

  • value: "1" - hodnota musí být 1
  • value_in: ["1", "2", "3", "4"] - hodnota musí nabývat jedné z hodnot, uvedených v poli
  • value_not: "1" - hodnot NENÍ 1
  • value_not_in: ["1", "2", "3", "4"] - hodnota NESMÍ nabývat žádné z hodnot v poli
  • tolerant: true|false - výchozí hodnota je false. Standardně pokud systém vyhodnocuje podmínku a nenajde příslušnou proměnnou v už uložených datech respondenta, tak skončí s chybou ConfigurationSystemException. V některých situací je ale žádoucí, aby podmínka byla tolerantní, takže pokud je nastavena hodnota tolerant: true, tak potom systém tuto podmínku vyhodnotí jako nesplněnou, pokud nenajde zdrojová data a nebude vyhazovat chybu.

Parametr display_conditions nebo conditions je pole, takže je možné zadat více podmínek. Vyphodnocování probíhá v pořadí jak jsou podmínky zadány a pro zobrazení otázky nebo stránky stačí, pokud jedna podmínka je vyhodnocena pozitivně. Podmínky jsou tedy ve vztahu nebo.

Podmínky jsou vyhodnocovány i při odeslání, takže pokud je otázka zobrazena, tak se kontroluje i jestli je vyplněná.

Podmínky dynamické

Dynammické podmínky se používají, pokud se dynamicky mění zobrazení formuláře přímo v prohlížeči, tj. při zaškrtnutí některé otázky se přímo zobrazí nebo naopak skryjí.

Jednoduchá uzkázka:

{
  "type": "page",
  "id": "page101",
  "items": [
    {
      "name": "sex",
      "type": "single_choice_radio",
      "text": "Jste:",
      "values": {
        "0": "Muž",
        "1": "Žena"
      }
    },
    {
      "name": "sex_confirmation",
      "type": "single_choice_radio",
      "text": "Skutečně jste žena?",
      "values": {
        "0": "Ano",
        "1": "Ne"
      },
      "display_if": {
        "what": "sex",
        "value": "1"
      }
    },
    {
      "type": "statement",
      "name": "final",
      "text": "End of All Questions."
    }
  ]
}

Na této stránkce, pokud vybereme odpověď Muž, tak se nezobrazí další otázka:

Úvod dotazníku

Pokud vybereme odpověď Žena, tak se zobrazí doplňující otázka:

Úvod dotazníku

Dynamická podmínka se vyhodnocuje i při odeslání. Pokud je splněná, tak se u zobrazené otázky kontroluje, jestli je vyplněná. Takže za těchto okolností, pokud respondent vybere že je Žena a nedoplní, jestli je skutečně žena, tak mu systém nedovolí pokračovat na další stránku.

Úvod dotazníku

Je možné zaráz odkazovat více hodnot. Tyto hodnoty potom musíme uvést jako pole. Můžeme odkazovat na různé hodnoty pro single_choice nebo na více hodnot multiple_choice. Např:

{
  "display_if": {
    "what": "nemoci",
    "value": [
      "1",
      "2",
      "3",
      "4"
    ]
  }
}

Přeskakování stránek

Poslední možností zpracování podmínek je vyhodnocení stránky po jejím uložení a následně přeskočení na jinou stránku. Klíčový je parametr jump, který určuje na kterou stránku, označenou pomocí id: parametru po vyplnění a úspěšném vyhodnocení podmínky systém přeskočí.

{
  "pages": [
    {
      "type": "page",
      "id": "page_1",
      "items": [
        {
          "name": "sex",
          "type": "single_choice_radio",
          "text": "Jste:",
          "values": {
            "m": "Muž",
            "f": "Žena"
          }
        }
      ],
      "conditions": [
        {
          "field": "sex",
          "value": "m",
          "jump": "page_for_all"
        }
      ]
    },
    {
      "type": "page",
      "id": "page_for_women",
      "items": [
        {
          "name": "question_for_women%_1",
          "type": "single_choice_radio",
          "text": "1. Otázka pouze proženy",
          "values": {
            "0": "Ano",
            "1": "Ne"
          }
        },
        {
          "name": "question_for_women_2",
          "type": "single_choice_radio",
          "text": "2. Otázka pouze proženy",
          "values": {
            "0": "Ano",
            "1": "Ne"
          }
        }
      ]
    },
    {
      "type": "page",
      "id": "page_for_all",
      "items": [
        {
          "name": "question_for_everyone",
          "type": "single_choice_radio",
          "text": "Otázka pro všechny",
          "values": {
            "0": "Ano",
            "1": "Ne"
          }
        }
      ]
    }
  ]
}


V tomto dotazníku pokud respondent vyplní hodnotu “Muž”, tak přeskočí na stránku page_for_all. Pokud vybere hodnotu žena, tak se zobrazí stránka s otázkami “1. a 2. otázka pouze pro ženy”.

Pomocí této logiky jde realizovat velmi složité postupy pro řízení průchodu dotazníkem. Nicméně oproti výše uvedeným metodám display_conditions je tento způsob poměrně složitý a komplikovaný na otestování.


Naposledy upraveno 08.04.2021: tolerant conditions! (859321e)