0 votes
in SoSci Survey (dt.) by s047286 (325 points)
closed by s047286

Hallo,

ich habe mittels der Funktion replace('%platzhalter%', 'AN99', 'response'); die Antworten aus einer Mehrfachnennung ausgelesen. Die konkrete Frage lautet: "wählen Sie die 6 häufigsten Symptome aus, die Sie in den letzten 12 Monaten erlebt haben!". Auf einer Folgeseite sollen die 1-6 genannten Symptome nun in einer Tabelle als einzelne Spalten angezeigt werden. Mit Hilfe von html('%platzhalter%'); wird mir, wie in der Anleitung beschrieben eine Komma-getrennte Liste ausgegeben. Kann ich daraus auch 6 einzelne Antworten/Platzhalter generieren, die ich dann einzeln verwenden kann?

Viele Grüße

closed with the note: Vielen Dank!

1 Answer

+1 vote
by SoSci Survey (305k points)
selected by s047286
 
Best answer

Auf einer Folgeseite sollen die 1-6 genannten Symptome nun in einer Tabelle als einzelne Spalten angezeigt werden.

Es kommt ein wenig darauf an, was Sie mit der Tabelle genau vorhaben. Aber im Prinzip ist es nicht weiter schwer:

html('<table border="1">');
foreach (getItems('AN99', 'is', 2) as $item) {
  $text = getItemtext('AN99', $item);
  html('<tr><td>'.htmlspecialchars($text).'</td></tr>');
}
html('</table>');

Gut, zugegeben, dafür muss man sich ein wenig mit Arrays (s. Anleitung), FOR-Schleifen und der Funktion getItems() auskennen. Und natürlich mit HTML und wie man dort Tabellen baut. Aber wenn Sie ein paar Minuten über dem Code meditieren, sollte die Funktion klar werden.

Tipp: Der Punkt (.) verbindet zwei Strings in PHP. In den meisten anderen Sprachen würde man da ein Plus (+) verwenden. Das ist zu Beginn vielleicht ein wenig irritierend.

by s047286 (325 points)
Hallo,

vielen Dank schon einmal dafür! Mit dem Code funktioniert es schon einmal, dass die einzelnen Antworten als einzelne Zeilen in Tabellenform ausgegeben werden. Wie man HTML Tabellen schreibt ist mir bewusst. Da mir PHP nicht sehr geläufig ist, frage ich mich ob man die einzelnen Antworten auch einfach als Platzhalter vorbereiten kann.

Sehe ich das richtig, dass dieser Teil des Befehls:

foreach (getItems('AN99', 'is', 2) as $item) {
  $text = getItemtext('AN99', $item);

die einzelnen Antworten ausliest? Kann ich nun einfach 1-6 Platzhalter definieren als %platzhalter1%, %platzalter2% etc.? Und wenn ja, wie?
by SoSci Survey (305k points)
> Da mir PHP nicht sehr geläufig ist, frage ich mich ob man die einzelnen Antworten auch einfach als Platzhalter vorbereiten kann.

Ja, kann man ... aber Ihre Tabelle hat ja eine variable Anzahl von Zeilen. Und dies würde sich mit Platzhaltern eher nicht sinnvoll abbilden lassen.

> Kann ich nun einfach 1-6 Platzhalter definieren als %platzhalter1%, %platzalter2% etc.? Und wenn ja, wie?

foreach (getItems('AN99', 'is', 2) as $i => $item) {
  replace('%platzhalter'.($i+1).'%', getItemtext('AN99', $item));
}

Aber hier hätten Sie eben mal 2, mal 6 Platzhalter ...
by s047286 (325 points)
Hallo,

vielen Dank, das ist nicht schlimm. Bei der entsprechenden Tabelle handelt es sich ohnehin um einen Interviewteil, welcher nur für den Veruschsleiter ersichtlich ist. Dort wo also der Platzhalter "leer" sind, kann der Versuchsleiter die Spalte getrost überspringen.

Insgesamt ist die Tabelle tatsächlich etwas aufwändiger, da es sich um eine 8 x  1 bis 6  Tabelle handelt (Also  8 Zeilen mit Fragen und maximal 6 mögliche Symptome, auf die sich die Fragen beziehen). Es müssten also nicht nur die Spaltenüberschriften mit den Symptomen variabel sein, sondern auch die darunter angezeigten offenen Textfelder.

Hier ein entsprechender Beispiel Screenshot, wie das ganze aussehen wird: https://imgur.com/Ujaupxl
by SoSci Survey (305k points)
Da würde ich die Platzhalter fix belegen bzw. den Text direkt in die Frage schreiben (falls eine kombinierte Frage zum Einsatz kommt) und dann mittels getItems() nur die ausgewählten Items anzeigen (https://www.soscisurvey.de/help/doku.php/de:create:filter-items).

Oder wenn es um die Spalten geht, eben nur die passenden Spalten anzeigen.

Und unbedingt das Layout breiter einstellen unter "Fragebogen-Layout" ;)
by s047286 (325 points)
Gibt es denn eine Möglichkeit in diesem Befehl:

foreach (getItems('AN99', 'is', 2) as $i => $item) {
  replace('%platzhalter'.($i+1).'%', getItemtext('AN99', $item));
}

eine if-Bedingung zu implementieren, die den Platzhalter leer lässt, falls nur 1,2,3,4 oder 5 Beschwerden ausgewählt wurden?

Viele Grüße
by SoSci Survey (305k points)
Das könnte z.B. so aussehen:

$selected = getItems('AN99', 'is', 2);
foreach (getItems('AN99', 'all') as $i => $item) {
  $platzhalterCode = '%platzhalter'.($i+1).'%';
  if (in_array($item, $selected)) {
    replace($platzhalterCode, getItemtext('AN99', $item));
  } else {
    replace($platzhalterCode, '&ndash;');
  }
}

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

...