0 votes
in SoSci Survey (dt.) by s078619 (145 points)
edited by SoSci Survey

Guten Tag,

ich habe für meinen Fragebogen 2 Rubriken (B0, H1) erstellt mit je einer Frage (B002, H109) und 47 bzw. 94 Items. Diese Items möchte ich gerne auf mehreren Seiten zufällig rotieren und pro Seite maximal 15 Items anzeigen lassen.
Ich habe den folgenden php-Code von Soscisurvey genutzt, jedoch wird vor jedem Item der Vorspann angezeigt. Wie kann ich dies verhindern?

if (!isset($items)) {
  $questions = ['B002', 'H109'];
  // Liste mit allen Items erstellen
  $items = [];
  foreach ($questions as $qstID) {
    $qstItems = getItems($qstID, 'all');
    foreach ($qstItems as $itemID) {
      $items[] = [$qstID, $itemID];
    }
  }
  // Liste mischen
  shuffle($items);
  registerVariable($items);
}
 
// Fragetext anzeigen
question('B002', 'spacing=0', 'show-items=no');
 
// Items anzeigen
foreach ($items as $item) {
  question($item[0], [$item[1]], 'spacing=0', 'show-title=no', 'show-explanation=no');
}

1 Answer

0 votes
by SoSci Survey (309k points)

jedoch wird vor jedem Item der Vorspann angezeigt.

Der Vorspann dürfte tatsächlich problematisch werden ... den kann man nicht einfach abschalten. Benötigen Sie den Vorspann? Oder könnte man das vielleicht auch in die "Erklärung" der Frage packen?

by s078619 (145 points)
Grundsätzlich ja. Allerdings würde dies optisch nicht ins Bild mit den anderen Teilen des Fragebogens passen.

Ich hatte vorher einen anderen php-Code, mit dem ich nur die Items einer Rubrik rotiert habe und bei dem der Vorspann nicht vor jedem Item angezeigt wurde. Kann man diesen php-Code ausweiten und eine weitere Rubrik miteinbeziehen?


if (!isset($itemsB002)) {
  // Alle Items der Frage B002 auflisten
  $itemsB002 = getItems('B002', 'all');
  // Liste Mischen
  shuffle($itemsB002);
  // Die Liste in Teillisten à 15 Items teilen
  $itemsB002 = array_chunk($itemsB002, 15);
  // Die Variable für andere Seiten verfügbar machen
  registerVariable($itemsB002);
}

// Erste Seite --> und entsprechend viele Seiten für die Anzahl der Items
question('B002', $itemsB002[0]);
by SoSci Survey (309k points)
Die Herausforderung ist folgende: Wenn Sie Items aus unterschiedlichen Fragen mischen möchten, dann zeigen Sie im Prinzip immer die komplette Frage an - aber jeweils nur mit einem Item.

Mir fiel aber noch etwas ein. Versuchen Sie es mal damit, die Verankerung auszublenden:

question($item[0], [$item[1]], 'spacing=0', 'show-title=no', 'show-explanation=no', 'anchor=none');
by s078619 (145 points)
ok, ich verstehe das Problem.

Die Verankerung auszublenden funktioniert, vielen Dank schonmal für den Hinweis!
 Allerdings wird diese somit auch zu vor dem ersten Item einmal eingeblendet. Haben Sie dafür auch noch eine Idee?
by SoSci Survey (309k points)
edited by SoSci Survey
Nun, das ist zum Glück einfach :)

$first = true;
foreach ($items as $item) {
  if ($first) {
   question($item[0], [$item[1]], 'spacing=0');
   $first = false;
  } else {
   question($item[0], [$item[1]], 'spacing=0', 'show-title=no', 'show-explanation=no', 'anchor=none');
  }
}
by s078619 (145 points)
Ich habe dies zum php-code hinzugefügt, der dann so aussah:

if (!isset($itemBlocks)) {
  $questions = ['B002', 'H109'];
  // Liste mit allen Items erstellen
  $items = [];
  foreach ($questions as $qstID) {
    $qstItems = getItems($qstID, 'all');
    foreach ($qstItems as $itemID) {
      $items[] = [$qstID, $itemID];
    }
  }
  // Liste mischen
  shuffle($items);
 
  // Liste aufteilen
  $itemBlocks = array_chunk($items,15);
  registerVariable($itemBlocks);
}
 
// Auf mehreren Seiten präsentieren
$i = loopPage(count($itemBlocks));
 
// Fragetext anzeigen
question('B002', 'spacing=0', 'show-items=no');
 
// Items anzeigen
$items = $itemBlocks[$i];
foreach ($items as $item) {
  question($item[0], [$item[1]], 'spacing=0', 'show-title=no', 'show-explanation=no', 'anchor=none');
}

// vor dem ersten Item den Vorspann anzeigen
$first = true;
foreach ($items as $item) {
  if ($first) {
   question($item[0], [$item[1]], 'spacing=0');
   first = false;
  } else {
   question($item[0], [$item[1]], 'spacing=0', 'show-title=no', 'show-explanation=', 'anchor=none');
  }
}


Leider bekomme ich dazu folgende Fehlermedlung:

Fehler im Fragebogen (Seite 2)
Im PHP-Code trat ein Fehler auf.
Fehler im Fragebogen: Befehl oder String (Text) nicht abgeschlossen

Hinter einem Befehl wie z.B. question() steht kein Strichpunkt oder
ein String (Text in Anführungszeichen) ist nicht abgeschlossen oder
im String selbst kommt ein Anführungszeichen vor, z.B. html('Mach's besser!'); – in diesem Fall stellen Sie dem Anführungszeichen einen Backslash (\) voran.
Möglicherweise stimmen die öffnenenden und schließenden geschweiften Klammern für Anweisungsblöcke auch nicht überein.
PHP-Code

034 $first = true;
035 foreach ($items as $item) {
036   if ($first) {
037    question($item[0], [$item[1]], 'spacing=0');
038    first = false;
039   } else {
040    question($item[0], [$item[1]], 'spacing=0', 'show-title=no', 'show-explanation=no', 'anchor=none');
041   }
by SoSci Survey (309k points)
Es müsste in Zeile 38 $first heißen statt first (das Dollarzeichen fehlt).

Ich habe das oben jetzt noch korrigiert.

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

...