Übersetzungen dieser Seite:
 

Dies ist eine alte Version des Dokuments!


Inhaltsverzeichnis

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 auf anderen Seiten der Abfolge zu ermitteln, wie häufig die Seiten bereits wiederholt wurden.

Beispiel 1

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 2

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
de/create/functions/looptopage.1532372897.txt.gz · Zuletzt geändert: 23.07.2018 21:08 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