0 votes
in SoSci Survey (dt.) by s109993 (12.0k points)
edited by s109993

Hallo,

verschiedene SoSci Fragen sollen über ein Iframe in Lime Survey eingebunden werden. Jetzt sind alle SoSci Fragen auf verschiedenen Seiten in Lime Survey platziert. Wenn jemand eine SoSci Frage quasi leer lässt, würde die beim nächsten Aufruf des iframes wieder aufgerufen werden. Um das zu verhindern, hatte ich zwei Ideen:

  1. Der URL einen Seiten Parameter mitgeben, mit dem über den iframe eine bestimmte Seite des Fragebogens aufgerufen werden kann.

  2. Der URL irgendwie klar machen, dass die letzte Frage leer gelassen wurde und deshalb die nächste Seite angezeigt werden soll.

Ist irgendeine der beiden Lösungen umsetzbar, und wenn ja- falls nicht, gibt es eine andere Möglichkeit?


1 Answer

0 votes
by SoSci Survey (327k points)

Ich bin der Idee, einen Fragebogen über unterschiedliche iFrames einzubinden, gegenüber sehr kritisch. Welchen Hintergrund hat es denn, LimeSurvey und SoSci Survey zumischen? Das scheint mir die Komplexität massiv zu erhöhen...

Der URL einen Seiten Parameter mitgeben, mit dem über den iframe eine bestimmte Seite des Fragebogens aufgerufen werden kann.

Normalerweise will man den Befragten ja nicht erlauben, dass sie die Seite selbst auswählen. Aber mit ein wenig PHP Code auf jeder Seite kann man das schon machen. Und zwar mit einer Kombination aus readGET() und goToPage().

Der URL irgendwie klar machen, dass die letzte Frage leer gelassen wurde und deshalb die nächste Seite angezeigt werden soll.

LimeSurvey könnte beim Abschicken der eigenen Seite den "Weiter"-Knopf im iFrame klicken. Aber das würde wohl einiges Gefiezel mit JavaScript erfordern und ob es immer zuverlässig funktioniert ... ich denke, die erstgenannte Option ist zuverlässiger.

by s109993 (12.0k points)
<blockquote>
Ich bin der Idee, einen Fragebogen über unterschiedliche iFrames einzubinden, gegenüber sehr kritisch. Welchen Hintergrund hat es denn, LimeSurvey und SoSci Survey zumischen?
</blockquote>

Der Auftraggeber benutzt Lime Survey, einige Daten (vor allem Adressdaten) müssen allerdings bei uns auf SoSci abgespeichert werden.

<blockquote>
Normalerweise will man den Befragten ja nicht erlauben, dass sie die Seite selbst auswählen. Aber mit ein wenig PHP Code auf jeder Seite kann man das schon machen. Und zwar mit einer Kombination aus readGET() und goToPage().
</blockquote>

Die URL von SoSci URL wäre doch nicht einsehbar für den User über den iframe, sondern eben nur die von Lime Survey- oder sehe ich das falsch?

<blockquote>
Und zwar mit einer Kombination aus readGET() und goToPage().
</blockquote>

Könnten Sie mir an einem kurzen Beispiel zeigen wie das aussehen könnte?

Edit: Funktionieren html tags nicht in der Kommentar Funktion?
by SoSci Survey (327k points)
> Die URL von SoSci URL wäre doch nicht einsehbar für den User über den iframe, sondern eben nur die von Lime Survey- oder sehe ich das falsch?

