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

Liebes SosciSurvey Team,

ich möchte in einer Umfrage gerne einen Filter und die Rotation von Themenblöcken miteinander kombinieren. Einzeln bekomme ich beides hin, aber ich weiß nicht, wie es zusammen funktioniert.

Konkret geht es darum, dass ich Personen zu drei verschiedenen sozialen Netzwerken befragen möchte, ich will ihnen aber
1. Nur die Fragen zu den Netzwerken anzeigen, die sie auch tatsächlich nutzen
2. die Netzwerke in unterschiedlicher Reihenfolge anzeigen (wenn sie mehr als eines davon nutzen)

Wenn man den Fragebogen ganz linear durchgeht, funktioniert der Filter mit diesen Befehlen
auf Seite Face1:

if ((value('A001_01') == 1) and (value('A001_03') == 2)){ goToPage('Whats1'); }
if ((value('A001_01') == 1) and (value('A001_03') == 1) and (value('A001_05') == 2)){ goToPage('Insta1');}
if ((value('A001_01') == 1) and (value('A001_03') == 1) and (value('A001_05') == 1)) { goToPage('end'); }

Auf Seite Whats1:

if (value('A001_03') == 1) {
  goToPage('Insta1');
}

Und auf Seite Insta1:

if (value('A001_05') == 0) {
  goToPage('Know');
}

Wenn ich jetzt allerdings die Reihenfolge, in der die Blöcke angezeigt werden, mit folgendem Befehl rotieren lasse:

if (!isset($blocks)) {
  $blocks = array('Face1-Face4','Whats1-Whats4','Insta1-Insta4');
  shuffle($blocks);
  $blocks[] = 'Know';
  registerVariable($blocks);
}
setPageOrder($blocks);

gelange ich teilweise auf die falschen Seiten oder hänge in einer Schleife fest, da der Filter ja auf lineares Durchklicken ausgelegt ist.
Gibt es einen passenden Befehl, um dieses Problem zu umgehen?

Danke im Voraus!

in SoSci Survey (dt.) by s049708 (130 points)
edited by SoSci Survey

1 Answer

0 votes

Der Filter goToPage('Know') springt ja komplett aus der Rotation hinaus auf die Seite, die danach kommt. Aber wenn ich Sie korrekt verstehe, möchten Sie nur den Block überspringen?

Versuchen Sie es bitte einmal mit einer leeren Seite am Ende von Block Whats und Insta und springen Sie dorthin anstatt zum nächsten Block.

by SoSci Survey (206k points)
Vielen Dank für die schnelle Antwort! Aber ich glaube, damit ist mein Problem noch nicht gelöst.
Mit der Seite "Know" soll es weiter gehen, nachdem die Blöcke zu den Netzwerken beantwortet wurden. Mein Problem ist, dass die Reihenfolge, in der die Teilnehmer die Blöcke zu den Netzwerken bearbeiten, zufällig sein soll, aber ja nicht jedem jeder Block präsentiert werden soll (wenn er ein bestimmtes Netzwerk nicht nutzt). Ich bräuchte glaube ich einen Befehl, der erkennt, ob jemand einen Block schon bearbeitet hat und welcher Block noch bearbeitet werden muss, bevor es mit der Seite Know weiter geht. Oder am einfachsten wäre es, wenn man schon bei der Filterfrage programmieren könnte, dass bestimmte Blöcke einfach gar nicht angezeigt werden und die restlichen Blöcke werden in ihrer Reihenfolge variiert. Geht das?
Haben Sie es mit den leeren Seiten am Ende der betroffenen Blöcke (als Sprungziele) einmal ausprobiert? Ich bin ziemlich sicher, dass das Problem damit gelöst wird.

>  dass bestimmte Blöcke einfach gar nicht angezeigt werden

Wenn Sie zu Beginn der Rotation schon wissen, welche Blöcke (nicht) vorkommen, dann können Sie diese natürlich einfach ausklammern, z.B.

$blocks = array('Face1-Face4');
if ((value('A001_01') != 1) or (value('A001_03') != 2)) {
  $blocks[] = 'Whats1-Whats4';
}
if ((value('A001_01') != 1) or (value('A001_03') != 1) or (value('A001_05') != 2)) {
  $blocks[] = 'Insta1-Insta4';
}
shuffle($blocks);
Genau, ich würde gerne einzelne Blöcke ausklammern. Ich habe jetzt versucht, die Bedingungen für verschiedene Kombinationen von Blöcken festzulegen, allerdings scheine ich dabei einen Fehler gemacht zu haben:

$blocks = array('Face1-Face4','Whats1-Whats4','Insta1-Insta4');
if ((value('A001_01') == 2) and (value('A001_03') == 2) and (value('A001_05') == 2)) {
$blocks[] = 'Know';
}

$blocks = array('Face1-Face4','Whats1-Whats4');
if ((value('A001_01') == 2) and (value('A001_03') == 2) and (value('A001_05') == 1)) {
$blocks[] = 'Know';
}

$blocks = array('Face1-Face4','Insta1-Insta4');
if ((value('A001_01') == 2) and (value('A001_03') == 1) and (value('A001_05') == 2)) {
$blocks[] = 'Know';
}

$blocks = array('Face1-Face4');
if ((value('A001_01') == 2) and (value('A001_03') == 1) and (value('A001_05') == 1)) {
$blocks[] = 'Know';
}

$blocks = array('Whats1-Whats4');
if ((value('A001_01') == 1) and (value('A001_03') == 2) and (value('A001_05') == 1)) {
$blocks[] = 'Know';
}

$blocks = array('Insta1-Insta4');
if ((value('A001_01') == 1) and (value('A001_03') == 1) and (value('A001_05') == 2)) {
$blocks[] = 'Know';
}
  
shuffle($blocks);
setPageOrder($blocks);


Es wird jetzt in der Umfrage nur noch der letzte Block angezeigt, ganz egal, was ich bei der Filterfrage angeklickt habe. Können Sie mir da nochmal weiter helfen?
Es bringt nichts, die Variable $blocks ständig neu zu definieren. Fangen Sie mit einem leeren Array an bzw. mit den Blöcken die immer kommen - und dann fügen Sie mittels Filter nur jene hinzu, die noch in die Auswahl sollen. Eigentlich können Sie den Code, den ich im letzten Kommentar gepostet hatte weitgehend übernehmen. Nur für das Face1-Face4 müssten Sie evtl. noch einen Filter ergänzen.
Ich glaube, ich habe es hinbekommen:

$blocks = array();
if ((value('A001_01') == 2)) {
$blocks[] = 'Face1-Face4';
}
if ((value('A001_03') == 2)) {
$blocks[] = 'Whats1-Whats4';
}
if ((value('A001_05') == 2)) {
$blocks[] = 'Insta1-Insta4';
}
shuffle($blocks);
  $blocks[] = 'Know';
setPageOrder($blocks);

Vielen Dank für Ihre Hilfe!
Ja sieht gut aus. Denken Sie noch an das

if (!isset($blocks)) {

aus Ihrem ursprünglichen Code, damit - sollte die Seite aufgrund eines Zurück-Knopfes oder einer fehlenden Antwort erneut aufgerufen werden - die Rotation nicht verändert wird.
...