Dies ist eine alte Version des Dokuments!
Dieses Kapitel beschreibt, wie man die einzelnen Items in einer Frage in einer zufälligen Reihenfolge präsentieren kann. Dabei gibt es verschiedene Möglichkeiten der Umsetzung, die in diesem Kapitel erklärt werden.
Die Randomisierung oder Rotation von Items in einer Frage wird wie folgt aktiviert:
Falls einzelne Items (z.B. ein „Sonstiges“ mit Texteingabe) von der Rotation ausgenommen werden sollen, öffnen Sie dieses Item im Fragenkatalog oder mit dem -Symbol und aktiviert die Option Dieses Item beim Mischen der Items ausnehmen.
Hinweis: Die Rotation betrifft natürlich nur die Darstellung im Fragebogen. Die Antworten des Befragten auf ein bestimmtes Item werden immer unter derselben Kennung gespeichert.
Hinweis: In welcher Reihenfolge die Items im Fragebogen angezeigt werden, wird nicht im Datensatz abgespeichert. Falls Sie diese Information benötigen, rotieren Sie die Items mittels PHP-Code (s. unten).
Sie können die Items bzw. Optionen einer Frage auch mittels PHP-Code rotieren. Dazu wird zunächst mittels getItems()
eine Liste der Items/Optionen abgerufen, dann per shuffle()
gemischt und schließlich wird die Frage mittels question()
mit der gewünschten Item-Abfolge als Parameter angezeigt.
$items = getItems('AB01', 'all'); shuffle($items); question('AB01', $items);
Dieses Vorgehen bietet die Möglichkeit, die angezeigte Reihenfolge im Datensatz abzuspeichern. Dies erfolgt mithilfe interner Variablen und dem Befehl put()
.
Beachten Sie allerdings, dass sich hier (anders als bei der Rotation per Knopfdruck) die Reihenfolge ändert, sobald der Teilnehmer die Seite neu lädt oder den Zurück-Knopf im Fragebogen verwendet. Verwenden Sie registerVarible()
und isset()
, um dies zu verhindern. So wird die Zufallsabfolge nur beim ersten Laden der Seite gewürfelt – beim nächsten laden ist die Variable $itemsAB
bereits gesetzt (isset()
steht für „is set“) und der Teil wird übersprungen.
if (!isset($itemsAB)) { $itemsAB = getItems('AB01', 'all'); shuffle($itemsAB); registerVariable($itemsAB); } question('AB01', $itemsAB);
Hinweis: Nachdem eine mittels registerVariable()
gespeicherte Variable auf allen Seiten des Fragebogens verfügbar ist, können Sie denselben PHP-Code nicht verwenden, um die Items einer anderen Frage zu rotieren. Denn die Variable ist ja bereits gesetzt. Verwenden Sie für die andere Frage einfach einen anderen Variablen-Namen (z.B. $itemsCD
).
Mit der manuellen Rotation (s. oben) können Sie in zwei oder mehr Fragen dieselbe rotierte Item-Abfolge verwenden. Falls die Fragen auf unterschiedlichen Seiten stehen, verwenden Sie auch hierfür registerVariable()
– genau wie im Beispiel oben – um die Abfolge für weitere PHP-Code-Elemente verfügbar zu machen.
if (!isset($itemsAB)) { $itemsAB = getItems('AB01', 'all'); shuffle($itemsAB); registerVariable($itemsAB); } question('AB01', $itemsAB);
Auf derselben oder späteren Seiten kann die Reihenfolge, wie sie in $itemsAB
gespeichert ist, einfach für andere Fragen verwendet werden.
question('AB02', $itemsAB);
Falls Sie in einer Frage sehr viele Items haben, möchten Sie diese vielleicht auf mehrere Seiten verteilen. Normalerweise würden Sie das erledigen, indem Sie die Frage beim Fragebogen zusammenstellen mehrfach einfügen und jeweils bei den Anzeige-Einstellungen (-Knopf) unterschiedliche Items angeben, z.B. „1-10“, „11-20“, etc.
Falls Sie die Verteilung der Items mit einer Randomisierung kombinieren möchten, benötigen Sie ein paar Zeilen PHP-Code.
// Das isset() vermeidet, dass die Rotation etwa wg. fehlenden Antworten verändert wird if (!isset($itemsAB01)) { // Alle Items der Frage AB01 auflisten $itemsAB01 = getItems('AB01', 'all'); // Liste Mischen shuffle($itemsAB01); // Die Liste in Teillisten à 20 Items teilen $itemsAB01 = array_chunk($itemsAB01, 20); // Die Variable für andere Seiten verfügbar machen registerVariable($itemsAB01); } // Die Items über mehrere Seiten verteilt anzeigen $i = loopPage(count($itemsAB01)); question('AB01', $itemsAB01[$i]);
Mit der Funktion loopPage()
kann man innerhalb einer Fragebogen-Seite mehrere unterschiedliche Seiten anzeigen. Alternativ zu den letzten beiden Zeilen kann man die benötigte Anzahl an Seiten im Fragebogen einfügen und jeweils den entsprechenden Item-Bereich anzeigen:
// Erste Seite question('AB01', $itemsAB01[0]); // Zweite Seite question('AB01', $itemsAB01[1]); // Dritte Seite question('AB01', $itemsAB01[2]);
Beachten Sie bitte, dass sich auf den Seiten nur noch der Index in eckigen Klammern ändert. Der Index beginnt bei 0, nicht bei 1 (s. Beispiel oben).
Wichtig: Wenn man beim Fragebogen zusammenstellen direkt eine Seite mit Items startet, dann erhält man die Fehlermeldung, die Variable $itemsAB01
sei unbekannt. Man muss zum Testen jeweils ab der Seite starten, wo die Randomisierung beginnt und damit die Variable $itemsAB01
definiert wird.