Ich meinte mit meinem Hinweis erstmal "normale" Befragungen. Aber ja, wer die Developer-Tools im Browser findet (https://www.soscisurvey.de/help/doku.php/de:general:browser-tools) kann auch die URL des iFrame einsehen und nach Belieben manipulieren.

> Könnten Sie mir an einem kurzen Beispiel zeigen wie das aussehen könnte?

if (readGET('page', false) == 3) {
  goToPage('page3');
}
if (readGET('page', false) == 4) {
  goToPage('page4');
}
if (readGET('page', false) == 5) {
  goToPage('page5');
}

Dieser PHP-Code würde einfach am Anfang jeder Seite stehen.

> Funktionieren html tags nicht in der Kommentar Funktion?

Nein, nur Text :)
by s109993 (12.0k points)
edited by s109993
Vielen Dank- nur zum Verständnis,  bei sieben Seiten würde ich sieben if statements schreiben und alle sieben auf jede Seite setzen?!  Ich kann es leider nicht testen, da ich kein Zugriff auf Lime Survey habe, deswegen noch einmal die Nachfrage. Und damit das funktion. Und zweite Frage- ich muss der URL ja irgendwie noch eine Seite übergeben, sonst kann ich doch mit readGET nichts bekommen
by SoSci Survey (327k points)
Zum Testen brauchen Sie kein LimeSurvey - die URLs können Sie ja auch "einfach so" im Browser aufrufen. Aber ja, genau, so würde das funktionieren. Vermutlich müssten Sie noch einen Filter mit getRoute() ergänzen, damit der Fragebogen nicht mehrfach neu lädt.

if (getRoute() != 'jump') {
   // Hier jetzt die 7 Filter von oben
}
by s109993 (12.0k points)
Wenn ich es ausprobiere und die folgenden Parameter verwende: ?l=tur&page=8
Dann bekomme ich die folgende Fehlermeldung: The interview tried to jump to page no. 8 (ID page8) that has already been processed when running the current output. Please check if goToPage() creates a loop.
by SoSci Survey (327k points)
Ja, das hatte ich befürchtet - daher der zusätzliche Filter mit dem getRoute().

Fügen Sie doch bitte folgende Zeile vor dem Filter (also ganz oben) ein und prüfen Sie, was angezeigt wird:

