0 votes
in SoSci Survey (dt.) by s185028 (135 points)
edited by SoSci Survey

Liebes SoSci Survey-Team,

ich habe einen Zufallsgenerator eingerichtet, der die Seiten meiner Studie rotiert. Dieser funktionierte auch bis ich einen PHP-Code auf einigen Seiten eingerichtet habe, um die Fragen dieser Seite ebenfalls zu rotieren. Nun ist das Problem, dass durch den Zufallsgenerator die entsprechende erste Seite zwar gezogen wird, aber danach keine neuen Seiten wie im Zufallsgenerator angegeben gezogen werden, sondern die Seiten wie im Fragebogen angelegt wurden, durchgespielt werden. Wenn also Seite 4 von 5 Seiten als erstes gezogen wird, wird danach noch die 5. Seite angezeigt und die Studie dann beendet, anstatt das wie beim Zufallsgenerator angegeben die Seiten 1-3 auch angezeigt werden. Ich möchte also den PHP-Code so verändern, dass er die Seitenziehung des Zufallsgenerators nicht unterbricht sondern die vorgegebene Seite vom Generator als Nächstes angezeigt wird und nicht die nächste Frage im Fragebogenprojekt.
Das ist mein PHP-Code:

if (!isset($blocks1)) {
  // Liste mit Frage-Kennungen
  $blocks1 = [
    ['FM02', 'FM03'],
    ['FM04', 'FM05'],
    ['FM06', 'FM07'],
    ['FM08', 'FM09'],
    ['FM10', 'FM11']
  ];
 
  // Die Liste mischen
  shuffle($blocks1);
  // Die Listen auf allen Seiten verfügbar machen
  registerVariable($blocks1);
}

$i = loopPage(count($blocks1));

question($blocks1[$i][0]);
question($blocks1[$i][1]);

Vielen Dank!

1 Answer

+1 vote
by SoSci Survey (316k points)

Der Befehl loopPage() bricht eine eventuell mittels setPageOrder() definierte Seitenabfolge ab, vgl. setPageOrder().

Sie müssten die Wiederholung der Seite deshalb direkt zu Beginn in die Seitenabfolge integrieren. Das kann z.B. dadurch passieren, dass Sie im Zufallsgenerator für die Seite direkt 5-mal deren Kennung eintragen.

Oder Sie bearbeiten das Array, welches der Zufallsgenerator liefert. Mittels loopIndex() können Sie dann zwischen den Wiederholungen unterscheiden. Aber beachten Sie, dass sich der Index ändert, je nachdem an welcher Stelle die Seite mit den Wiederholungen kommt. Sie müssten also den ersten Index noch mittels isset() und registerVariable() speichern und als Referenz immer vom Index subtrahieren.

Klingt nicht ganz trivial? Ist es auch nicht. Aber es ist lösbar :) Hilfe gibt es bei Bedarf hier.

by s185028 (135 points)
Es hat leider nicht funktioniert, die Seitenkennung mehrfach einzutragen. Ich bin mir jetzt unsicher wie ich das Array abändern soll. Hier ist der Code vom Zufallsgenerator. Wo soll ich da ansetzen?
question('RG01');  // Zettel aus dem Zufallsgenerator ziehen
$pages = value('RG01', 'label');  // Gezogene Seitenabfolge auslesen
setPageOrder($pages, 'blockend');  // Seitenabfolge anwenden
by SoSci Survey (316k points)
> Es hat leider nicht funktioniert, die Seitenkennung mehrfach einzutragen

Nicht für mehrere Seite, aber als Komma-Liste im Zufallsgenerator, z.B.

seiteA
seiteB
seiteC,seiteC,seiteC
seiteD
by s185028 (135 points)
Ich habe es ausprobiert indem ich bei den Zetteln die Kennung mehrfach hingeschrieben habe. Ich habe mehrere festgelegte Reihenfolgen aus denen ich mit dem Zufallsgenerator ziehe. Als Beispielzettel habe ich es so ausprobiert:

1 = block1a, block1b,block1b, block1b, block2a, block2b, block2b, block2b, blcok2b, attention, block1c, block1d, block1d, block1d, block2c, block2d, block2d, block2d, blockend

anstatt so:
1 = block1a, block1b, block2a, block2b, attention, block1c, block1d, block2c, block2d, blockend
by SoSci Survey (316k points)
Wenn Sie es so machen, dann sollte die Seite block2a auch mehrfach angezeigt werden. Ist das nicht der Fall?
by s185028 (135 points)
Er wird nicht mehrfach angezeigt und es ändert sich nichts. Die Fragen werden durch loopPage genauso auf verschiedenen Seiten angezeigt wie vorher. Danach geht es dann auch mit der falschen Reihenfolge weiter. Ich bräuchte also vermutlich eine Umschreibung des Codes mit loopPage oder? Meinten Sie das mit loopIndex? Könnten Sie mir da weiterhelfen?
by SoSci Survey (316k points)
> Die Fragen werden durch loopPage genauso auf verschiedenen Seiten angezeigt wie vorher

Den loopPage() Befehl müssten Sie entfernen, korrekt.

Den Index $i bekommen sie dann wie folgt:

$pg = loopIndex();
if (!isset($pgRef)) {
  $pgRef = $pg;
  registerVariable($pgRef);
}
$i = $pg - $pgRef;
by s185028 (135 points)
Vielen Dank! Jetzt funktioniert alles einwandfrei.

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

...