Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
Letzte ÜberarbeitungBeide Seiten der Revision
de:create:functions:setpageorder [14.11.2016 19:36] – 1 anselm.von.schelihade:create:functions:setpageorder [19.12.2017 09:05] – [PHP-Code] admin
Zeile 3: Zeile 3:
 Normalerweise werden die Seiten im Fragebogen von der ersten bis zur letzten Seite sequenziell abgearbeitet, falls diese Reihenfolge nicht durch ''[[:de:create:functions:setnextpage|setNextPage()]]'' oder ''[[:de:create:functions:gotopage|goToPage()]]'' unterbrochen wird. Normalerweise werden die Seiten im Fragebogen von der ersten bis zur letzten Seite sequenziell abgearbeitet, falls diese Reihenfolge nicht durch ''[[:de:create:functions:setnextpage|setNextPage()]]'' oder ''[[:de:create:functions:gotopage|goToPage()]]'' unterbrochen wird.
  
-Mit der Funktion ''setPageOrder()'' lässt sich von vornherein eine andere Seitenabfolge festlegen. Dies kann zu einem beliebigen Zeitpunkt im Fragebogen geschehen. Die neue //Seitenabfolge// wird ab den nächsten Klick auf "Weiter" verwendet (der Fragebogen startet also in jedem Fall mit Seite 1).+Mit der Funktion ''setPageOrder()'' lässt sich von vornherein eine andere Seitenabfolge festlegen. Dies kann zu einem beliebigen Zeitpunkt im Fragebogen geschehen. Die neue //Seitenabfolge// wird ab den nächsten Klick auf "Weiterverwendet (der Fragebogen startet also in jedem Fall mit Seite 1).
  
 ''void **setPageOrder**(mixed //Seitenabfolge//)'' ''void **setPageOrder**(mixed //Seitenabfolge//)''
Zeile 17: Zeile 17:
 |'''pageA-pageD,pageE,pageC,end'''|Zeigt zunächst alle Seiten von ''pageA'' bis ''pageD'', dann nacheinander die Seiten ''pageE'' und ''pageC'' und beendet dann den Fragebogen mit der letzten Seite.| |'''pageA-pageD,pageE,pageC,end'''|Zeigt zunächst alle Seiten von ''pageA'' bis ''pageD'', dann nacheinander die Seiten ''pageE'' und ''pageC'' und beendet dann den Fragebogen mit der letzten Seite.|
  
-Nachdem die definierte Seitenabfolge abgearbeitet wurde, wird die Seite angezeigt, die in der "normalen" Abfolge auf die letzte Seite der Seitenabfolge folgt.+Nachdem die definierte Seitenabfolge abgearbeitet wurde, wird die Seite angezeigt, die in der "normalenAbfolge auf die letzte Seite der Seitenabfolge folgt.
  
 **Wichtig:** Die Befehle ''setNextPage()'', ''loopPage()'' und ''setPageOrder()'' unterbrechen eine Seitenabfolge: **Wichtig:** Die Befehle ''setNextPage()'', ''loopPage()'' und ''setPageOrder()'' unterbrechen eine Seitenabfolge:
  
-  * Der Befehl ''setNextPage()'' unterbricht eine Seitenabfolge und kehrt nach der angegeben Seite zur "normalen" Seitenfolge zurück. +  * Der Befehl ''setNextPage()'' unterbricht eine Seitenabfolge und kehrt nach der angegeben Seite zur "normalenSeitenfolge zurück. 
-  * Der Befehl ''loopPage()'' unterbricht eine Seitenabfolge und kehrt nach der wiederholten Seite zur "normalen" Seitenfolge zurück. +  * Der Befehl ''loopPage()'' unterbricht eine Seitenabfolge und kehrt nach der wiederholten Seite zur "normalenSeitenfolge zurück. 
-  * Wird innerhalb einer Seitenabfolge eine neue Seitenabfolge mittels ''setPageOrder()'' definiert, so wird die aktuelle Seitenabfolge unterbrochen und die neue Seitenabfolge verwendet. Nach Abschluss der neuen Seitenabfolge wird mit der "normalen" Seitenabfolge fortgesetzt.+  * Wird innerhalb einer Seitenabfolge eine neue Seitenabfolge mittels ''setPageOrder()'' definiert, so wird die aktuelle Seitenabfolge unterbrochen und die neue Seitenabfolge verwendet. Nach Abschluss der neuen Seitenabfolge wird mit der "normalenSeitenabfolge fortgesetzt.
  
-**Hinweis:** Innerhalb der Seitenabfolge können Filter mittels ''goToPage()'' eingesetzt werden. Falls der Filter zu einer Seite innerhalb der laufenden Seitenabfolge springt, wird die Seitenfolge dort fortgesetzt. Falls der Filter auf eine Seite außerhalb der Seitenabfolge springt, wird die Befragung ab dieser Seite in der "normalen" Seitenabfolge fortgesetzt.+**Hinweis:** Innerhalb der Seitenabfolge können Filter mittels ''goToPage()'' eingesetzt werden. Falls der Filter zu einer Seite innerhalb der laufenden Seitenabfolge springt, wird die Seitenfolge dort fortgesetzt. Falls der Filter auf eine Seite außerhalb der Seitenabfolge springt, wird die Befragung ab dieser Seite in der "normalenSeitenabfolge fortgesetzt.
  
-===== Beispiel 1 =====+Nachfolgend wird die Verwendung von ''setPageOrder()'' in Verbindung mit einer [[:de:create:randomization]] oder [[:de:create:rotation]] anhand mehrere Beispiele veranschaulicht. 
 + 
 + 
 +===== Zwei mögliche Abläufe =====
  
 Folgendes Szenario soll mittels ''setPageOrder()'' realisiert werden: Im Fragebogen gibt es zwei Frageblöcke, die einmal 5 Seiten umfassen und einmal 7 Seiten. In der Hälfte der Interviews soll zunächst Block A und dann Block B angezeigt werden, bei der anderen Hälfte der Interviews soll zunächst Block B und dann Block A angezeigt werden. Folgendes Szenario soll mittels ''setPageOrder()'' realisiert werden: Im Fragebogen gibt es zwei Frageblöcke, die einmal 5 Seiten umfassen und einmal 7 Seiten. In der Hälfte der Interviews soll zunächst Block A und dann Block B angezeigt werden, bei der anderen Hälfte der Interviews soll zunächst Block B und dann Block A angezeigt werden.
Zeile 37: Zeile 40:
 Für das Szenario wurde eine Urne mit der Kennung ''reihenfolge'' definiert mit folgendem Inhalt: Für das Szenario wurde eine Urne mit der Kennung ''reihenfolge'' definiert mit folgendem Inhalt:
  
-&amp;lt;code&amp;gt;+<code>
 1 1
 2 2
-&amp;lt;/code&amp;gt;+</code>
  
-Zum Speichern der Urnen-Ziehung wurde eine Frage mit der Kennung ''IV01'' vom Typ &amp;quot;interne Variablen&amp;quot; definiert und innerhalb dieser Frage eine Variable mit der Kennung ''IV01_01''.+Zum Speichern der Urnen-Ziehung wurde eine Frage mit der Kennung ''IV01'' vom Typ "interne Variablendefiniert und innerhalb dieser Frage eine Variable mit der Kennung ''IV01_01''.
  
 ==== PHP-Code ==== ==== PHP-Code ====
Zeile 48: Zeile 51:
 Folgender PHP-Code wird nun auf Seite 4 (oder früher im Fragebogen) verwendet: Folgender PHP-Code wird nun auf Seite 4 (oder früher im Fragebogen) verwendet:
  
-&amp;lt;code php&amp;gt;+<code php>
 urnDraw('reihenfolge', 'IV01'); urnDraw('reihenfolge', 'IV01');
 $zahl = value('IV01_01'); $zahl = value('IV01_01');
Zeile 56: Zeile 59:
   setPageOrder('startB-endeB, startA-endeA, demografie');   setPageOrder('startB-endeB, startA-endeA, demografie');
 } }
