0 votes
in SoSci Survey (dt.) by s021792 (155 points)

Hi,

ich habe hier gelesen, dass es bei der Kombinierten Verwendung von setPageOrder und loopPage zu Problemen kommt. Komme aber in meinem Fall auf keine Lösung.

Ich nutze setPageOrder() zusammen mit shuffel() um die Reihefolge von mehreren Seiten zu randomisieren. Auf einer der Seiten verwende ich loopPage() um mehrere änliche Textelemente und Fragen randomisiert aufzurufen.

Nach der Seite in der loopPage() verwendet wird, wird der Fragebogen aber "normal" weitergeführt ohne die setPageOrder() zu berücksichtigen.

Wie lässt sich das beheben?

Hier ist der bisher von mir verwendedete PhP-Code für die Seite auf der die Page Order bestimmt werden soll. Es sollen Blöcke randomisert werden, so dass im Block E die Reihenfolge der Seiten bestehen bleibt.

  // Seitenkennungen als Array speichern, E als Block mit restlichen Seiten rotieren
if (!isset($rotation)) {
    $rotation = array(
                'A' => 'Seite1',
                'B' => 'Seite2',
                'C' => 'Seite3',
                'D' => 'Seite4',
                'E' => array('Seite5','Seite6','Seite7','Seite8',)
                );
    shuffle($rotation);
// Jetzt das Ergebnis noch als Seitenabfolge festlegen
    registerVariable($rotation);
};


// Weiter soll es anschließend mit Seite 'Demographics' gehen
setPageOrder($rotation, 'Demographics', 'end1');

Auf Seite7 wird dann loopPage() folgendermaßen verwendet um Texte und entsprechende Fragen zu randomisieren:

if (!isset($blocks)) {
  // Liste mit Text-Kennungen und zugehöriger Frage
  $blocks = [
    ['d1_d_1','DV01'],
    ['d2_d_2','DV02'],
    ['d3_d_3','DV03'],
    ['d4_d_4','DV04'],
    ['d5_d_5','DV05'],
  ];
 
  // Die Liste mischen
  shuffle($blocks);
  // Die Listen auf allen Seiten verfügbar machen
  registerVariable($blocks);
}

// Über die Seite loopen und erneut alle Fragen aufrufen
$i = loopPage(count($blocks));


text($blocks[$i][0]);
question($blocks[$i][1]);

Liegt das an der Wiederholten Verwendung von registerVariable()? Was kann ich tun, damit es nach Seite7 mit der in $rotation festgelegten Reihenfolge weiter geht?

1 Answer

0 votes
by s021792 (155 points)
 
Best answer

ok habe den Post gefunden und die darin beschriebene Lösung hat auch für mich funktioniert:

statt loopPage() mitloopIndex() arbeiten und im PhP ni der die PageOrder festgelegt wird die jeweilige Seite mehrfach wiederholen. In meinem Fall folgendermaßen:

if (!isset($rotation)) {
    $rotation = array(
                'A' => 'Seite1',
                'B' => 'Seite2',
                'C' => 'Seite3',
                'D' => 'Seite4',
                'E' => array('Seite5','Seite6','Seite7','Seite7','Seite7','Seite7','Seite7','Seite8',)
                );
    shuffle($rotation);
// Jetzt das Ergebnis noch als Seitenabfolge festlegen
    registerVariable($rotation);
};

und dann auf Seite7 im PhP

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

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

...