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

Wir möchten in einer Befragung die Items, die in einer Mehrfachauswahl ausgewählt wurden, zu einem späteren Zeitpunkt in einem Text als Bullet-Point-Liste anzeigen lassen.
Dabei handelt es sich nicht um eine Filterfrage, sodass die Anleitung zum Übernehmen von Items in Folgefragen mir hier leider nur bedingt weiterhilft.
Insbesondere die Befehle für die richtige Formatierung der Liste sind mir ein Rätsel.
Grundsätzlich könnte ich Teile dieser Vorlage verwenden, denke ich:

$itemliste = array(); // Eine leere Liste erstellen
$anzahl_items = 15; // 15 Items überprüfen
$frage = 'CO01';
 
for ($i=1; $i<=$anzahl_items; $i++) { // Durchzählen 
  $kennung = id($frage, $i); // Ergibt z.B. TF04_01
  // Hat das Item einen Wert von 2/Wurde es ausgewählt?
  if (value($kennung) == 2) {
    $itemliste[] = $i;
  }
}
if (count($itemliste) == 0) {
  goToPage('next');
}
 question('TF05', $itemliste);

// hier statt question text mit Kennung, aber wie sage ich SoSciSurvey, wo und in welcher Form die Item-Liste ausgegeben werden soll?

1 Answer

+1 vote
by SoSci Survey (349k points)
selected by s145726
 
Best answer

Die HTML-Struktur eine Aufzählungsliste ("unnumbered list") ist..

<ul>
  <li>Eintrag 1</li>
  <li>Eintrag 2</li>
</ul>

Diese HTML-Code müssen Sie jetzt nur noch schreiben lassen, z.B. so:

// Ausgewählte Items herausfinden
$frageID = 'CO01';
$selected = getItems($frageID, 'is', 2);

// Liste bauen
$html = '<ul>';
foreach ($selected as $itemNum) {
  $html.= '<li>'.htmlspecialchars(getItemtext($frageID, $itemNum)).'</li>';
}
$html.= '</ul>';

// Anzeigen
if (!empty($selected)) {
  html($html);
}

Alternativ können Sie sich auch den Befehl answers() ansehen. Dann wird der Code noch ein wenig kürzer:

answers('CO01');
by s145726 (140 points)
Vielen Dank, das hat funktioniert!

Nun hat sich noch eine Anschlussfrage ergeben: In der ursprünglichen Frage, aus der die ausgewählten Items übernommen werden, gibt es auch ein Eingabefeld ("Andere Maßnahme, und zwar:___"). Die Antwort soll, falls ausgewählt, auch in der Liste auftauchen, nicht dagegen der Text des Items (s.o.).
Ich habe das mit der replace-Funktion versucht und außerdem statt der getItems-Funktion ein Array erstellt, in dem ich nur die 15 'fixen' Items auszählen lasse:

$frageID = 'HS03';
$html = array();        // Eine leere Liste erstellen
$selected = 15;     //Anzahl zu prüfender Items

for ($i=1; $i<=$selected; $i++) { // Durchzählen von 1 bis 15
  $kennung = id($frageID, $i); // Ergibt z.B. TF04_01
  // Hat das Item einen Wert von 2?
  if (value($kennung) == 2) {
    $html[] = $i;
  }
}
if ('HS03_16'==2) {
     $html[] = '%andereMaßnahme%';
}

$html = '<ul>';
foreach ($selected as $itemNum) {
  $html.= '<li>'.htmlspecialchars(getItemtext($frageID, $itemNum)).'</li>'; //Liste bauen
}

$html.= '</ul>';

if (!empty($selected)) {   // Anzeigen
  html($html);
}

Leider funktioniert es nicht und es kommt die Fehlermeldung: foreach() argument must be of type array|object, int given


Können Sie mir hier nochmal weiterhelfen?
Vielen Dank schonmal!
by SoSci Survey (349k points)
Die Variable %html ist ein String. Dort können Sie mit dem Punkt-Operator etwas hinzufügen:

if (value('HS03_16') == 2) {
     $html .= '%andereMaßnahme%';
}

Dieser Teil müsste vor das

$html.= '</ul>';

Sie haben oben noch Code eingefügt, der m.E. nicht notwendig ist. Wenn es Ihnen nur um die Nr. 16 geht, geht es auch einfacher:

// Ausgewählte Items herausfinden
$frageID = 'HS03';
$selected = getItems($frageID, 'is', 2);

// Liste bauen
$html = '<ul>';
foreach ($selected as $itemNum) {
  if ($itemNum == 16) {
    $html.= '<li>'.htmlspecialchars(value('HS03_16a')).'</li>';
  } else {
    $html.= '<li>'.htmlspecialchars(getItemtext($frageID, $itemNum)).'</li>';
  }
}
$html.= '</ul>';

// Anzeigen
if (!empty($selected)) {
  html($html);
}
by s145726 (140 points)
Tausend Dank!

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

...