====== loopPage() ====== ''int **loopPage**(int //Startwert//, int //Endwert//, [int //Inkrement//])'' ''int **loopPage**(int //Wiederholungen//)'' ''mixed **loopPage**(array //Elemente//)'' Wiederholt die Seite -- beginnend mit dem //Startwert// -- in einer Schleife so oft, bis der //Endwert// erreicht ist. Der jeweils aktuelle Wert wird zurückgegeben. * //Startwert//\\ Der Wert beim ersten Durchlauf * //Endwert//\\ Der Wert beim letzten Durchlauf * //Inkrement//\\ (optional) Veränderung des Wertes bei jedem Schleifendurchlauf (Standard: 1) -- mit dem //Inkrement// 0 können Sie eine unendliche Schleife erzeugen, die mittels ''setNextPage('next')'' beendet werden kann. Falls nur ein numerischer Parameter (//Wiederholungen//) angegeben ist, wird die Seite so oft wie angegeben wiederholt. Die Zählvariable beginnt in diesem Fall mit 0. * //Wiederholungen//\\ Anzahl der Wiederholungen Falls nur ein Array als Parameter (//Elemente//) angegeben ist, wird die Seite für jedes Element des Arrays einmal angezeigt und die Funktion ''loopPage()'' gibt jeweils das Element des Arrays zurück. * //Elemente//\\ Elemente, die durchlaufen werden sollen **Hinweis:** Um mehrere Seiten zu wiederholen, verwenden Sie ''[[looptopage]]''. **Hinweis:** Beispiel-Code zur Verwendung finden Sie in der Anleitung zu ''[[looptopage]]''. ===== Anwendungsbeispiele ===== ==== Alle Fragen einer Rubrik in zufälliger Abfolge ==== if (!isset($fragen)) { // Liste aller Fragen aus Rubrik RS $fragen = getQuestions('RS'); // Die Liste der Fragen (Array) mischen und zwischenspeichern shuffle($fragen); registerVariable($fragen); } // Alle Kennungen aus der Liste $fragen abarbeiten $frage = loopPage($fragen); question($frage); ==== Fragen in zufälliger Abfolge präsentieren II ==== // PHP-Code auf einer der ersten Seiten im Fragebogen // Liste mit Fragen erstellen, mischen und zwischenspeichern $fragen = array( 'AB01', 'AB02', 'AB03', 'AB04', 'AB05', 'AB06' ); shuffle($fragen); registerVariable($fragen); // PHP-Code später im Fragebogen $i = loopPage(6); // 6 Wiederholungen - äquivalent zu loopPage(0,5) question($fragen[$i]); In diesem Beispiel wird die Liste der Fragen bereits weiter vorne im Fragebogen definiert und gemischt. Dadurch entfällt die IF-Konstruktion mit ''isset()'', welche im obigen Beispiel ein erneutes Mischen der Liste verhindert. ==== Fragen in zufälliger Abfolge mit Verweildauer ==== **Hinweis:** Weil dieselbe Seite immer wieder angezeigt wird, werden die Antwortzeiten für alle Wiederholungen addiert. Falls Sie die Bearbeitungszeiten getrennt erheben möchten, müssen Sie anstatt ''loopPage()'' mehrere Seiten verwenden. // PHP-Code auf einer der ersten Seiten im Fragebogen // Liste mit Fragen erstellen, mischen und zwischenspeichern $fragen = array( 'AB01', 'AB02', 'AB03', 'AB04', 'AB05', 'AB06' ); shuffle($fragen); registerVariable($fragen); // PHP-Code später im Fragebogen - Seite 21 question($fragen[0]); // PHP-Code auf Seite 22 question($fragen[1]); // u.s.w. // PHP-Code auf Seite 26 question($fragen[5]); ===== Workaround for Seitenabfolge ===== Innerhalb einer Seitenabfolge, die mittels ''setPageOrder()'' definiert wurde, kann ''loopPage()'' nicht verwendet werden. Dies würde die Seitenabfolge abbrechen. Wenn Sie eine Seite innerhalb einer Seitenabfolge wiederholen möchten, dann legen Sie diese Wiederholung bereits in der Seitenabfolge fest. Im folgenden Beispiel wird z.B. die Seite mit der Kennung "loop" viermal wiederholt: setPageOrder(['a1', 'a2', 'a3', 'loop', 'loop', 'loop', 'loop', 'b3', 'b2']); Um zu ermitteln, in welcher Wiederholung sich die Seite gerade befindet, können Sie die Funktion ''loopIndex()'' verwenden. Diese zeigt an, an welcher Stelle der Seitenabfolge Sie gerade sind, wobei mit 0 zu zählen begonnen wird. Auf der Seite "loop" würde sie also die Wert 3, 4, 5 und 6 bekommen. Hier könnte man einfach 3 subtrahieren. Aber wenn die Wiederholung an einer anderen Stelle im Fragebogen erscheint, können Sie mittels ''registerVariable()'' arbeiten. Der folgende Code auf der Seite "loop" würde mit ''$i'' die Wert 0 bis 3 liefern, egal an welcher Stelle die Seite wiederholt wird. // Die aktuelle Position ermitteln $pos = loopIndex(); // Prüfen, ob wir die erste Position dieser Seite schon kennen if (!isset($firstIndex)) { $firstIndex = $pos; registerVariable($firstIndex); } // Die Different in Variable $i speichern // dies entspricht in anderen Codes dem $i = loopPage(...) $i = $pos - $firstIndex; Sollten Sie mehrere (unterschiedliche) Seiten wiederholen, müssen Sie statt ''$firstIndex'' jeweils einen anderen Variablennamen verwenden.