0 votes
in SoSci Survey (dt.) by s130443 (185 points)

Liebes Support-Team,
ich möchte gerne an bestimmten Stellen im Fragebogen zusätzliche Seiten einfügen. Dadurch, dass die Seiten im Fragebogen (bzw. eigentlich Seiten-Blöcke) randomisiert dargeboten werden, benötige ich hierfür einen Automatismus.

Ich habe das Fragebogendesign als Bild angehängt.
Es geht hier darum, dass die Teilnehmenden mit 2 verschiedenen Personen (A und B) Interaktionsrunden "spielen". Eine Runde besteht aus 4 Fragebogenseiten. Die Runden sollen komplett randomisiert dargeboten werden (auch ob man gegen A oder B spielt, das soll frei variieren).
Nun soll nach jeder zweiten Runde mit einer Person (A oder B) eine zusätzliche Seite angezeigt werden.
Dadurch, dass die Runden randomisiert dargestellt werden, weiß ich ja im Vorhinein nicht, wann eine Person bereits das zweite Mal gegen Person A oder B "spielt", deswegen müsste das über php-Code ausgelesen werden und die Zusatzseite bei Bedarf präsentiert werden.

Können Sie sich unter dem Design etwas vorstellen? Ich freue mich über Unterstützung bei der Umsetzung, da ich hier sonst nicht weiterkomme...

Beste Grüße

Fragebogendesign mit Bonus-Seiten

1 Answer

+1 vote
by SoSci Survey (306k points)

Die Runden sollen komplett randomisiert dargeboten werden

In Ordnung - dafür reicht ein Zufallsgenerator mit 12 Zetteln (A1 bis B6), aus dem pro Interview auch 12 Zettel gezogen werden.

Sie können statt "A1" natürlich auch gleich "A1a-A1d" als einen Zettel in den Zufallsgenerator legen, dann wären die 4 Seiten pro Block einfach abzubilden. Allerdings scheint es mir nicht ideal, dass man 12 x 4 = 48 Seiten im Fragebogen anlegt. Ich würde erstmal davon ausgehen, dass man das auch eleganter lösen kann. Dazu gleich eine Rückfrage: Was wird denn auf den 4 Seiten eines Blocks genau angezeigt/abgefragt?

Nun soll nach jeder zweiten Runde mit einer Person (A oder B) eine zusätzliche Seite angezeigt werden.

Im Prinzip müssen wir also nur von vorne nach hinten durch das Array gehen und mitzählen.

$abfolge = value('RG04', NULL, 'label');
$countA = 0;
$countB = 0;
$abfolgePlus = [];
foreach ($abfolge as $index => $blockID) {
  // Blöcke einfach kopieren
  $abfolgePlus[] = $blockID;
  // Prüfen, ob wir dahinter noch eine Bonus-Seite brauchen
  if ($blockID[0] == 'A') {
    $countA++;
    if ($countA % 2 == 0) {
      $abfolgePlus[] = "Bonus-A";
    }
  } elseif ($blockID[0] == 'B') {
    $countB++;
    if ($countB % 2 == 0) {
      $abfolgePlus[] = "Bonus-B";
    }
  }
}

Dieser Code nimmt jetzt erstmal immer dieselbe Kennung für die Bonus-Seite, das muss sicher noch optimiert werden. Aber vom Prinzip her und abgesehen davon, dass man sich erstmal durch das FOR und IF arbeiten muss ... eigentlich ganz einfach, oder?

by s130443 (185 points)
"Ganz einfach" würde ich es jetzt nicht beschreiben ;) Aber vielen Dank für die Hilfe, es funktioniert mit dem vorgeschlagenen Code!
Über setPageOrder($abfolgePlus, 'ENDE'); werden mir die Runden wie gewünscht in randomisierter Reihenfolge angezeigt, mit der Bonus-Seite nach zwei Runden mit derselben Person.

Zur eleganteren Lösung und die Frage, was auf den 4 Seiten eines Blocks genau angezeigt/abgefragt wird:
Auf der ersten Seite geht es um die Präsentation von rundenspezifischen Bildern und Text, anschließend Bild und Abfrage, auf der letzten Seite einer Runde wird je nach Antwort in der Abfrage (binär) ein anderes Bild und Text angezeigt.

Sicherlich ließe sich hier gut mit if else Befehlen arbeiten, oder? Je nachdem, welche Runde, sollen entsprechende Bilder angezeigt werden und entsprechende Abfragen... Aber ich frage mich, ob es weniger Aufwand und Fehlerquellen birgt, beim jetzigen Design zu bleiben. Würden Sie da etwas empfehlen? (Insofern die von mir angebrachten Informationen ausreichen).

Auf den Bonus-Seiten sind auch wieder nur Bilder zu sehen - womöglich können wir hier nur eine Seite erstellen und auf dieser über einen Zufallsgenerator die unterschiedlichen Bilder (Feedback-Nachrichten auf schwarzem Hintergrund) präsentieren. Das kläre ich gerade inhaltlich nochmal ab und melde mich bei Problemen wieder! :-)
by SoSci Survey (306k points)
> Sicherlich ließe sich hier gut mit if else Befehlen arbeiten, oder?

Nein, das wird bei 12x4 Seiten ein ewig langer Baum. Ich hätte stattdessen eher mit einem Array gearbeitet, wo für jeden Durchgang die passenden Daten hinterlegt sind.

$blocks = [
  'A1' => ['Bild1a.jpg', 'TX01', 'Bild1b.jpg', 'TX02', 'TX03'],
  'A2' => ['Bild2a.jpg', 'TX04', 'Bild2b.jpg', 'TX05', 'TX06'],
  // u.s.w.
];

Wie viele Informationen das genau sind, die man pro Block braucht, wissen Sie. Ich habe hier mal exemplarisch 5 eingetragen.

In die Abfolge würde man jetzt für jeden Block nicht nur ein Element legen, sondern 4, eines pro Seite. Also statt

$abfolgePlus[] = $blockID;

dann

$abfolgePlus[] = $blockID.'/1';
$abfolgePlus[] = $blockID.'/2';
$abfolgePlus[] = $blockID.'/3';
$abfolgePlus[] = $blockID.'/4';

Und der Einfachheit halben zählen wir nun auch nicht die (2) Blöcke, sondern die 8 Seiten:

if ($countA % 8 == 0) {

Schon haben Sie ein Array, das alle einzelnen Seiten beinhaltet. Das können Sie jetzt per loopPage() gemütlich abarbeiten. Sie müssen dann nur noch in Block und Seitennummer teilen:

$page = loopPage($abfolgePlus);
if (substr($page, 0, 6) == 'Bonus-A') {
  // Inhalt der Bonus-Seite A
} elseif (substr($page, 0, 6) == 'Bonus-B') {
  // Inhalt der Bonus-Seite B
} else {
  $info = explode('/', $page);  // Das macht aus A2/3 ein Array ['A2', '3']
  $block = $info[0];
  $blockPage = (int)$info[1];
  $data = $pages[$block];  // Und hier rufen wir die Zeile aus dem Array $pages von oben ab
  if ($blockPage == 1) {
    html('<div><img src="'.$data[0].'"></div>');
    question($data[1]);
  }
  // u.s.w.
}

Das ist nicht so wahnsinnig viel Code und spart Ihnen etwa 59 Seiten im Fragebogen.

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

...