-&amp;lt;/code&amp;gt;+</code>
  
  
-===== Beispiel 2 =====+===== Zufällige Abfolge I =====
  
 Im Befragungsprojekt gibt es 5 Seiten, die in zufälliger Reihenfolge angezeigt werden sollen.  Im Befragungsprojekt gibt es 5 Seiten, die in zufälliger Reihenfolge angezeigt werden sollen. 
Zeile 71: Zeile 74:
 Auf der Seite, die vor ''PA'' kommt, wird folgender PHP-Code platziert. Auf der Seite, die vor ''PA'' kommt, wird folgender PHP-Code platziert.
  
-&amp;lt;code php&amp;gt;+<code php>
 if (!isset($seiten)) { if (!isset($seiten)) {
   $seiten = array('PA', 'PB', 'PC', 'PD', 'PE');   $seiten = array('PA', 'PB', 'PC', 'PD', 'PE');
Zeile 79: Zeile 82:
 } }
 setPageOrder($seiten); setPageOrder($seiten);
-&amp;lt;/code&amp;gt;+</code>
  
-Das ''isset()'' in Kombination mit dem ''registerVariable()'' sorgt dafür, dass die Reihenfolge beim Neu-Laden der Seite (z.B. weil der Fragebogen einen &amp;quot;Zurück&amp;quot;-Knopf erlaubt) nicht verändert wird.+Das ''isset()'' in Kombination mit dem ''registerVariable()'' sorgt dafür, dass die Reihenfolge beim Neu-Laden der Seite (z.B. weil der Fragebogen einen "Zurück"-Knopf erlaubt) nicht verändert wird.
  
 Mit ''shuffle()'' wird die Liste der 5 Seiten gemischt, anschließend wird die Seite ''PX'' an die Liste angehängt, damit diese stets als letzte gezeigt wird. Mit ''shuffle()'' wird die Liste der 5 Seiten gemischt, anschließend wird die Seite ''PX'' an die Liste angehängt, damit diese stets als letzte gezeigt wird.
