0 votes
in SoSci Survey (dt.) by s166991 (130 points)

Liebes Support Team,

in meinem Fragebogen befindet sich ein Block mit randomisierten Seiten und fortlaufender Aufgabennummerierung. Dafür habe ich folgenden Code verwendet:

  //Seitenreihenfolge
if (!isset($seiten)) {
    $DA = array('DA1','DA2','DA3','DA4','DA5','DA6');
    shuffle($DA);
    $DA = array_chunk($DA, 3);
    $WD = array('WD1', 'WD2');
    shuffle($WD);
    $seiten = array_merge($DA[0], $WD, $DA[1]);
    $seiten[] = 'MZ'; 
    registerVariable($seiten);

}
setPageOrder($seiten);

registerVariable($counter);

Das funktioniert auch soweit gut. Nur, wenn eine Aufgabe nicht vollständig beantwortet wurde, kommt es zu Problemen bei der Aktualisierung der Aufgabennummerierung.

Für die fortlaufende Aufgabennummerierung habe ich folgenden Code verwendet:

   if(getRoute()== 'next'){
    $counter = $counter + 1;
}
replace('%zahl%',$counter);

und zusätzlich auf jeder Seite des Blocks ein Textfeld mit

Aufgabe %zahl%

vor der Aufgabe positioniert.

Wenn eine Aufgabe nicht vollständig beantwortet wurde, wird eine Fehlermeldung angezeigt und man wird gebeten, die fehlenden Angaben zu machen. Wenn diese dann gemacht wurden und man auf "Weiter" klickt, wird die gleiche Seite mit der nun vollständig ausgefüllten Aufgabe noch einmal präsentiert, allerdings springt die Aufgabennummer weiter.

Wie kann ich sicherstellen, dass zum einen nicht die gleiche Seite mit der vollständig ausgefüllten Aufgabe noch einmal angezeigt wird und zum anderen die Aufgabennummerierung sich erst mit der nächsten Seite (und der tatsächlich nächsten Aufgabe) anpasst?

Vielen Dank im Voraus für Ihre Hilfe!

by SoSci Survey (330k points)
Könnten Sie in Ihrer Frage bitte die Debug-Information ergänzen, die angezeigt wird, wenn eine Frage nicht beantwortet wurde - und jene, die dann angezeigt wird, wenn sie beantwortet wurde? Danke.

1 Answer

0 votes
by s166991 (130 points)

Vielen Danke für die Rückmeldung. Ich habe festgestellt, dass das Problem nur in dem Timer-Block auftritt. Ich habe es mehrmals durchprobiert und es tritt tatsächlich nur bei einzelnen Durchgängen auf, in anderen klappt das Aktualisieren auch bei fehlender Antwort einwandfrei. Kann das etwas mit der Internetverbindung zu tun haben?

hier die Debug-Information:

[Information] Die Verweildauer auf Seite 20 betrug zusätzliche 4 Sekunden
[Verarbeitung] Lese Antworten von Seite 20
[Information] Antwort auf DA04_01 = 3
[Information] Antwort auf DA04_02 = 2
[Information] Antwort auf DA04_03 = 2
[Information] Antwort auf DA04_04 = 2
[Information] Antwort auf DA04_05 = 2
[Warnung] Der Wert von Variable DA04_06 wurde geändert
[Information] Antwort auf DA04_06 = 2
[Information] Fragen bisher zu 100% vollständig beantwortet
[Information] Entsprechend der vorher festgelegten Seitenabfolge wird Seite 20 [DA4] angezeigt
[Verarbeitung] Erstelle Seite 20 in Fragebogen base
[Information] value("GZ01") = 4
[Information] value("GZ01") = 4
[Inhalt] Erstelle Frage ZD04
[Inhalt] Zeige Text zahl
[Inhalt] Erstelle Frage DA04
[Information] Folgende Platzhalter sind vorbereitet:
%timeLeft% = (Text) 831
%zahl% = (Text) 2

by SoSci Survey (330k points)
> Kann das etwas mit der Internetverbindung zu tun haben?

Unwahrscheinlich...

> Ich habe festgestellt, dass das Problem nur in dem Timer-Block auftritt.

Möchten Sie einmal den verwendeten PHP-Code posten?

> [Verarbeitung] Lese Antworten von Seite 20
> ...
> [Information] Entsprechend der vorher festgelegten Seitenabfolge wird Seite 20 [DA4] angezeigt

Das Problem ist hier nur teilweise erkennbar. Könnte es vielleicht sein, dass Sie irgendwo in diesem Block eine Seite haben, die manchmal Inhalte zeigt und manchmal nicht? Das macht mit setPageOrder() regelmäßig Probleme (die leider erst in der nächsten größeren Programmversion behoben werden können, weil dafür umfassende Änderungen notwendig sind).
by s166991 (130 points)
Vielen Dank für die Rückmeldung.

Vor dem Timer-Block kommt auf einer Seite zuerst eine Gruppenzuordnung, da 2 von 4 Gruppen die Aufgaben in einem Zeitrahmen erfüllen müssen.
Dann folgt auf der nächsten Seite der PHP-Code für den Timer:

// Ablauf der Zeit als Variable $timeout speichern
if (!isset($timeout)) {
    if(value('GZ01') == 3 OR value('GZ01') == 4){
        $timeout = strtotime('+ 14 minutes'); //14
        registerVariable($timeout);
    }
}

wiederum auf der nächsten Seite der Code für die Seitenreihenfolge (s.oben)

und dann die Seiten mit den einzelnen Aufgaben (die randomisiert werden). Allerdings enthält jede Seite eine Aufgabe, dort gibt es also keine Seite, die manchmal Inhalte anzeigt und manchmal nicht. Auf jeder Aufgabenseite steht folgender Code:

// Filter: Zeit abgelaufen? --> nur bei Interventionsgruppen!
if(value('GZ01') == 3 OR value('GZ01') == 4){
    if (time() > $timeout) {
    goToPage('TIMERENDE');
    }
    $timeLeft = $timeout - time();
    replace('%timeLeft%', $timeLeft);
    question('ZD04');
}

if(getRoute()== 'next'){
    $counter = $counter + 1;
}
replace('%zahl%',$counter);

nach dem Code folgt ein Textfeld mit: Aufgabe %zahl%

und dann die jeweilige Aufgabe

Ich hoffe, das war halbwegs verständlich.
by SoSci Survey (330k points)
Ich gehe davon aus, dass der Timer noch nicht abgelaufen ist.

> nach dem Code folgt ein Textfeld mit: Aufgabe %zahl%

Dann sollte die Seite nicht leer sein. Zeigt die Debug-Information auf der vorherigen Seite irgendetwas an wie "Seite X zeigt keine Inhalte, automatisch weiter mit Seite Y"?

Ach ja, zumindest für die Zählung habe ich eine Lösung, denke ich. Ersetzen Sie das

if(getRoute()== 'next'){
    $counter = $counter + 1;
}

Doch bitte einmal mit

$counter = loopIndex();

Der loopIndex() kann nämlich auch in einer setPageOrder()-Seitenabfolge eingesetzt werden.

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

...