Inhaltsverzeichnis

Fragen rotieren

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:

  1. Für die meisten Fälle ist die einfache Lösung Rotation mittels Zufallsgenerator besser geeignet.
  2. Die kompliziertere Lösung zur Rotation mittels ''shuffle()'' wird unten beschrieben.

In jedem Fall legen Sie die Fragen, die rotiert werden sollen, vorab im Fragen-Katalog an.

Rotation mittels Zufallsgenerator

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.

Zufallsgenerator

Fragen präsentieren

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.

Fragen gemeinsam auf einer 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.

Fragen auf separaten Seiten

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.

Rotation mittels shuffle()

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]);

Fragen zusammen mit weiterem Inhalt rotieren

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]);