Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
Nächste ÜberarbeitungBeide Seiten der Revision
de:create:php-filters [14.07.2018 23:35] – [PHP-Code einfügen] adminde:create:php-filters [17.06.2019 17:30] – [Unterschiedhliche Fragen anzeigen] pschnei
Zeile 21: Zeile 21:
  
 **Beispiel 2:** Antwortet ein Teilnehmer mit "nein", werden mehrere Seiten übersprungen. **Beispiel 2:** Antwortet ein Teilnehmer mit "nein", werden mehrere Seiten übersprungen.
 +
  
 ==== Vorbereitung ==== ==== Vorbereitung ====
Zeile 44: Zeile 45:
  
 **Hinweis:** Sollten dort mehrere Variablen stehen, z.B. ''PT01_01'' und ''PT01_02'', so überprüfen Sie den Typ der Frage. Es ist wichtig, dass Sie für eine einfache Auswahl den Fragetyp "Auswahl" oder "Dropdown-Auswahl" verwenden -- __nicht__ aber "Mehrfachauswahl", wenn Sie keine solche erlauben möchten. **Hinweis:** Sollten dort mehrere Variablen stehen, z.B. ''PT01_01'' und ''PT01_02'', so überprüfen Sie den Typ der Frage. Es ist wichtig, dass Sie für eine einfache Auswahl den Fragetyp "Auswahl" oder "Dropdown-Auswahl" verwenden -- __nicht__ aber "Mehrfachauswahl", wenn Sie keine solche erlauben möchten.
 +
  
 ==== PHP-Code einfügen ==== ==== PHP-Code einfügen ====
Zeile 51: Zeile 53:
 **Wichtig:** Ein PHP-Filter kann __niemals__ auf derselben Seite stehen, auf der die Filterfrage steht (also jene Frage, auf deren Antwort Sie sich beziehen, im Beispiel ''PT01''). SoSci Survey verarbeitet den Fragebogen immer seitenweise, um den Teilnehmer eine komplette Fragebogen-Seite anzuzeigen. In dem Moment, wo die Seite mit der Filterfrage verarbeitet wird, kann der Teilnehmer diese Frage noch gar nicht beantwortet haben -- und entsprechend kann ein Filter noch nicht auf die Antwort reagieren (''[[:de:create:functions:value|value()]]''). **Wichtig:** Ein PHP-Filter kann __niemals__ auf derselben Seite stehen, auf der die Filterfrage steht (also jene Frage, auf deren Antwort Sie sich beziehen, im Beispiel ''PT01''). SoSci Survey verarbeitet den Fragebogen immer seitenweise, um den Teilnehmer eine komplette Fragebogen-Seite anzuzeigen. In dem Moment, wo die Seite mit der Filterfrage verarbeitet wird, kann der Teilnehmer diese Frage noch gar nicht beantwortet haben -- und entsprechend kann ein Filter noch nicht auf die Antwort reagieren (''[[:de:create:functions:value|value()]]'').
  
-==== Beispiel 1 ====+ 
 +===== Häufige Anwendungsfälle ===== 
 + 
 +Wenn Sie mit der PHP-Funktion ''[[:de:create:functions:value]]'' umgehen können, lassen sich damit gleich eine Reihe von Filtern implementieren. 
 + 
 + 
 +==== Eine Frage anzeigen oder nicht ====
  
 Folgender PHP-Code überprüft mittels ''[[:de:create:functions:value|value()]]'', ob für die Variable ''PT01'' der Antwortcode ''1'' gespeichert wurde. Falls dem so ist, wird mittels ''[[:de:create:functions:question|question()]]'' die Frage ''AB01'' angezeigt. Folgender PHP-Code überprüft mittels ''[[:de:create:functions:value|value()]]'', ob für die Variable ''PT01'' der Antwortcode ''1'' gespeichert wurde. Falls dem so ist, wird mittels ''[[:de:create:functions:question|question()]]'' die Frage ''AB01'' angezeigt.
Zeile 62: Zeile 70:
 } }
 </code> </code>
 +
 +**Tipp:** Dieser Filter lässt sich auch ganz ohne PHP-Code als [[:de:create:simple-filters|Frage-Filter]] realisieren.
  
 **Tipp:** Wenn Sie sich ein wenig Tipparbeit sparen möchten, dann ziehen Sie die Frage, die angezeigt werden soll, einfach von rechts in den PHP-Code hinein. Anschließend können Sie noch die Anzeigeoptionen der Frage anpassen. Nachdem Sie mit dem grünen Häkchen bestätigt haben, wird der PHP-Code für die Frage unten im //PHP-Code// Element angehängt. Dann müssen Sie den Code nur noch an die richtige Stelle (also zwischen die geschweiften Klammern) verschieben. **Tipp:** Wenn Sie sich ein wenig Tipparbeit sparen möchten, dann ziehen Sie die Frage, die angezeigt werden soll, einfach von rechts in den PHP-Code hinein. Anschließend können Sie noch die Anzeigeoptionen der Frage anpassen. Nachdem Sie mit dem grünen Häkchen bestätigt haben, wird der PHP-Code für die Frage unten im //PHP-Code// Element angehängt. Dann müssen Sie den Code nur noch an die richtige Stelle (also zwischen die geschweiften Klammern) verschieben.