html('<p>Route: '.getRoute().'</p>');
by s109993 (12.0k points)
if (getRoute() != 'jump') {
html('<p>Route: '.getRoute().'</p>');
  if (readGET('page', false) == 1) {

-----------------------------------
Habe es so eingebaut auf allen Seiten, das Ergebnis, wenn ich wieder versuche auf Seite 8 zu kommen ( ?l=tur&page=8):

Route: start

Route: start

"The interview tried to jump to page no. 8 (ID page8) that has already been processed when running the current output. Please check if goToPage() creates a loop."
by SoSci Survey (327k points)
Okay, ungünstig. SoSci Survey weiß in dem Moment nicht, dass bereits ein Sprung erfolgte. Ich überlege mir dafür noch eine Lösung. Sollte nicht allzu lange dauern.
by SoSci Survey (327k points)
Okay, ich hatte zu kompliziert gedacht. Lassen Sie einfach jeweils das IF weg, welches auf die aktuelle Seite verweisen würde. Den Filter mit getRoute() lassen Sie bitte auch weg.

Also auf Seite 3 z.B.

if (readGET('page', false) == 4) {
  goToPage('page4');
}
if (readGET('page', false) == 5) {
  goToPage('page5');
}


Auf Seite 4 entsprechend:

if (readGET('page', false) == 3) {
  goToPage('page3');
}
if (readGET('page', false) == 5) {
  goToPage('page5');
}
by s109993 (12.0k points)
Super, scheint nach meinen Tests zu funktionieren. Dann gebe ich das einmal zu den LimeSurvey Leuten rüber :) Vielen Dank!
by s109993 (12.0k points)
Doch noch ein ganz kleines Problemchen (hoffentlich): Ich muss zweimal auf "Weiter" klicken, damit es auf die nächste Seite geht. Aber schon beim ersten klick auf Weiter werden die Daten abgespeichert. Ich weiß auch nicht, ob das ein Problem ist, da wir den Weiter Button soweiso mit redicrect auf Lime Survey machen werden.
by SoSci Survey (327k points)
> Ich muss zweimal auf "Weiter" klicken, damit es auf die nächste Seite geht.

Was sagt denn die Debug-Information dazu?

Eventuell müssen Sie den Parameter anders benennen als "page", weil sich das mit den von SoSci Survey intern übermittelten Daten überschneidet.

> da wir den Weiter Button soweiso mit redicrect auf Lime Survey machen werden.

Was genau haben Sie vor? Wenn der Weiter-Knopf die Formular-Daten nicht an SoSci Survey schickt, dann werden die Daten nicht gespeichert.
by s109993 (12.0k points)
*bei Öffnen von Seite 6*
[Information]    Interview gestartet (neue Nummer 39)
[Information]    Der Fragebogen base im Projekt neps_adressportal_eltern wird verwendet
[Verarbeitung]    Erstelle Seite 6 in Fragebogen base
[Inhalt]    Erstelle Frage S117


*Nach dem ersten Klick auf "Weiter" (noch Seite 6)*

[Information]    Interview Nummer 38 wird fortgesetzt
[Information]    Der Fragebogen base im Projekt neps_adressportal_eltern wird verwendet
[Information]    Die Verweildauer auf Seite 6 war 9 Sekunden
[Verarbeitung]    Lese Antworten von Seite 6
[Information]    Antwort auf S117_01 = test
[Information]    Fragen bisher zu 100% vollständig beantwortet
[Verarbeitung]    Erstelle Seite 7 in Fragebogen base
[Verarbeitung]    Springe zur Seite page6 (Nr. 6)
[Verarbeitung]    Erstelle Seite 6 in Fragebogen base
[Inhalt]    Erstelle Frage S117


*Nach dem zweiten Klick auf "Weiter" (Seite 7)*
[Information]    Interview Nummer 38 wird fortgesetzt
[Information]    Der Fragebogen base im Projekt neps_adressportal_eltern wird verwendet
[Information]    Die Verweildauer auf Seite 6 betrug zusätzliche 55 Sekunden
[Verarbeitung]    Lese Antworten von Seite 7+6
[Information]    Antwort auf S117_01 = test
[Information]    Fragen bisher zu 100% vollständig beantwortet
[Verarbeitung]    Erstelle Seite 7 in Fragebogen base
[Inhalt]    Erstelle Frage S118


> da wir den Weiter Button soweiso mit redicrect auf Lime Survey machen werden.
Den Teil haben wir schon getestet. Einfach das das der Weiter Button in SoSci den Weiter Button in LimeSurvey aktiviert. Scheint auch die Daten zu speichern.
by SoSci Survey (327k points)
> [Verarbeitung]    Erstelle Seite 7 in Fragebogen base
> [Verarbeitung]    Springe zur Seite page6 (Nr. 6)

Probieren Sie mal, den Parameter "page" umzubenennen - für mich sieht das sehr danach aus, dass hier die Überschneidung zwischen POST- und GET-Parameter den unbeabsichtigten Sprung auslöst.
by s109993 (12.0k points)
Hallo, ich habe noch eine ergänzende Frage, und da es ohne Kontext nicht nachvollziehbar ist, wollte ich die Frage hier stellen:

Der Kunde hat jetzt zusätzlich noch gefordert, die Fragen als Pflichtfragen zu stellen. Seitdem ich das gemacht habe, gibt es Situationen, bei welchen die Frage nicht mehr angezeigt wird, und gleichzeitig der Fehler kommt "Sie haben die Frage nicht vollständig angezeigt".

Leider kann ich den Fehler ohne LimeSurvey iframe nicht reproduizieren, allerdings habe ich die Vermutung, dass sich der readGET code mit den Pflichtfragen nicht verträgt. Könnte das eine Möglichkeit sein?

Folgender Code ist angegeben auf jeder Seite (wie oben auf der Seite besprochen):

if (readGET('pagina', false) == 1) {
  goToPage('pagina1');
}

if (readGET('pagina', false) == 2) {
  goToPage('pagina2');
}
if (readGET('pagina', false) == 3) {
  goToPage('pagina3');
}
if (readGET('pagina', false) == 5) {
  goToPage('pagina5');
}
if (readGET('pagina', false) == 6) {
  goToPage('pagina6');
}
if (readGET('pagina', false) == 7) {
  goToPage('pagina7');
}
if (readGET('pagina', false) == 8) {
  goToPage('pagina8');
}

Die Fragen auf jeder Seite sind Pflichtfragen (über die Frage eingestellt). Auf zwei Seiten musste ich die Pflichfrage als Code setzen. Dann habe ich den Code unterhalb von dem oberen Teil platziert:

if (
  (trim(value('S117_01')) == '') &&
  (value('S120') < 1)
) {
  repeatPage('TX03');
}

Doe beiden Fehler habe ich in der Frage oben als Screenshot eingefügt.

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

...