Übersetzungen dieser Seite:
 

Dies ist eine alte Version des Dokuments!


loopToPage()

int loopToPage(string Seitenkennung, int Wiederholungen)

Die Funktion loopToPage() sorgt dafür, dass die Seiten von der aktuellen Seite zur Seite mit der Kennung Seitenkennung mehrfach angezeigt werden und zwar so häufig, wie in Wiederholungen angegeben.

Die Funktion gibt an, wie häufig die Seiten bereits wiederholt wurden. Beim ersten Durchlauf also 0, beim zweiten Durchlauf 1 u.s.w.

Wichtig: Die Funktion loopToPage() kann nicht parallel mit loopPage(), setNextPage() oder setPageOrder() verwendet werden.

  • Seitenkennung Die Kennung der letzten Seite der Abfolge von Seiten, die wiederholt werden sollen (Seitenkennung).
  • Wiederholungen Die Anzahl, wie oft die Abfolge der Seiten wiederholt werden soll.

Hinweis: Verwenden Sie die Funktion loopIndex(), um innerhalb der Wiederholungen zu ermitteln, welche Wiederholung gerade läuft.

Hinweis: Die Funktion loopToPage() erlaubt die Wiederholung von gleichartigen „Frageblöcken“, wobei die Fragen entsprechend oft im Fragenkatalog angelegt werden müssen. Wenn mehrere Fragen mehrfach wiederholt werden sollen, kann eine Multi-Level Struktur die bessere Lösung darstellen.

Beispiel: Seite mit unterschiedlichen Fragen wiederholen

Sie möchten im Fragebogen die Seiten 5 bis 8 insgesamt 3-mal wiederholen. Dabei sollen jeweils andere Fragen angezeigt werden.

  • Geben Sie der Seite 8 die Kennung „loopend“ (Sie können die Kennung frei wählen)
  • Platzieren Sie auf Seite 5 den folgenden PHP-Code (Einführung in PHP-Code)
loopToPage('loopend', 3);

Nun möchten Sie, dass im ersten Durchgang die Fragen A001 bis A005 angezeigt werden. Im zweiten Durchgang sollten die Fragen A101 bis A105 angezeigt werden und im dritten Durchgang die Fragen A201 bis A205 (die Fragen wurden in Rubrik A0 angelegt und anschließend wurde die Rubrik 2-mal kopiert, indem sie als Datei heruntergeladen und dann importiert wurde).

Platzieren Sie auf Seite 5 folgenden PHP-Code. Er erstellt ein Array, welches die Liste der zu zeigenden Fragen enthält und macht das Array mittels registerVariable() für die folgenden Seiten verfügbar.

$fragen = arrray(
  0 => array('A001', 'A002', 'A003', 'A004', 'A005'),
  1 => array('A101', 'A102', 'A103', 'A104', 'A105'),
  2 => array('A201', 'A202', 'A203', 'A204', 'A205')
);
registerVariable($fragen);

Um nun die ersten beiden Fragen auf der ersten Seite (Nr. 5) anzuzeigen, ergänzen Sie den Code von loopPage() wie folgt:

$i = loopToPage('loopend', 3);
// Nun den Teil aus $fragen abrufen, der für die jeweilige Runde relevant ist
$set = $fragen[$i];
// Die ersten beiden Fragen davon anzeigen
question($set[0]);
question($set[1]);

Um dann auf Seiten 6 die nächste Frage anzuzeigen, platzieren Sie auf Seite 6 folgenden PHP-Code. Der Befehl loopPage() verrät, in welcher Runde die Seite angezeigt wird. Der restliche Code ist äquivalent zum obigen.

$i = loopIndex();
$set = $fragen[$i];
// Die nächste Frage (Index 2) anzeigen
question($set[2]);

Den obigen Code wiederholen Sie auf Seite 7 und 8. Tauschen Sie dabei die 2 in der letzten Zeile durch 3 bzw. 4 aus.

Beispiel: Variable Anzahl an Wiederholungen

Sie möchten, wie in Beispiel 1, die Seiten 5 bis 8 wiederholen und haben Seite 8 dafür die Kennung „loopend“ gegeben. Vorab haben Sie auf 3 mit einer Frage vom Typ „offene Nennungen“ (ON01) bis zu 10 Markennennungen abgefragt – und für jede Nennung des Teilnehmers sollen nun die Seiten wiederholt werden.

Im Fragenkatalog haben Sie die Rubrik A0 mit den entsprechenden Fragen 9-mal, kopiert (Rubriken A1 bis A9). Entsprechend werden die Fragen auf Seite 5 erstmal wie folgt definiert (s. Beispiel 1):

$fragen = arrray(
  0 => array('A001', 'A002', 'A003', 'A004', 'A005'),
  1 => array('A101', 'A102', 'A103', 'A104', 'A105'),
  2 => array('A201', 'A202', 'A203', 'A204', 'A205'),
  3 => array('A301', 'A302', 'A303', 'A304', 'A305'),
  4 => array('A401', 'A402', 'A403', 'A404', 'A405'),
  5 => array('A501', 'A502', 'A503', 'A504', 'A505'),
  6 => array('A601', 'A602', 'A603', 'A604', 'A605'),
  7 => array('A701', 'A702', 'A703', 'A704', 'A705'),
  8 => array('A801', 'A802', 'A803', 'A804', 'A805'),
  9 => array('A901', 'A902', 'A903', 'A904', 'A905')
);
registerVariable($fragen);

