Beide Seiten der vorigen RevisionVorhergehende Überarbeitung | Nächste ÜberarbeitungBeide Seiten der Revision |
de:create:functions:setpageorder [14.11.2016 19:36] – 1 anselm.von.scheliha | de:create:functions:setpageorder [14.11.2016 19:59] – alte Version wieder hergestellt (03.11.2016 16:37) admin |
---|
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 "Weiter" verwendet (der Fragebogen startet also in jedem Fall mit Seite 1). |
| |
''void **setPageOrder**(mixed //Seitenabfolge//)'' | ''void **setPageOrder**(mixed //Seitenabfolge//)'' |
|'''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 "normalen" Abfolge 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 "normalen" Seitenfolge 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 "normalen" Seitenfolge 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 "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 "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 "normalen" Seitenabfolge fortgesetzt. |
| |
===== Beispiel 1 ===== | ===== Beispiel 1 ===== |
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: |
| |
&lt;code&gt; | <code> |
1 | 1 |
2 | 2 |
&lt;/code&gt; | </code> |
| |
Zum Speichern der Urnen-Ziehung wurde eine Frage mit der Kennung ''IV01'' vom Typ &quot;interne Variablen&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 Variablen" definiert und innerhalb dieser Frage eine Variable mit der Kennung ''IV01_01''. |
| |
==== PHP-Code ==== | ==== PHP-Code ==== |
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: |
| |
&lt;code php&gt; | <code php> |
urnDraw('reihenfolge', 'IV01'); | urnDraw('reihenfolge', 'IV01'); |
$zahl = value('IV01_01'); | $zahl = value('IV01_01'); |
setPageOrder('startB-endeB, startA-endeA, demografie'); | setPageOrder('startB-endeB, startA-endeA, demografie'); |
} | } |
&lt;/code&gt; | </code> |
| |
| |
Auf der Seite, die vor ''PA'' kommt, wird folgender PHP-Code platziert. | Auf der Seite, die vor ''PA'' kommt, wird folgender PHP-Code platziert. |
| |
&lt;code php&gt; | <code php> |
if (!isset($seiten)) { | if (!isset($seiten)) { |
$seiten = array('PA', 'PB', 'PC', 'PD', 'PE'); | $seiten = array('PA', 'PB', 'PC', 'PD', 'PE'); |
} | } |
setPageOrder($seiten); | setPageOrder($seiten); |
&lt;/code&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 &quot;Zurück&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. |
**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 &quot;Zurück&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. |
| |
| |
&lt;code php&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); |
&lt;/code&gt; | </code> |
| |
| |
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 &quot;interne Variablen&quot; angelegt. Darin werden fünf Variablen angelegt (Beschreibung &quot;R1&quot; bis &quot;R5&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 Variablen" angelegt. Darin werden fünf Variablen angelegt (Beschreibung "R1" bis "R5"), welche später die Position des jeweiligen Blocks speichern sollen. |
| |
==== PHP-Code ==== | ==== PHP-Code ==== |
| |
&lt;code php&gt; | <code php> |
$parts = array( | $parts = array( |
'R1' =&gt; 'R1start-R1ende', | 'R1' => 'R1start-R1ende', |
'R2' =&gt; 'R2start-R2ende', | 'R2' => 'R2start-R2ende', |
'R3' =&gt; 'R3start-R3ende', | 'R3' => 'R3start-R3ende', |
'R4' =&gt; 'R4start-R4ende', | 'R4' => 'R4start-R4ende', |
'R5' =&gt; 'R5start-R5ende' | 'R5' => 'R5start-R5ende' |
); | ); |
// Die Schlüssel des obigen Arrays mischen | // Die Schlüssel des obigen Arrays mischen |
'demografie' | 'demografie' |
); | ); |
&lt;/code&gt; | </code> |