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 Soci Survey Team,

Wir haben 4 Seitenblöcke (A1-A2, B1-B2, C1-C2, D1-D3), die wir den Teilnehmern gerne randomisiert vorlegen würden. Bei vier Blöcken gäbe es also 24 verschiedene Reihenfolge-Möglichkeiten. Dazu verwenden wir den Zufallsgenerator um zufällig eine der 24 Möglichkeiten zu ziehen:

question('RG04');  // Zettel in zufälliger Reihenfolge ziehen
$pages = valueList('RG04', NULL, 'label');  // Gezogene Zettel auslesen
setPageOrder($pages, 'end');  // Seiten als Seitenabfolge definieren

Innerhalb der Blöcke wird dann jedesmal die zweite Seite (A2, B2, C2, D3) geloopt, und zwar jedes Mal insgesamt 10 Mal.

Wir haben jetzt festgestellt (und dann auch nachgelesen ;) ) dass die zwei Befehle, setPageOrder und loopPage miteinander kollidieren.
Wie könnten wir es in diesem Fall lösen? Wir haben uns dieses Beispiel durchgelesen, blicken aber nicht ganz durch wie wir das in unserem Fall anwenden könnten.

Vielen Dank und freundliche Grüße

in SoSci Survey (dt.) by s152088 (165 points)

1 Answer

0 votes

Wir haben jetzt festgestellt (und dann auch nachgelesen ;) ) dass die zwei Befehle, setPageOrder und loopPage miteinander kollidieren.

Im Prinzip sehen Sie die Seitenwiederholung innerhalb der Blöcke schon zu Beginn vor, wo Sie die setPageOrder()festlegen. Da würden Sie also für Block 1 nicht schreiben

A1-A2

Sondern gleich

A1, A2, A2, A2, A2, A2, A2, A2, A2, A2, A2

Auf der Seite A2 können Sie dann über $i = loopIndex ermitteln, die wievielte Wiederholung es gerade ist. Das zählt dann allerdings nicht ab 0, sondern bei A ab der 1 (davor kommt ja A1), bei B ab der 13 (davor kommen A2=11, B1=12) u.s.w.

Aber das lässt sich ja mit einem simplen Minus in den Griff bekommen:

$i = loopIndex() - 1;
by SoSci Survey (206k points)
Danke für die schnelle Rückmeldung!

Das mit setPageOrder() habe ich jetzt glaube ich verstanden, aber noch nicht, wie ich loopIndex konkret anwenden würde.

loopIndex hilft mir dabei, zu wissen ob ich schon bei der 10. Wiederholung angekommen bin und der nächste Block kommt. Aber wie würde der Code genau aussehen?
Sie würden das

$i = loopPage(10);

einfach ersetzen durch

$i = loopIndex() - 1;

Wobei die 1 gegen den Wert ausgetauscht werden muss, welchen der loopIndex() bei der ersten Anzeige der Seite annimmt. Das können Sie sich ja einfach anzeigen lassen:

debug(loopIndex());
Vielen Dank,
Ich glaube ich bin der Antwort schon einen kleinen Schritt näher. Da wir ja aber die Blöcke A, B, C und D shufflen, können diese ja in unterschiedlicher Reihenfolge präsentiert werden. Daher ist der loopIndex ja immer ein anderer, je nach Reihenfolge.

Also eigentlich müsste ich irgendwie fragen:
Ist dieser Block an 1. Stelle? -> dann loopIndex - 1
Ist dieser Block an 2. Stelle? -> dann loopIndex - 11
usw.

Bin ich da auf der richtigen Spur? Und wie könnte ich das elegant lösen?


edit: vielleicht so?

if $pages[2] == "A2" {
$i = loopIndex() - 1;
}

if $pages[12] == "A2" {
$i = loopIndex() - 11;
}

...
> Da wir ja aber die Blöcke A, B, C und D shufflen, können diese ja in unterschiedlicher Reihenfolge präsentiert werden. Daher ist der loopIndex ja immer ein anderer, je nach Reihenfolge.

Ach ja ... das hatte ich verdrängt. Na gut, dass automatisieren wir das eben:

if (!isset($block1start)) {
  $block1start = loopIndex();
  registerVariable($block1start);
}
$i = loopIndex() - $block1start;

Damit verwenden Sie immer den ersten im Block beobachteten loopIndex() als Referenz. Die Variable $block1start muss in den anderen Blöcken natürlich anders heißen, z.B. $block2start, $block3start und $block4start.

Das ist m.E. einfacher, als wenn man nachträglich versucht, die Reihenfolge zu ermitteln. Aus Perspektive der jeweils laufenden Seite...
Vielen Herzlichen Dank, hat super geklappt!
...