Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
de:create:functions:looppage [27.07.2019 22:45] adminde:create:functions:looppage [21.11.2022 20:06] (aktuell) – Workaround für setPageOrder() admin
Zeile 4: Zeile 4:
  
 ''int **loopPage**(int //Wiederholungen//)'' ''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. Wiederholt die Seite -- beginnend mit dem //Startwert// -- in einer Schleife so oft, bis der //Endwert// erreicht ist. Der jeweils aktuelle Wert wird zurückgegeben.
Zeile 11: Zeile 13:
   * //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.   * //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 Parameter (//Wiederholungen//) angegeben ist, wird die Seite so oft wie angegeben wiederholt. Die Zählvariable beginnt in diesem Fall mit 0.+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   * //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:** Um mehrere Seiten zu wiederholen, verwenden Sie ''[[looptopage]]''.
Zeile 19: Zeile 26:
 **Hinweis:** Beispiel-Code zur Verwendung finden Sie in der Anleitung zu ''[[looptopage]]''. **Hinweis:** Beispiel-Code zur Verwendung finden Sie in der Anleitung zu ''[[looptopage]]''.
  
-===== Beispiel =====+===== Anwendungsbeispiele ===== 
 + 
 +==== Alle Fragen einer Rubrik in zufälliger Abfolge ==== 
 + 
 +<code php> 
 +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); 
 +</code> 
 + 
 + 
 +==== Fragen in zufälliger Abfolge präsentieren II ====
  
 <code php>// PHP-Code auf einer der ersten Seiten im Fragebogen <code php>// PHP-Code auf einer der ersten Seiten im Fragebogen
Zeile 34: Zeile 59:
 question($fragen[$i]); question($fragen[$i]);
 </code> </code>
 +
 +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. **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.
 +
 +<code php>// 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);</code>
  
 <code php>// PHP-Code später im Fragebogen - Seite 21 <code php>// PHP-Code später im Fragebogen - Seite 21
Zeile 48: Zeile 87:
 question($fragen[5]); question($fragen[5]);
 </code> </code>
 +
 +
 +===== 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:
 +
 +<code php>
 +setPageOrder(['a1', 'a2', 'a3', 'loop', 'loop', 'loop', 'loop', 'b3', 'b2']);
 +</code>
 +
 +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.
 +
 +<code php>
 +// 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;
 +</code>
 +
 +Sollten Sie mehrere (unterschiedliche) Seiten wiederholen, müssen Sie statt ''$firstIndex'' jeweils einen anderen Variablennamen verwenden.
de/create/functions/looppage.1564260302.txt.gz · Zuletzt geändert: 27.07.2019 22:45 von admin
 
Falls nicht anders bezeichnet, ist der Inhalt dieses Wikis unter der folgenden Lizenz veröffentlicht: CC Attribution-Share Alike 4.0 International
Driven by DokuWiki