Im nachfolgenden wird erklärt, wie die Reihenfolge ganzer Fragen rotiert wird. Falls Sie bisher noch nie mit PHP-Code gearbeitet haben, lesen Sie bitte die Anleitung Einführung in PHP-Code.
Tipp: Falls Sie bestimmte Fragen stets gemeinsam anzeigen möchten, folgenden Sie der Anleitung Seiten rotieren.
Tipp: Falls Sie nur die Items einer Frage rotieren möchten, lesen Sie bitte das Kapitel Items rotieren.
Für die Rotation von Fragen gibt es zwei Möglichkeiten:
In jedem Fall legen Sie die Fragen, die rotiert werden sollen, vorab im Fragen-Katalog an.
Legen Sie im Fragenkatalog einen Zufallsgenerator an. Im Zufallsgenerator geben Sie als Inhalt (Zettel) die Kennungen der Fragen ein, die rotiert abgefragt werden sollen.
AB01 AB02 CC03 DE01 DE02
Tragen Sie außerdem unter Weitere Einstellungen im Karteireiter Ziehung bei Anzahl Zettel pro Interview die Anzahl der Fragen ein, die rotiert werden sollen. Im obigen Beispiel mit 5 Fragen also eine 5.
Wichtig! Die Fragen, die in zufälliger Abfolge dargeboten werden sollen, werden nicht in den Fragebogen hineingezogen!
Stattdessen wird beim Fragebogen zusammenstellen der Zufallsgenerator im Fragebogen platziert und darunter ein PHP-Code. Wie genau der PHP-Code aussieht, hängt davon ab, ob die Fragen gemeinsam auf einer Seite erscheinen sollen oder getrennt auf separaten Seiten.
Platzieren Sie den Zufallsgenerator und den PHP-Code an der Stelle im Fragebogen, wo die Fragen angezeigt werden sollen. Egal, ob Sie die Fragen gemeinsam oder auf separaten Seiten anzeigen, benötigen Sie beim Fragebogen zusammenstellen dafür nur eine einzige Seite.
Oben auf der Seite platzieren Sie den Zufallsgenerator (im folgenden Beispiel hat dieser die Kennung RG01). Darunter folgenden PHP-Code:
$fragen = valueList('RG01', NULL, 'label'); foreach ($fragen as $kennung) { question($kennung); }
Mit der Funktion valueList()
wird die vom Zufallsgenerator mit der Kennung „RG01“ gezogene und gemischte Fragen-Liste abgerufen und in die Variable $fragen
gespeichert.
Die foreach
-Schleife ruft dann automatisch für jede Fragekennung die Funktion question()
auf, welche die Frage anzeigt. Das bedeutet, dass Sie die Fragen nicht mehr extra eingeben müssen. Sie können den PHP-Code genau so nutzen und müssen nur die Fragekennung Ihres Zufallsgenerators eintragen.
Um die Fragen getrennt auf einzelnen Seiten anzuzeigen, verwenden Sie im PHP-Code anstatt einer foreach
-Schleife den Befehl loopPage()
.
$fragen = valueList('RG01', NULL, 'label'); $kennung = loopPage($fragen); question($kennung);
Damit haben Sie die rotierte Abfolge der Fragen bereits gewährleistet. Außerdem speichert der Zufallsgenerator automatisch die Präsentationsfolge. Der folgende Teil der Anleitung erklärt eine alternative Lösung.
Die Rotation von Fragen ist im Prinzip auch ohne Zufallsgenerator mit dem PHP-Befehl shuffle()
möglich. In diesem Fall wird die Präsentations-Reihenfolge nicht gespeichert.
Das folgende Beispiel zeigt, wie man die Reihenfolge von 5 Fragen auf einer Seite im Fragebogen rotieren kann (zur Erklärung von Arrays s. Items in eine anderen Frage übernehmen).
// Teil 1: Liste der Fragen erstellen und mischen if (!isset($fragen)) { // Liste der Frage-Kennungen definieren $fragen = [ 'AB01', 'AB02', 'CC03', 'DE01', 'DE02' ]; // Die Liste zufällig mischen shuffle($fragen); // Die Rotation für eine eventuelle Wiederholung der Seite zwischenspeichern registerVariable($fragen); } // Teil 2: Fragen anzeigen foreach ($fragen as $kennung) { question($kennung); }
Die IF-Konstruktion in Teil 1 in Kombination mit isset()
und registerVariable()
ist dafür zuständig, dass die Rotation im gesamten Interview nur ein einziges Mal vorgenommen wird. Das ist wichtig, wenn die Seite erneut aufgerufen wird (z.B. weil eine Frage nicht beantwortet wurde oder weil Sie einen „Zurück“-Knopf erlauben) oder wenn die Fragen auf getrennten Seiten präsentiert werden sollen.
Hinweis: Falls Sie derartige PHP-Codes an unterschiedlichen Stellen im Fragebogen verwenden, dann verwenden Sie für die Liste mit den Fragen (oben: $fragen
) jeweils einen anderen Variablennamen (z.B. $fragen1
, $fragen2
, $fragen3
). Das isset()
sorgt ansonsten dafür, dass keine neue Fragen-Liste definiert wird.
Falls Sie die Fragen getrennt auf separaten Seiten anzeigen möchten, ändern Sie den zweiten Teil wie folgt.
// Teil 2: Fragen anzeigen $i = loopPage(count($fragen)); question($fragen[$i]);
Einen Schritt weiter muss man gehen, um weitere Daten (z.B. ein Bild als Stimulus) mit den Fragen zusammen zu rotieren. Wenn also vor Frage 1 immer „bild1.png“ und vor Frage 2 immer „bild2.gif“ angezeigt werden soll. Aber vom Prinzip her ändert sich nichts. Im folgenden Beispiel zeigt jede Seite nur eine Kombination aus Bild und Frage.
Tipp: Wer weniger programmieren möchte, findet in der Anleitung Seiten rotieren eine einfachere Lösung.
if (!isset($blocks)) { // Liste mit Frage-Kennungen und zugehörigen Bildern $blocks = [ ['AB01', 'bild1.png'], ['AB02', 'bild2.gif'], ['AB03', 'bild3.jpg'], ['AB04', 'bild4.png'] ]; // Die Liste mischen shuffle($blocks); // Die Listen auf allen Seiten verfügbar machen registerVariable($blocks); } // Anzeige der Blöcke $i = loopPage(count($blocks)); // Bild anzeigen html('<p><img src="'.$blocks[$i][1].'" alt="Wahlplakat"></p>'); // Frage anzeigen question($blocks[$i][0]);