Zeile 87: Zeile 90:
 **Hinweis:** Falls im Fragebogen eine weitere Rotation zum Einsatz kommen soll, muss dafür eine andere Variable als ''$seiten'' verwendet werden. So könnte man z.B. für die erste Rotation ''$seiten1'' und in der zweiten Rotation ''$seiten2'' verwenden. **Hinweis:** Falls im Fragebogen eine weitere Rotation zum Einsatz kommen soll, muss dafür eine andere Variable als ''$seiten'' verwendet werden. So könnte man z.B. für die erste Rotation ''$seiten1'' und in der zweiten Rotation ''$seiten2'' verwenden.
  
-Falls der Fragebogen keinen &amp;quot;Zurück&amp;quot;-Knopf erlaubt, kann der PHP-Code noch ein wenig vereinfacht werden.+Falls der Fragebogen keinen "Zurück"-Knopf erlaubt, kann der PHP-Code noch ein wenig vereinfacht werden.
  
  
-&amp;lt;code php&amp;gt;+<code php>
 $seiten = array('PA', 'PB', 'PC', 'PD', 'PE'); $seiten = array('PA', 'PB', 'PC', 'PD', 'PE');
 shuffle($seiten); shuffle($seiten);
 $seiten[] = 'PX'; $seiten[] = 'PX';
 setPageOrder($seiten); setPageOrder($seiten);
