Willkommen im Online-Support von SoSci Survey.

Hier bekommen Sie schnelle und fundierte Antworten von anderen Projektleitern und direkt von SoSci Survey.

→ Eine Frage stellen


Welcome to the SoSci Survey online support.

Simply ask a question to quickly get answers from other professionals, and directly from SoSci Survey.

→ Ask a Question

0 votes

Mein Fragebogen enthält die gleichen Fragen zu verschiedenen Items. Ich habe mich für ein klassisches Multi-Level-Design mit loopPage() und multiLevelDown() entschieden.

Das funktioniert auch soweit: Die Unterfragebogen wird also mehrmals aufgerufen, je nach einer bestimmten Frage (Mehrfachauswahl) im Hauptfragebogen.

Zum Problem: Ich habe im Hauptfragebogen später (also nach dem ggf. mehrmaligen Aufrufen des Unterfragebogens) eine Frage, die nur angezeigt werden soll, wenn im Unterfragebogen (der pro Interview ja mehrmals angezeigt wird) bei einer bestimmten Frage eine bestimmte Antwort ausgewählt wurde. Ich muss also in irgendeinem Konstrukt speichern, wie die Antworten waren, um das dann dem Hauptfragebogen übergeben oder zumindest dort irgendwie abrufen zu können.
Sobald man das im Unterfragebogen definiert, wird es jedes Mal überschrieben bzw. neu angelegt. Ich habe verschiedene Wege probiert, aber komme immer nur an den jeweils letzten Wert der Frage (z.B. wenn die Frage 3x für jedes Item gestellt wird, weil 3 Items ausgewählt wurden).

Wie könnte ich vorgehen? Wie kann ich die Werte speichern? Ich weiß nicht mehr weiter.

in SoSci Survey (dt.) by s087224 (135 points)

1 Answer

0 votes
 
Best answer

Sie können bei multiLevelReturn() ja einen oder mehrere Werte aus dem untergeordneten Fragebogen an den Hauptfragebogen übergeben und diese dann mittels multiLevelResponse() abrufen. Natürlich liefert der letztgenannte Befehl nur den letzten Rückgabe-Wert, aber wenn Sie diese Rückgabewerte sammeln möchten, können Sie das z.B. wie folgt tun:

// Seite vor dem Multi-Level
$collect = array();  // Hier werden die Antworten gesammelt
registerVariable($collect);

// Die Seite, die den utnergeordneten Fragebogen aufruft
$i = loopToPage('pg2', 3);
multiLevelDown('multi_sub');

// Die folgende Seite, welche die Seitenkennung pg2 trägt
$i = loopIndex();
$data = multiLevelResponse();
$collect[$i] = multiLevelResponse();

Die Variable $collectenthält dann im Anschluss alle Werte, die Seite mittels multiLevelReturn() von den einzelnen Fragebögen zurückgegeben haben. Ansehen können Sie das Ergebnis mittels debug($collect);

by SoSci Survey (107k points)
selected by s087224
Das habe ich soweit implementiert, allerdings funktionieren jetzt die Platzhalter nicht mehr bzw. es kann nicht mehr über die Platzhalter iteriert werden. Im Unterfragebogen wird immer nur der Platzhalter für das erste ausgewählte Item (der Mehrfachauswahl) angezeigt.
Nun, ich kenne Ihren PHP-Code im über- und untergeordneten Fragebogen nicht. Aber meine Vermutung wäre, dass es mit dem zweiten Parameter in multiLevelDown() zu tun haben könnte...
Okay, dann hier ein paar Codeschnipsel. HF steht für Hauptfragebogen; UF für Unterfragebogen.

Auf der Seite der Mehrfachauswahl im HF:
$antworten = array();
registerVariable($antworten);

Die darauffolgende Seite leitet sozusagen zum UF weiter: Die Auswahl der Antworten (getItemText) von der vorhergehenden Seite wird in einem Array $itemtext gespeichert, wenn min. 1 Option ausgewählt wurde. Dann wird mit
$item = loopToPage('Seite3',count($auswahl));
multiLevelDown('UF', $itemtext[$item]);

Im UF werden die Platzhalter entsprechend ersetzt:
$element = multiLevelData();
put('Var01', $element);
replace('%platzhalter%', $element);

Auf der darauffolgenden Seite im UF wird der value einer Frage ausgelesen (der für die Filterung im HF wichtig ist) und dann am Ende des UF mit multiLevelReturn() zurückgegeben.

Wieder zurück im HF wird auf der nächsten Seite so wie oben mit loopIndex und multiLevelResponse() das Array der values der Frage im UF angezeigt.

 Problem ist, dass die Platzhalter nicht funktionieren, also nur der erste Platzhalter angezeigt wird, aber nicht darüber iteriert wird.
Fügen sie doch auf der Seite mit multiLevelDown() einmal folgende Zeilen ein und starten Sie dann im Debug-Modus:

debug($item);
debug($itemtext[$item]);

Was wir denn als Inhalt der Variablen angezeigt?
Wenn ich die debug-Information haben möchte, muss ich die Zeile mit multiLevelDown() auskommentieren, sonst springt er in den UF ohne mir die Information anzuzeigen.

Wähle ich zB. die erste und zweite Option in meiner Mehrfachauswahl aus, dann ist in $item = 0 und $itemtext[$item]='String der ersten gewählten Option'
Hilft Ihnen das irgendwie weiter?
Nun, im ersten Durchgang scheint ja schonmal alles zu funktionieren. Was erscheint im zweiten und dritten Durchgang (wenn Sie z.B. die Items 1 bis 3 auswählen)?
Da erscheint das gleiche, also der String vom ersten ausgewählten Item (was aber der falsche String ist) wird ersetzt. Die debug-Informationen bekomme ich nur im Hauptfragebogen (s.o.) ohne in den Unterfragebogen zu springen. Das array itemtext enthält den Text aller ausgewählten Items, das hatte ich schon kontrolliert und das Ersetzen hatte zuvor mit loopPage() auch funktioniert.
Wenn Sie das multiLevelDown() einmal auskommentieren (// voranstellen) und stattdessen html('<p>Test</p>'); einfügen ... was erscheint denn dann bei drei Durchläufen für $i jeweils?
Dann erscheint "Test" und man kann quasi unendlich auf "weiter" klicken, aber es ändert sich nichts.
Bei debug($i); wird immer 0 angezeigt.
Hat sich nun etwas daran geändert?
Ja! Jetzt sehe ich, wenn ich 3 Items auswähle auch wie sich das $i verändert (0-1-2)
Es scheint alles soweit zu funktionieren :) Vielen Dank für den Support!
Alles klar, dann war es dasselbe Problem wie in dieser (aktuellen) Frage beschrieben: https://support.soscisurvey.de/?qa=1887/filter-und-looptopage
...