Mit eine FOR-Schleife lässt sich dasselbe Ergebnis auch eleganter erzielen. Alternativ können Sie also folgenden PHP-Code verwenden:

$fragen = array();
// Alle 10 Wiederholungen anlegen (Index 0 bis 9)
for ($i=0; $i<=9; $i++) {
  $rubrik = 'A'.$i;  // A0 bis A9
  $fragen[$i] = array();
  // Die Fragen 01 bis 05 in die jeweilige Teil-Liste schreiben
  for ($f=1; $f<=5; $f++) {
    $fragen[$i][$f-1] = $rubrik.sprintf('%02d', $f);
  }
}

Nun muss auf Seite 5 geklärt werden, welche Felder der „offenen Nennungen“ der Teilnehmer überhaupt ausgefüllt hat. Diese Liste wird mit registerVariable() für nachfolgende Seiten verfügbar gemacht. Zugleich wird mittels count() die Länge der Liste ermittelt, denn diese entspricht der Anzahl der Wiederholungen. Mit loopToPage() wird dann die Wiederholung der Seiten vorbereitet.

$items = getItems('ON01', 'valid');
registerVariable($items);
$i = loopToPage('loopend', count($items));

Jetzt muss aus $items und der Nummer der Wiederholung noch das korrekte Set (also die Teilliste) aus der Liste $fragen ermittelt werden. Aus dieser Teil-Liste können dann z.B. die ersten beiden Fragen auf Seite 5 angezeigt werden:

$id = $items[$i];  // Das $i wurde durch loopToPage() ermittelt, s. oben
$set = $fragen[$id];
// Wie in Beispiel 1
question($set[0]);
question($set[1]);

Hier noch einmal der komplette PHP-Code für Seite 5:

$fragen = arrray(
  0 => array('A001', 'A002', 'A003', 'A004', 'A005'),
  1 => array('A101', 'A102', 'A103', 'A104', 'A105'),
  2 => array('A201', 'A202', 'A203', 'A204', 'A205'),
  3 => array('A301', 'A302', 'A303', 'A304', 'A305'),
  4 => array('A401', 'A402', 'A403', 'A404', 'A405'),
  5 => array('A501', 'A502', 'A503', 'A504', 'A505'),
  6 => array('A601', 'A602', 'A603', 'A604', 'A605'),
  7 => array('A701', 'A702', 'A703', 'A704', 'A705'),
  8 => array('A801', 'A802', 'A803', 'A804', 'A805'),
  9 => array('A901', 'A902', 'A903', 'A904', 'A905')
);
registerVariable($fragen);
 
$items = getItems('ON01', 'valid');
registerVariable($items);
$i = loopToPage('loopend', count($items));
 
$id = $items[$i];
$set = $fragen[$id];
question($set[0]);
question($set[1]);

Auf den Seite 5 bis 8 wird nur der untere Teil mit leichten Modifikationen wiederholt:

$i = loopIndex();
$id = $items[$i];
$set = $fragen[$id];
question($set[2]);  // Index 2 zeigt Frage 3, denn die Zählung des Index beginnt bei 0

Beispiel: Frageblöcke wiederholen

Ein Block mit 5 Fragen (über 3 Seiten „blockStart“ bis „blockEnd“) soll für jedes Geschwister eines Teilnehmers wiederholt werden. Anschließend geht es mit der Seite „demografie“ weiter.

Hinweis: Dieses Beispiel ist dem ersten vergleichbar, geht aber davon aus, dass Sie für jede Wiederholung eine gleichartige Rubrik im Fragebogen vorliegen haben (beim ersten Beispiel können die Fragen einer Wiederholung aus unterschiedlichen Rubriken oder alle aus derselben stammen).

Als Vorbereitung wurden die 5 Fragen in Rubrik „G1“ angelegt und die Rubrik wurde 4-mal kopiert („G2“ bis „G5“), um Fälle bis zu 5 Geschwistern abbilden zu können. Darüber hinaus wurde in Frage GS01 abgefragt, wie viele Geschwister eine Person hat (1=ein Geschwister, 5=Fünf oder mehr Geschwister, -1=keine Geschwister).

Auf der ersten Seite des „Fragenblocks“ („blockStart“) wird zunächst die Anzahl der Geschwister ermittelt und dementsprechend loopToPage() aufgerufen.

$anzahl = value('GS01');
// Filter: Keine Geschwister
if ($anzahl < 0) {
  goToPage('demografie');
}
// Frageblock wiederholen
loopToPage('blockEnd', $anzahl);
// Definition der Rubriken
$rubriken = array('G1', 'G2', 'G3', 'G4', 'G5');
registerVariable($rubriken);

Auf der ersten Seite werden nun die Fragen 01 und 02 aus der jeweiligen Rubrik angezeigt.

$i = loopIndex();
$rubrik = $rubriken[$i];
 
question(id($rubrik, 1));  // Fragt G101, G201, G301, ...
question(id($rubrik, 2));  // Fragt G102, G202, G302, ...

Solch ein Code findet sich entsprechend auf Seite 2 des Blocks, welcher die Frage 03 aus der Rubrik zeigt.

$i = loopIndex();
$rubrik = $rubriken[$i];
 
question(id($rubrik, 3));  // Fragt G103, G203, G303, ...

Und auf der dritten und letzten Seite schreiben wir es für die Fragen 04 und 05 etwas kompakter:

$rubrik = $rubriken[loopIndex()];
 
question(id($rubrik, 4));
question(id($rubrik, 5));
de/create/functions/looptopage.1539155574.txt.gz · Zuletzt geändert: 10.10.2018 09:12 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