0 votes
ago in SoSci Survey (dt.) by s057044 (110 points)
edited ago by SoSci Survey

Hallo Support-Team,

ich brauche Hilfe bei der Konfiguration einer mehrseitigen Schleife mittels loopToPage(). Mein Setup verhält sich trotz verschiedener Anpassungsversuche fehlerhaft (Seiten werden übersprungen oder fälschlicherweise zusammengezogen).

Das Ziel:
Es sollen 20 Stimuli in einer Schleife über drei Seiten abgefragt werden:

Seite STIM: Zeigt den Stimulus und eine Ja/Nein-Auswahl (F001). Bei „Nein“ soll die Runde sofort abgebrochen und der nächste Stimulus geladen werden. Bei „Ja“ geht es weiter.

Seite FOL 1: Enthält einen Text-Reminder und eine Pflichtfrage (F002). Nach einer "Ja"-Auswahl soll zwingend die nächste Seite, also FOL 2, folgen, sonst soll die Schleife verlassen werden.

Seite FOL 2: Enthält ein offenes Textfeld (F004), das mit dem aktuellen Stimulus vorausgefüllt ist. Erst danach soll die Schleifenrunde enden.

Das aktuelle Problem:
Egal ob ich das Schleifenende im loopToPage() auf FOL 2 oder auf die nachfolgende Seite K setze: Wenn der Teilnehmer zweimal mit „Ja“ antwortet (auf STIM und auf FOL 1), überspringt der Fragebogen die Seite FOL 2 komplett und springt entweder sofort zum nächsten Stimulus oder direkt auf die Seite K (Frage nach dem Abschlusskommentar). Die Pflichtfrage auf FOL 1 scheint das reguläre Weiterblättern auf die direkt folgende Seite zu blockieren oder den Schleifenzähler vorzeitig hochzusetzen.

Versuche mit setPageOrder(), goToPage() oder value()-Filtern führten entweder zu Geisterseiten (Page-Merging, bei dem Fragen der Folgeseiten unten angehängt wurden) oder zum vollständigen Überspringen des Textfeldes.

Die aktuelle Code-Struktur auf den Seiten:

Vorgeschaltete Seite (Initialisierung):

PHP

if (!isset($stimuli)) {
    $stimuli = array(1 => 'Ich wollte mit ihm kämpfen...', /* ... 20 Sätze ... */);
    $reihenfolge = array_keys($stimuli);
    shuffle($reihenfolge);
    registerVariable($stimuli);
    registerVariable($reihenfolge);
    $currentIdx = 0;
    registerVariable($currentIdx);
}
goToPage('next');
Seite STIM:

PHP
$i = loopToPage('K', 20); // 'K' ist die Seite nach der Schleife
$currentIdx = $i;
registerVariable($currentIdx);
$satzID = $reihenfolge[$currentIdx];
$aktuellerSatz = $stimuli[$satzID];
replace('%stimulus%', $aktuellerSatz);
// Darunter platziert: Frage F001 (Ja/Nein)
Seite FOL 1:

PHP
if (value('F001') == 2) { goToPage('K'); } // Abbruch bei "Nein"
$aktuellID = $reihenfolge[$currentIdx];
$aktuellerText = $stimuli[$aktuellID];
replace('%stimulus%', $aktuellerText);
html('<p>Zur Erinnerung: %stimulus%</p>');
question('F002'); // Pflichtfrage
setPageOrder('FOL 2');
Seite FOL 2:

PHP
$aktuellID = $reihenfolge[$currentIdx];
$aktuellerText = $stimuli[$aktuellID];
question('F004', array('F004_01' => $aktuellerText));
setPageOrder('K');

Könnten Sie mir bitte mitteilen, an welcher Stelle meine Logik mit dem internen Page-Processing von SoSci Survey kollidiert und wie der korrekte Befehlssatz lauten muss, damit FOL 2 bei einem „Ja“ zuverlässig geladen wird?

Die URL des Fragebogens lautet: https://survey.ifkw.lmu.de/verstaendlich/.

Vielen Dank für Ihre Unterstützung!

1 Answer

0 votes
ago by SoSci Survey (375k points)

Sie verwenden die Variablen $currentIdx in zwei Funktionen - einmal per registerVariable(), dann aber auch in Verbindung mit loopToPage(). Das sollten Sie aufräumen, verwenden Sie stattdessen loopIndex().

Generell gibt es einen bekannten (und für die schnelle Lösung zu tief in SoSci Survey verankerten) Fehler beim Zusammenspiel von Seitenabfolgen (inkl. loopPage()) und leeren Seiten, also Seiten, die keinen Inhalt zeigen. Im PHP-Code sehe ich keine leeren Seiten - aber falls Sie im Look noch andere Seiten haben, prüfen sie selbige daraufhin.

Nach einer "Ja"-Auswahl soll zwingend die nächste Seite, also FOL 2, folgen

Ein Problem, welches ich im PHP-Code oben sehe, ist die Mischung von loopPage() und setPageOrder('FOL 2'). Letzteres bricht die vorher mittels loopToPage() definierte Seitenabfolge ab. Der korrekte Weg zum Abbruch wäre aber ein goToPage(), weil eine Änderung der Seitenabfolge weitere, unbeabsichtigte Nebenwirkungen haben kann.

Wenn Sie Seiten innerhalb des Loop überspringen möchten, verwenden Sie goToPage(). Wenn die Seitenanfolge einfach weiter laufen soll, lassen Sie den Befehl einfach weg.

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

...