Übersetzungen dieser Seite:
 

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.

de/create/functions/looppage.txt · Zuletzt geändert: 21.11.2022 20:06 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