0 votes
in SoSci Survey (dt.) by s144058 (140 points)
edited by SoSci Survey

Guten Tag!
Ich habe ein Itempool von 16 Texten vorliegen, welche erst rotiert werden sollen, und anschließend der Versuchsperson 6 Sekunden lang präsentiert werden sollen. Anschließend soll automatisch der nächste der 16 Texte folgen, welcher ebenfalls für 6 Sekunden angezeigt werden soll usw.

Folgender PHP-Code hat als Timerfunktion an sich gut funktioniert.

if (!isset($time0)) {
  $time0 = time();
  registerVariable($time0);  
}
$timer = 60;  // Der Teilnehmer hat 1 Minute (60 Sekunden) Zeit zur Bearbeitung
if (time() >= $time0 + $timer) {
  goToPage('next');
}
$remain = $time0 + $timer - time();
replace('%remain%', $remain);

Nur wie füge ich diesen Code in meinen Rotations-PHP-Code ein?

if (!isset($blocks)) {
  $blocks = array( 
    array('M001', 'Bild.PNG'),
    array('M002', 'Bild.PNG'),
    array('M003', 'Bild.PNG'),
    array('M004', 'Bild.PNG'),
    array('M101', 'Bild.PNG'),
    array('M102', 'Bild.PNG'),
    array('M103', 'Bild.PNG'),
    array('M104', 'Bild.PNG'),
    array('M201', 'Bild.PNG'),
    array('M202', 'Bild.PNG'),
    array('M203', 'Bild.PNG'),
    array('M204', 'Bild.PNG'),
    array('M301', 'Bild.PNG'),
    array('M302', 'Bild.PNG'),
    array('M303', 'Bild.PNG'),
    array('M304', 'Bild.PNG')
  );
 

  shuffle($blocks);

  registerVariable($blocks);
}
 

$i = loopPage(count($blocks));

html('<p><img src="'.$blocks[$i][1].'" alt="Wahlplakat"></p>');

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

Vielen Dank für eure Hilfe

1 Answer

+1 vote
by SoSci Survey (308k points)

wie füge ich diesen Code in meinen Rotations-PHP-Code ein?

Wenn Sie damit leben können, dass eine Person den Timer prinzipiell durch Neu-Laden der Seite umgehen (verlängern) könnte (was Sie aber in den Daten sehen würden), dann lassen Sie einfach das isset() weg. Und damit fällt dann eigentlich vom Timer alles weg bis auf diese Zeile:

replace('%remain%', 6);

Und darunter natürlich der Textbaustein mit dem JavaScript-Code.

Wenn Sie das Neu-Laden auch abdecken möchten (sehe ich hier nicht als notwendig), dann müssten Sie für $time0 ein Array basteln und auf jeder Seite einen anderen Eintrag daraus setzen/verwenden.

by s144058 (140 points)
Vielen Dank für die schnelle Antwort.
Wenn ich sie richtig verstanden habe, sollte ich vom Timer-Code ausschließlich

replace('%remain%', 6);

einfügen, und anschließend den restlichen Code?
Ich bin leider nicht sehr versiert im Umgang mit Coding. Ihre Lösung hat entweder keinen Timer erzeugt, oder eine Fehlermeldung produziert, was wahrscheinlich daran lag, dass ich sie falsch verstanden oder den Code in der falschen Zeile eingefügt habe.

Das Neu-Laden muss tatsächlich nicht verdeckt werden, aber der Weiter-Knopf sollte schon verdeckt sein. Wie kann man das noch ergänzen?
by SoSci Survey (308k points)
Haben Sie unter dem PHP-Code mit dem replace() auch den JavaScript-Code eingebunden?

Wenn ja, was wird denn an Fehlermeldungen angezeigt ... direkt im Fragebogen UND in der JavaScript-Fehlerkonsole Ihres Browsers?
by s144058 (140 points)
Welchen JavaScript Code meinen sie?
by SoSci Survey (308k points)
Jenen, welcher den Timer in der Fragebogen-Seite implementiert. Es ist der Code, über welchem in der Anleitung (https://www.soscisurvey.de/help/doku.php/de:create:timer-submit) steht:

> Für den eigentlichen Timer legen Sie im Fragenkatalog in einer Rubrik mit Neuer Text oder unter Textbausteine u. Beschriftung einen neuen Textbaustein an.

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

...