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

0 votes

Hallo,

mithilfe von einem PHP-Code möchte ich Antworten aus einer vorherigen Frage in die Folgefrage als Textbeschriftung vor freien Texteingabefelder verwenden.

Hintergrundinformationen:
Bei der vorherigen Frage handelt es sich um eine Frage mit dem Fragetyp Rangordnung. Die ersten drei Antworten, die zuerst platziert wurden, sollen in der Folgefrage angezeigt werden.

In der Folgefragen gibt es 3 Textfelder. Vor jedem Textfeld soll die Antwort aus der Folgefrage angezeigt werden.

Mithilfe eines PHP-Codes wurde versucht die erste Antwort aus der Rangordnung in die Folgefrage zu übernehmen. Dennoch ohne Erfolg. Es wird zwar eine Antwortmöglichkeit aus der vorherigen Frage angezeigt, aber leider nicht die zuerst platzierte.

Wie kann ich es schaffen, dass mir die ersten drei Antworten aus der vorherigen Frage in die nächste Frage vor dem Textfeld angezeigt werden soll?

Vielen Dank im Voraus!!


Update 24.06.2019:
Es sieht nun so aus: Mir werden die drei ersten Antworten aus der vorherigen Frage gezeigt und unten drunter ein leeres Textfeld.

Mein Ziel ist es, dass es letztendlich so aussehen soll:

Also ich möchte drei Textfelder und die Antworten sollen links neben den Textfeldern platziert werden

Okay nun habe ich eine Kopie von F401 erstellt. Mir werden die Antworten von der vorherigen Frage aber nicht mehr angezeigt.

in SoSci Survey (dt.) by s118913 (170 points)
edited by s118913

1 Answer

+1 vote

Kleiner Tipp vorab: Sie können die Kärtchen in der Auswahl höher eintellen oder (eleganter) die Zeilenhöhe für die Beschiftungen der Kärtchen mit einer Zeile CSS-Code reduzieren. Dann "klebt" der Text nicht so am unteren Ende der Boxen.

Wie kann ich es schaffen, dass mir die ersten drei Antworten aus der vorherigen Frage in die nächste Frage vor dem Textfeld angezeigt werden soll?

Hier müssen Sie die Datenstruktur beachen: In F401_01 steht, auf welchem Rang das Item 01 platziert wurde - nicht, was auf Rang 1 steht. Wenn Sie das Risiko eingehen, dass einer der ersten drei Ränge freigelassen wurde und dann evtl. das Item von Platz 4 nachrückt, dann könnten Sie etwa folgenden Code verwenden:

$ranks = valueList('F401');  // Liefert eine Liste von Variablen und Rängen
asort($ranks);  // Aufsteigend nach Rängen sortieren
$keys = array_keys($ranks);  // Die Variablennamen extrahieren
// Und jetzt noch die Top3 als Platzhalter ablegen
for ($i=0; $i<3; $i++) {
  $itemID = (int)trim(substr($keys[$i], 5), '0');
  replace('%text'.($i+1).'%', getItemtext('F401', $itemID));
}

Aber bevor Sie sich damit jetzt zurfrieden geben: Denken Sie bitte gleich an die Auswertung! Wenn Sie die (z.B.) Bewertungen für ein Item in der Folgefrage immer in unterschiedlichen Variablen haben, dann ist das extrem schwer auszuwerten - je nachdem, was Sie rechnen möchten.

Deshalb könnte es deutlich (!) effizienter sein, wenn Sie in der Folgefrage alle Items anlegen (z.B: Ranking kopieren und Fragetyp ändern) und dann nur die Top 3 anbieten. Dabei ändert sich nur der untere Teil.

