0 votes
in SoSci Survey (dt.) by s162378 (120 points)

Hallo liebes Team,

ich komme nicht weiter, eine Seite aus der Rotation der Frageblöcke rauszunehmen. Zwischen dem ersten und zweitem Block also zwischen S45 und S46 kommt T1, welche immer zwischen den Blöcken, egal welcher Block zuerst kommt, angezeigt werden soll. Dazu schaffe ich es nicht, abzuspeichern, welcher Block zuerst angezeigt wurde. Über put() will es mir glaub ich immer die Seiten abspeichern, was ich aber nicht interessiert. Ich will nur wissen, welcher Block zuerst kam. Hiermit hatte ich es auch nicht hinbekommen:https://www.soscisurvey.de/help/doku.php/de:create:functions:setpageorder

Hier ist der Code mit dem ich bis jetzt den meisten Überblick hatte, AN81 ist meine interne Variable.

    if (!isset($blocks)) {
  // Liste der Seiten definieren
  $blocks= array(
//Block 1
array('S16','S17','S18','S19','S20','S21','S22','S23','S24','S25','S26','S27','S28','S29','S30','S31','S32','S33','S34','S35','S36','S37','S38','S39','S40','S41','S42','S43','S44','S45'),
//Block 2
array('S46','S47','S48','S49','S50','S51','S52','S53','S54','S54','S55','S56','S57','S58','S59','S60','S61','S62','S63','S64','S65','S66','S67','S68','S69','S70','S71','S72','S73','S74','S75')
);
//Jeden einzelnen Block in sich mischen
for ($i=0; $i<count($blocks); $i++) {
shuffle($blocks[$i]);
}
//Liste der Blöcke mischen
shuffle($blocks);
//Die Seite ergänzen, wo es nachher weiter geht
$blocks[]=‘S80‘;
  // Reihenfolge zwischenspeichern, um spätere Änderung zu vermeiden
  registerVariable($blocks);
}
setPageOrder($blocks);

for($i=0; $i<count($blocks); $i++) {
//Kennung der internen Variablen aus Frage-Kennung plus Index erstellen
$id = id('AN81', $i + 1);
//Hier den Wert aus dem Array speichern
put($id, $blocks);
}

1 Answer

0 votes
by SoSci Survey (305k points)

Dazu schaffe ich es nicht, abzuspeichern, welcher Block zuerst angezeigt wurde.

Ersetzen Sie das shuffle($blocks) dafür am besten durch einen Zufallsgenerator mit 2 Zetteln. Wenn dieser die Kennung RG01 hat, könnte das so aussehen:

if (value('RG01') == 1) {
  $pageOrder = array_merge($blocks[0], ['T1'], $blocks[1]);
} else {
  $pageOrder = array_merge($blocks[1], ['T1'], $blocks[0]);
}

Aufgrund des Wertes in RG01 wissen Sie dann, welcher Block zuerst gezeigt wurde, und Sie haben die Seite T1 zwischen den beiden Blöcken.

by s162378 (120 points)
edited by s162378
Hallo,

vielen lieben Dank für die schnelle Antwort, irgendwie wird bei mir trotzdem nicht zwischen den Blöcken T1 angezeigt und die Blöcke werden nicht rotiert, obwohl mir in der Daten Ausgabe angezeigt wird, dass rotiert wurde.
Mein Zufallsgenerator besteht inhaltlich aus zwei Zetteln: 1=beige, 2=schwarz, pro Interview ziehe ich einen Zettel (weil sich dann die andere Option ergibt oder? Also wenn ich beige ziehe, ist klar, dass danach schwarz kommt) und die Art der Ziehung liegt bei Gleichverteilung in abgeschlossenen Fragebögen (einfach um sicher zu gehen).

Mein Code sieht jetzt so aus:

if (!isset($blocks)) {
  // Liste der Seiten definieren
  $blocks= array(
//Block 1
array('S16','S17','S18','S19','S20','S21','S22','S23','S24','S25','S26','S27','S28','S29','S30','S31','S32','S33','S34','S35','S36','S37','S38','S39','S40','S41','S42','S43','S44','S45'),
//Block 2
array('S46','S47','S48','S49','S50','S51','S52','S53','S54','S54','S55','S56','S57','S58','S59','S60','S61','S62','S63','S64','S65','S66','S67','S68','S69','S70','S71','S72','S73','S74','S75')
);
//Jeden einzelnen Block in sich mischen
for ($i=0; $i<count($blocks); $i++) {
shuffle($blocks[$i]);
}

//Liste der Blöcke mischen
if (value('AN82') == 1) {
  $pageOrder = array_merge($blocks[0], ['T1'], $blocks[1]);
} else {
  $pageOrder = array_merge($blocks[1], ['T1'], $blocks[0]);
}
if (value('AN82') == 2) {
  $pageOrder = array_merge($blocks[1], ['T1'], $blocks[0]);
} else {
  $pageOrder = array_merge($blocks[0], ['T1'], $blocks[1]);
}

//Die Seite ergänzen, wo es nachher weiter geht
$blocks[]='S80';
  // Reihenfolge zwischenspeichern, um spätere Änderung zu vermeiden
  registerVariable($blocks);
}
setPageOrder($blocks);

Ich habe auch schon probiert die Arrays oben zu benennen (mit 0 und 1) oder zwei Zettel pro Runde zu ziehen (ist beides wieder entfernt), auch habe ich im PHP-Code dem Zufallsgenerator noch die Option für den Wert 2 definiert, dazu habe ich noch geschaut, dass alle Seiten im richtigen Array definiert sind. Leider hat nichts davon das Problem gelöst. Teilweise wurden sogar die Antwortmöglichkeiten rotiert, was in einem anderen Code vorher definiert ist...
by SoSci Survey (305k points)
Nun, lassen Sie bitte das zweite IF weg (das ist redundant) und arbeiten Sie ab dort mit der Variablen $pageOrder, nicht mit $blocks. Außerdem sollten Sie bei isset() und registerVariable() auch die Variable $pageOrder eintragen.
by s162378 (120 points)
Vielen lieben Dank!!!!!!!!!!!!!

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

...