Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende ÜberarbeitungNächste ÜberarbeitungBeide Seiten der Revision |
de:create:multilevel [08.03.2017 21:49] – admin | de:create:multilevel [30.11.2018 21:44] – admin |
---|
* ''[[:de:create:functions:multileveldown]]'' -- Startet innerhalb des Hauptfragebogens (Level 2) einen Teilfragebogen (Level 1) für das einzelne Element. | * ''[[:de:create:functions:multileveldown]]'' -- Startet innerhalb des Hauptfragebogens (Level 2) einen Teilfragebogen (Level 1) für das einzelne Element. |
* ''[[:de:create:functions:multileveldata]]'' -- Liefert im Teilfragebogen die Daten, die evtl. mittels ''multiLevelDown()'' übermittelt wurden. | * ''[[:de:create:functions:multileveldata]]'' -- Liefert im Teilfragebogen die Daten, die evtl. mittels ''multiLevelDown()'' übermittelt wurden. |
* ''[[:de:create:functions:multilevelreturn]]'' -- Leitet den Teilnehmer vom Teilfragebogen zurück zum Hauptfragebogen und übergibt dabei (optional) Daten, z.B. einer Auswahlfrage, ob noch weitere Elemente folgen. Falls der Befhel nicht verwendet wird, springt der Teilfragebogen beim Erreichen der "letzten Seite" automatisch zurück zum Hauptfragebogen (dabei werden keine Daten übermittelt). | * ''[[:de:create:functions:multilevelreturn]]'' -- Leitet den Teilnehmer vom Teilfragebogen zurück zum Hauptfragebogen und übergibt dabei (optional) Daten, z.B. einer Auswahlfrage, ob noch weitere Elemente folgen. Falls der Befehl nicht verwendet wird, springt der Teilfragebogen beim Erreichen der "letzten Seite" automatisch zurück zum Hauptfragebogen (dabei werden keine Daten übermittelt). |
* ''[[:de:create:functions:multilevelresponse]]'' -- Liefert im Hauptfragebogen die Daten, die evtl. von ''multiLevelReturn()'' übermittelt wurden. | * ''[[:de:create:functions:multilevelresponse]]'' -- Liefert im Hauptfragebogen die Daten, die evtl. von ''multiLevelReturn()'' übermittelt wurden. |
| |
==== Beispiel 2 ==== | ==== Beispiel 2 ==== |
| |
Alternativ kann der Hauptfragebogen zunächst alle Element abfragen und dann den Teilfragebogen entsprechend oft starten. | Alternativ kann der Hauptfragebogen zunächst alle Element abfragen und dann den Teilfragebogen entsprechend oft starten. Dieses Beispiel geht davon aus, dass in einer Frage vom Typ //Offene Nennungen// (Kennung z.B. "NG01") zunächst Elemente abgefragt wurden. |
| |
**Hinweis:** Diese Anleitung ist noch unvollständig, da loopPage() mit multiLevelDown() noch nicht vollständig zusmmenarbeitet. | Im Hauptfragebogen wird zunächst eine Liste der genannten Elemente erstellt und die Seite, welche den Teilfragebogen mittels ''multiLevelDown()'' aufruft entsprechend oft wiederholt. Die Nennung wird dabei an den Teilfragebogen übergeben. |
| |
Für den Hauptfragebogen ist folgende Aufbau sinnvoll: | <code php> |
| // Eine Liste der ausgefüllten Textfelder im Namensgenerator ermitteln |
| $items = getItems('NG01', 'valid'); |
| |
- Eine Seite mit einer Kennung (z.B. "startSub"), welche den Teilfragebogen mittels ''multiLevelDown()'' startet. | if (count($items) > 0) { |
- Direkt darauf folgend eine Seite, welche (ggf. unter Rückgriff auf ''multiLevelResponse()'') prüft, ob noch ein weiteres Element angezeigt werden soll und dann mittels ''[[:de:create:functions:gotopage]]'' oder ''[[:de:create:functions:setnextpage]]'' zurück springt zur vorigen Seite "startSub". | $item = loopPage($items); |
| // Text der Nennung abrugen |
| $element = value(id('NG01', $item)); |
| // Teilfragebogen starten und Text der Nennung übergeben |
| multiLevelDown('sub', $element); |
| } |
| </code> |
| |
Im Teilfragebogen kann folgender Aufbau sinnvoll sein: | Im Hauptfragebogen sind dann keine weitere Anpassungen mehr erforderlich. Im Teilfragebogen sollte das Element mittels ''[[:de:create:function:put]]'' in einer [[:de:create:questions:internal|internen Variable]] gespeichert werden. Es kann darüber hinaus sinnvoll sein, einen Platzhalter für die Nennung mittels ''[[:de:create:function:replace]]'' zu definieren. |
| |
* Wenn die Elemente bereits im Hauptfragebogen ermittelt wurden: Eine Abfrage von Daten aus dem Hauptfragebogen mittels ''multiLevelData()'' -- z.B. muss die Bezeichnung des gerade abgefragten Elements und evtl. auch dessen Nummer übermittelt und mittels ''[[:de:create:functions:put]]'' im Teilfragebogen gespeichert werden. | <code php> |
* Wenn die Elemente erst im Teilfragebogen ermittelt werden: | $element = multiLevelData(); |
- Eine Abfrage des Elements. | // Element im Teildatensatz speichern |
- Eine Abfrage ob noch ein weiteres Element eingetragen werden soll (oder eine Ausweichoption "keines mehr" neben einer Texteingabefrage). | put('IV01_01', $element); |
- Ein Filter, der ggf. mittels ''multiLevelReturn()'' einen Wert an den Hauptfragebogen übermittelt, dass kein weiteres Element abgefragt werden soll. | // Platzhalter %element% definieren |
| replace('%element%', $element); |
| </code> |
| |
**Tipp:** Legen sie für den Teilfragebogen unter **Fragebogen zusammenstellen** -> Karteireiter //Einstellungen// den Zugriffsmodus "Intern/gesperrt" fest, damit der Fragebogen tatsächlich nur als Teilfragebogen und nicht direkt aufgerufen werden kann. | Ein Rückgabewert vom Teilfragebogen an den Hauptfragebogen ist bei diesem Design in alle Regel nicht erforderlich. |
| |
**Hinweis:** Es ist empfehlenswert im untergeordeneten Fragebogen die Nummerierung der Fragen abzuschalten (**Fragebogen zusammenstellen** -> Karteireiter //Einstellungen//). Derzeit ist die Nummerierung der Fragen in jedem untergeordneten Fragebogen noch unabhängig von der Nummerierung im Hauptfragebogen. | |
| ==== Beispiel 3 ==== |
| |
| Die Anleitung zu [[:de:create:functions:randomuse#anwendungsbeispiel|randomUse()]] zeigt den vollständigen PHP-Code für den Anwendungsfall, dass Teilnehmer 20 zufällig aus einem Pool ausgewählte Items bewerten müssen, diese aber auch auslassen können. |
| |
| |
| ===== Hinweise ===== |
| |
| * Es ist empfehlenswert im untergeordeneten Fragebogen die Nummerierung der Fragen abzuschalten (**Fragebogen zusammenstellen** -> Karteireiter //Einstellungen//). Derzeit ist die Nummerierung der Fragen in jedem untergeordneten Fragebogen noch unabhängig von der Nummerierung im Hauptfragebogen. |
| * Platzhalter gelten nur jeweils innerhalb eines Datensatzes -- daher können Platzhalter aus dem Hauptfragebogen nicht im Teilfragebogen verwendet werden. Falls ein Platzhalter auch im Teilfragebogen erforderlich ist, muss der entsprechende Wert mittels ''multiLevelDown()'' an den Teilfragebogen übergeben und dort ein Platzhalter definiert werden. |
| |
| **Tipp:** Legen sie für den Teilfragebogen unter **Fragebogen zusammenstellen** -> Karteireiter //Einstellungen// den Zugriffsmodus "Intern/gesperrt" fest, damit der Fragebogen tatsächlich nur als Teilfragebogen und nicht direkt aufgerufen werden kann. |