$ranks = valueList('F401');  // Liefert eine Liste von Variablen und Rängen
asort($ranks);  // Aufsteigend nach Rängen sortieren
$keys = array_keys($ranks);  // Die Variablennamen extrahieren
// Und jetzt noch die Top3 als Platzhalter ablegen
$itemsIDs = array();
for ($i=0; $i<3; $i++) {
  $itemIDs[] = (int)trim(substr($keys[$i], 5), '0');
}
question('XX01', $itemIDs);
by SoSci Survey (79.6k points)
edited by SoSci Survey
Vielen Dank für die schnelle Antwort!
Ich habe den Code übernommen und bekomme eine Fehlermeldung angezeigt. Ich habe Screenshots an meiner ursprünglichen Frage oben hinzugefügt.
Bitte posten Sie die Fehlermeldung. Diese mag nicht erfreulich für Sie sein, aber sie wäre für die Fehlersuche sehr wichtig :)
Hier habe ich den Text der Fehlermeldung kopiert, den mir beim Funktionstest angezeigt wird:
Fatal error: Uncaught Error: Call to undefined function s2survey\questionnaire\environment\getValues() in /var/www/soscisurvey/html/lib/s2survey/common/phpcode/PHPCodeExecutor.php(536) : eval()'d code:3 Stack trace: #0 /var/www/soscisurvey/html/lib/s2survey/common/phpcode/PHPCodeExecutor.php(536): eval() #1 /var/www/soscisurvey/html/lib/s2survey/questionnaire/php/PHPCodeExecutorQnr.php(62): s2survey\common\phpcode\PHPCodeExecutor->runCode() #2 /var/www/soscisurvey/html/inc/QuestionnairePHP.php(469): s2survey\questionnaire\php\PHPCodeExecutorQnr->runCode() #3 /var/www/soscisurvey/html/inc/QuestionnairePage.php(1441): QuestionnairePHP->run(NULL) #4 /var/www/soscisurvey/html/inc/QuestionnairePage.php(1360): QuestionnairePage->runContent(Object(OutPage)) #5 /var/www/soscisurvey/html/inc/InterviewCase.php(1472): QuestionnairePage->run(Object(OutPage)) #6 /var/www/soscisurvey/html/inc/Interviewer.php(628): InterviewCase->createQuestionnairePage() #7 /var/www/soscisurvey/html/inc/Interviewer.php(794): Interviewer->handleCreate() in /var/www/soscisurvey/html/lib/s2survey/common/phpcode/PHPCodeExecutor.php(536) : eval()'d code on line 3
Fehler im Fragebogen (Seite 7)
Beim Erstellen der Fragebogen-Seite ist ein Fehler aufgetreten. Es wäre sehr freundlich, wenn Sie den Projektleiter über das Problem informieren und die Fehlermeldung unten weiterleiten. Herzlichen Dank.
Im PHP-Code trat ein Fehler auf.

Fehler im Fragebogen: Im PHP-Code wurde in Zeile 3 eine Funktion getValues() verwendet. Es gibt diese Funktion nicht.

PHP-Code

001 namespace s2survey\questionnaire\environment;
002
003 $ranks = getValues('F401');  
004 asort($ranks);  
005 $keys = array_keys($ranks);  
006
Danke für die Fehlermeldung. In der Tat hatte ich im Code einen falschen Namen für die Funktion verwendet. Statt getValue() muss es valueList() heißen - oben habe ich das bereits geändert.
Die Fehlermeldung ist jetzt weg. Die drei ersten Antworten der vorherigen Frage werden mir angezeigt. Darunter ist nun ein leeres Textfeld.


Dennoch habe ich eine Frage:
Ist es nun auch möglich, dass ich statt ein leeres Textfeld, drei Textfelder habe. Und kann ich die Antworten neben dem Textfeld platzieren und nicht untereinander?



Ich habe in meiner ursprünglichen Frage unter "Update 24.06." noch ein Bild hinzugefügt, wie ich es mir vorstelle.
Zudem wird mir folgender Hinweis gezeigt:
Hinweis (Seite 7)
Eine oder mehrere Variablen (F401, F401_01, F401_02, F401_03) wurden bereits auf Seite 6 abgefragt. Bitte beachten Sie, dass die Antworten von Seite 6 hier angezeigt und anschließend überschrieben werden. Falls Sie eine gleichartige Frage mehrfach benötigen, erstellen Sie eine Kopie der Frage.
Bitte verwenden Sie im question()-Befehl (da wo ich oben XX01 schrieb) NICHT die F401. Das ist Ihr Ranking - und für die Folgefrage benötigen Sie eine andere Frage. Und zwar mit denselben Items wie die F401.

Legen Sie doch mal eine Kopie von F401 an und ändern Sie in der Kopie den Frage-Typ auf "Texteingabe offen". Die Kennung der Kopie tragen Sie dann bei question() ein.
Vielen Dank für Ihre schnelle Antwort!
Okay nun habe ich eine Kopie von F401 erstellt. Mir werden die Antworten von der vorherigen Frage aber nicht mehr angezeigt.
Zudem habe ich statt F401 jetzt XX01 im question()-Befehl verwendet.

Es wird mir folgende Fehlermeldung angezeigt:
Fehler im Fragebogen (Seite 7)
Die Frage mit der Kennung XX01 gibt es im Projekt nicht.



Das ist mein PHP-Code:
question('F402');

$ranks = valueList('F401');  // Liefert eine Liste von Variablen und Rängen
asort($ranks);  // Aufsteigend nach Rängen sortieren
$keys = array_keys($ranks);  // Die Variablennamen extrahieren
// Und jetzt noch die Top3 als Platzhalter ablegen
$itemsIDs = array();
for ($i=0; $i<3; $i++) {
  $itemIDs[] = (int)trim(substr($keys[$i], 5), '0');
}
question('XX01', $itemIDs);
> Zudem habe ich statt F401 jetzt XX01 im question()-Befehl verwendet

Wie oben geschrieben:Statt dem XX01 müssen Sie bitte die Kennung der neu erstellten Frage eintragen.
...