Zeile 67: Zeile 77:
 **Tipp:** Zwischen die geschweiften Klammern ''{'' und ''}'' können Sie auch mehrere ''question()''-Befehle schreiben. **Tipp:** Zwischen die geschweiften Klammern ''{'' und ''}'' können Sie auch mehrere ''question()''-Befehle schreiben.
  
-==== Beispiel 2 ====+ 
 +==== Unterschiedliche Fragen anzeigen ==== 
 + 
 +Abhängig von einer früheren Antwort (oder einer Gruppenzuordnung, z.B. durch [[:de:create:randomization|Randomisierung]]) soll Frage A oder Frage B abgezeigt werden? 
 + 
 +Im folgenden Beispiel wird abhängig von der Antwort auf eine Auswahlfrage (AF01) entweder die Frage FF01 oder FF02 angezeigt. 
 + 
 +<code php> 
 +if (value('AF01') == 2) { 
 +  question('FF01'); 
 +} else { 
 +  question('FF02'); 
 +
 +</code> 
 + 
 +**Wichtig:** Die Frage FF01 und FF02 __dürfen nicht__ auf die Seite gezogen werden. Sonst werden sie doppelt angezeigt: Einmal durch den ''question()'' Befehl und einmal dadurch, dass sie auf die Seite gezogen wurden. 
 + 
 +Wenn die Frage FF01 für mehrere Antworten in AF01 angezeigt werden soll, dann kommt der [[:de:create:filter-boolean|logische Operator]] ''or'' zum Einsatz. 
 + 
 +<code php> 
 +if ((value('AF01') == 2) or (value('AF01') == 4)) { 
 +  question('FF01'); 
 +} else { 
 +  question('FF02'); 
 +
 +</code> 
 + 
 +Es kann auch aus mehr als 2 Fragen ausgewählt werden. 
 + 
 +<code php> 
 +if (value('AF01') == 1) { 
 +  question('FF01'); 
 +} elseif ((value('AF01') == 2) or (value('AF01') == 4)) { 
 +  question('FF02'); 
 +} else { 
 +  question('FF03'); 
 +
 +</code> 
 + 
 + 
 +==== Inhalte variieren ==== 
 + 
 +Anstatt von Fragen können auch Inhalte, z.B. Stimuli variiert werden. Mehr dazu auch im Kapitel [[:de:create:randomization]]. Im folgenden Beispiel wird -- abhängig vom Code in Variable AF01 -- entweder der Textbaustein mit der Kennung "stimulus1" oder "stimulus2" angezeigt. 
 + 
 +<code php> 
 +if ((value('AF01') == 2) or (value('AF01') == 4)) { 
 +  text('stimulus1'); 
 +} else { 
 +  text('stimulus2'); 
 +
 +</code> 
 + 
 + 
 +==== Seiten überpringen ====
  
 Beim **Fragebogen zusammenstellen** wählen Sie nun die Seite, bei der es bei einem "nein" weitergehen soll. Für diese Seite tragen Sie eine //Kennung// ein, z.B. "keinTV" ([[#eine_kennung_fuer_eine_seite_im_fragebogen_vergeben|Eine Kennung für eine Seite vergeben]]). Beim **Fragebogen zusammenstellen** wählen Sie nun die Seite, bei der es bei einem "nein" weitergehen soll. Für diese Seite tragen Sie eine //Kennung// ein, z.B. "keinTV" ([[#eine_kennung_fuer_eine_seite_im_fragebogen_vergeben|Eine Kennung für eine Seite vergeben]]).
Zeile 144: Zeile 207:
 **Tipp:** Wenn Sie prüfen möchten, ob eine Variable z.B. den Wert 1 __oder__ 2 hat, lesen Sie bitte [[filter-boolean|Mehrere Bedingungen verknüpfen]]. **Tipp:** Wenn Sie prüfen möchten, ob eine Variable z.B. den Wert 1 __oder__ 2 hat, lesen Sie bitte [[filter-boolean|Mehrere Bedingungen verknüpfen]].
  
-===== Ein einfacher Filter =====+ 
 +===== Seiten überspringen =====
  
 Noch einmal zurück zum einfachen Beispiel: Auf Seite 1 des Fragebogens wird die Frage AB01 gestellt (eine Auswahl zum Einkommen). Ziel ist es, dass die Fragen EK01 und EK02 nur dann gestellt werden, wenn der Befragte bei der Frage AB01 die erste Option auswählt. Noch einmal zurück zum einfachen Beispiel: Auf Seite 1 des Fragebogens wird die Frage AB01 gestellt (eine Auswahl zum Einkommen). Ziel ist es, dass die Fragen EK01 und EK02 nur dann gestellt werden, wenn der Befragte bei der Frage AB01 die erste Option auswählt.
de/create/php-filters.txt · Zuletzt geändert: 06.12.2022 13:09 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