-&amp;lt;/code&amp;gt;+</code> 
 + 
 +===== Zufällige Abfolge II ===== 
 + 
 +In diesem Beispiel gibt es 3 Blöcke (A, B, C) mit 3 bis 5 Seiten (A1, A2, A3, B1, ...). Die Reihenfolge der Blöcke soll zufällig gemischt werden und zusätzlich sollen innerhalb jedes Blocks die Seiten gemischt werden -- nur die erste soll immer zu Beginn bleiben. 
 + 
 +**Hinweis:** Sehen Sie sich zu diesem Beispiel auch das Beispiel unter Rotation -> [[:de:create:rotation#rotation_und_mischen_von_bloecken|Rotation und Mischen von Blöcken]] an. 
 + 
 +==== Vorbereitung ==== 
 + 
 +Wenn die einzelnen Seiten rotiert werden sollen, benötigt jede Seite eine eigene [[:de:glossary#seitenkennung|Seiten-Kennung]]. Für das Beispiel wurden die Seiten wie folgt benannt: A1, A2, A3, B1 bis B5, C1 bis C4 und nach C4 folgt noch die Seite D1, wo es nach der Rotation immer weitergehen soll. 
 + 
 +==== PHP-Code ==== 
 + 
 +<code php> 
 +// Erst einmal die Seitenkennungen als Array speichern 
 +$rotation = array( 
 +  'A' => array('A1','A2','A3'), 
 +  'B' => array('B1','B2','B3','B4','B5'), 
 +  'C' => array('C1','C2','C3','C4'
 +); 
 +// Jeden Block einzeln mischen 
 +foreach ($rotation as $key => $pages) { 
 +  // Die erste Seite aus dem Array $pages herausnehmen 
 +  $first = array_shift($pages); 
 +  // Den Rest mischen 
 +  shuffle($pages); 
 +  // Beides wieder zusammenfügen 
 +  array_unshift($pages, $first); 
 +  // Und in das Array $rotation zurückspeichen 
 +  $rotation[$key] = $pages; 
 +
 + 
 +// Jetzt noch die Reihenfolge der Blöcke zufällig mischen 
 +shuffle($rotation); 
 + 
 +// Jetzt das Ergebnis noch als Seitenabfolge festlegen 
 +// Weiter soll es anschließend mit Seite 'D1' gehen 
 +setPageOrder($rotation, 'D1'); 
 +</code>
  
  
-===== Beispiel 3 =====+===== Reihenfolge speichern =====
  
 Im Befragungsprojekt gibt es fünf thematische Frageblöcke. Der Einfachheit halber wurden diese in die Rubriken ''R1'' bis ''R5'' gepackt (das ist optional). Die Frageblöcke umfassen eine unterschiedliche Anzahl an Fragen. Im Befragungsprojekt gibt es fünf thematische Frageblöcke. Der Einfachheit halber wurden diese in die Rubriken ''R1'' bis ''R5'' gepackt (das ist optional). Die Frageblöcke umfassen eine unterschiedliche Anzahl an Fragen.
Zeile 112: Zeile 154:
 Die Seite mit einem allgemeinen Teil, der nach Block R5 folgt, bekommt die Kennung ''demografie''. Die Seite mit einem allgemeinen Teil, der nach Block R5 folgt, bekommt die Kennung ''demografie''.
  
-Zum Speichern der Reihenfolge wird eine Frage mit der Kennung ''IV01'' vom Typ &amp;quot;interne Variablen&amp;quot; angelegt. Darin werden fünf Variablen angelegt (Beschreibung &amp;quot;R1&amp;quot; bis &amp;quot;R5&amp;quot;), welche später die Position des jeweiligen Blocks speichern sollen.+Zum Speichern der Reihenfolge wird eine Frage mit der Kennung ''IV01'' vom Typ "interne Variablenangelegt. Darin werden fünf Variablen angelegt (Beschreibung "R1bis "R5"), welche später die Position des jeweiligen Blocks speichern sollen.
  
 ==== PHP-Code ==== ==== PHP-Code ====
  
-&amp;lt;code php&amp;gt;+<code php>
 $parts = array( $parts = array(
-  'R1' =&amp;gt; 'R1start-R1ende', +  'R1' ='R1start-R1ende', 
-  'R2' =&amp;gt; 'R2start-R2ende', +  'R2' ='R2start-R2ende', 
-  'R3' =&amp;gt; 'R3start-R3ende', +  'R3' ='R3start-R3ende', 
-  'R4' =&amp;gt; 'R4start-R4ende', +  'R4' ='R4start-R4ende', 
-  'R5' =&amp;gt; 'R5start-R5ende'+  'R5' ='R5start-R5ende'
 ); );
 // Die Schlüssel des obigen Arrays mischen // Die Schlüssel des obigen Arrays mischen
Zeile 145: Zeile 187:
   'demografie'   'demografie'
 ); );
-&amp;lt;/code&amp;gt;+</code>
de/create/functions/setpageorder.txt · Zuletzt geändert: 04.06.2022 09:35 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