0 votes
in SoSci Survey (dt.) by s189797 (110 points)

Hallo,

ich versuche zwei verschiedene Funktionen zu verbinden. Zum einen möchte ich bestimmte Fragen mittels der "Nicht zurücklegen" Methode rotieren lassen, aber auch sicherstellen, dass Partizipierende nach 30 Sekunden zur nächsten Frage gebracht werden.

Momentan habe ich auf meiner Fragebogenseite folgende Bausteine:

PHP-Code für den Timer

if (!isset($time0)) {
  $time0 = time();
  registerVariable($time0);  // Die Variable $time0 auch nach Ende des PHP-Codes aufbewahren
}
// Prüfung, ob die Zeit schon abgelaufen ist
// (z.B. weil der Teilnehmer die Seite neu geladen hat)
$timer = 30;  // Der Teilnehmer hat 30Sekunden Zeit zur Bearbeitung
if (time() >= $time0 + $timer) {
  goToPage('next');
}
// Die verbleibende Zeit muss auch dem JavaScript-Code bekannt gemacht werden
$remain = $time0 + $timer - time();
replace('%remain%', $remain);

Java Script für den Timer:

<script type="text/javascript">
<!--
 
// Funktion zur Weiterleitung
function weiter() {
  // Eine Meldung anzeigen (optional)
  alert("Die Zeit ist vorbei.");
  // Den Teilnehmer zur nächsten Seite weiterleiten
  SoSciTools.submitPage();
}
 
// Weiter-Knopf ausblenden (optional)
SoSciTools.submitButtonsHide();
 
// Initialisierung der Weiterleitung
SoSciTools.attachEvent(window, "load", function(evt) {
  // Timer für automatische Weiterleitung starten
  window.setTimeout(weiter, %remain% * 1000);
});
 
// -->
</script>

Randomisierer Baustein

PHP-Code für den Randomisierer:

$fragen = valueList('MP14', NULL, 'label');
$kennung = loopPage($fragen);
question($kennung);

So wie ich verstehe, besteht das Problem darin, dass der Randomisierer die Seite nur aktualisiert mit einer neuen Frage und keine neue Seite erstellt, wieso der Timer nach 30 Sekunden dann zu der letzten Fragebogenseite leitet und nicht die nächste Frage aus dem Randomisierer darstellt.

Weiß jemand wie ich das beheben kann?

1 Answer

0 votes
by SoSci Survey (305k points)

So wie ich verstehe, besteht das Problem darin, dass der Randomisierer die Seite nur aktualisiert mit einer neuen Frage und keine neue Seite erstellt

Das ist nicht ganz korrekt.

Die Ursache sind diese Zeilen:

if (!isset($time0)) {
  $time0 = time();
  registerVariable($time0);  // Die Variable $time0 auch nach Ende des PHP-Codes aufbewahren
}

Diese sind notwendig, wenn (a) ein Timer über mehrere Seiten laufen soll oder (b) der Timer beim Neu-Laden der Seite nicht neu starten soll.

Falls Sie auf die fixe Sperre beim Neu-Laden der Seite verzichten können, dann lassen Sie diesen Teil weg. Wenn Sie darauf nicht verzichten können, versuchen Sie folgende Modifikation:

if (!isset($time0) || (getRoute() == 'next')) {
  $time0 = time();
  registerVariable($time0);
}

Dadurch wird der Timer beim Klick zur nächsten Seite ("next") automatisch neu gestartet. Eine weitere Seite innerhalb eines Loop gilt dabei auch als nächste Seite.

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

...