SoSci Survey bietet zwar eine große Auswahl von Fragetypen – mitunter ist das aber nicht ausreichend, um eine konkret erforderliche Darstellung für eine Frage zu realisieren. Für diesen Fall kann SoSci Survey auch benutzerdefinierter (HTML-)Formularelemente einlesen. Auch auf JavaScript oder Flash basierende Fragen lassen sich damit einbinden.
Mit diesem Werkzeug erhält man sehr viel Freiheit bei der Gestaltung des Fragebogens – der Aufwand zum Programmieren der Formularelemente kann allerdings schnell ausarten.
Tipp: Bevor Sie mit der Programmierung eigener Formulare beginnen, prüfen Sie bitte einfachere Möglichkeiten unter Erweiterte Darstellungsmöglichkeiten.
HTML-Formularelemente (z.B. Texteingabefelder, Auswahlfelder, Dropdowns) sind schnell programmiert, die notwendigen Grundlagen sind z.B. auf SelfHTML nachzulesen. Die Einbindung des HTML-Codes in den Fragebogen via Textbaustein ist trivial (HTML-Code als Textbaustein speichern und in den Fragebogen ziehen).
Das Problem liegt darin, dass SoSci Survey zunächst einmal nichts von den Formularelementen und den von ihnen übermittelten Daten weiß und die Antworten daher nicht speichert. Es liegt also nahe, SoSci Survey mitzuteilen, dass man bestimmte POST-Variablen gerne einlesen und im Datensatz speichern möchte. Dazu verwendet man frei platzierte Eingabefelder.
name
) des Formularelements die Item-Kennung(en) der internen Variable(n) verwenden. Wenn Ihre Variable also die Kennung „AB01_01“ hat, dann steht im Formularelement name="AB01_01"
.prepare_input()
, um die interne Variable zu aktivieren, z.B. prepare_input('AB01_01');
. Wenn Sie die Kennung der Frage angeben (z.B. prepare_input('AB01');
), werden alle Variablen der Frage aktiviert.Wenn Sie anspruchsvollere Eingabeelemente programmieren – z.B. mit JavaScript und/oder Flash – dann benötigen Sie in aller Regel versteckte Eingabefelder zum Ablegen der gemessenen/erhobenen Werte (s. Wechsel des Browserfensters aufzeichnen).
In diesem Fall versenden Sie nicht die PHP-Funktion prepare_input()
, sondern ziehen die Frage vom Typ „interne Variablen“ direkt in die Fragebogen-Seite (s. unten). Dies erzeugt automatisch versteckte Eingabefelder im Fragebogen (<input type="hidden">
), deren Wert mittels JavaScript geändert werden kann. Die HTML-ID der Eingabefelder entspricht der Item-Kennung.
Bei der Verwendung benutzerdefinierter Formularelemente gibt es zwei wesentliche Einschränkungen:
value()
auslesen und mittels Platzhalter in den HTML-Code für die Frage einbinden.SoSci Survey erlaubt in einer normalen Auswahlfrage maximal 99 Optionen. Das gilt auch für die Auswahloptionen in einem Dropdown-Feld. Für eine Liste aller Länder der Erde reicht das nicht. Ein entsprechendes Auswahlfeld kann man mit folgendem HTML-Code erstellen.
Tipp: Eine Dropdown-Auswahl mit mehr als 99 Optionen können Sie auch mit dem Fragetyp Erweiterte Auswahl erstellen. Eine bestehende Auswahlfrage können Sie im Karteireiter Erweitert in eine erweiterte Auswahl umwandeln.
<select name="AB01_01"> <option value="1">Abchasien</option> <option value="2">Afghanistan</option> <option value="3">Ägypten</option> <!-- u.s.w. --> <option value="206">Zypern</option> </select>
Tipp: Wenn Sie die Auswahloptionen in Excel oder OpenOffice Calc vorliegen haben, dann können Sie mit der Funktion VERKETTEN()
den Großteil des HTML-Codes automatisiert erstellen. Wenn z.B. in der Spalte A die Antwortcodes stehen und in Spalte B die Texte, geben Sie in Spalte C (erste Zeile) folgende Formel ein. Die Formel anschließend über die ganze Spalte C ziehen und den so erstellen Code einfach kopieren.
=VERKETTEN("<option value=""";A1;""">";B1;"</option>")
Als Name für das Formularelement select
wurde hier AB01_01
eingetragen – das muss natürlich der tatsächlichen Item-Kennung (des Items in der Frage „interne Variablen“) angepasst werden. Bei jeder Auswahloption option
ist ein Attribute value
angegeben – dieses legt fest, welcher Zahlencode übermittelt wird. Wenn man den tatsächlichen Text abspeichern will, kann man das Attribut einfach weglassen.
Fehlt nur noch der entsprechende PHP-Code – auch hier muss die Kennung angepasst werden:
prepare_input('AB01_01');
Fertig. Zumindest fast.
Im Moment würde das Dropdown einfach nur links auf der Seite „kleben“. Folgende Tabelle sorgt für etwas mehr Stil:
<table cellspacing="0" cellpadding="0" border="0"> <colgroup> <col width="100"> <col> </colgroup> <tr> <td> <label for="AB01_01">Heimatland:</label> </td> <td> <select name="AB01_01" id="AB01_01"> <option value="1">Abchasien</option> <option value="2">Afghanistan</option> <option value="3">Ägypten</option> <!-- u.s.w. --> <option value="206">Zypern</option> </select> </td> </tr> </table>
Um im Stil der Dropdown-Felder von SoSci Survey zu bleiben, kann man auch die CSS-Klassen aus SoSci Survey verwenden:
<div class="spacing"> <div class="title"> <p>Hier steht der Frage-Text</p> </div> <div class="titleSpacing"></div> <table class="question" cellspacing="0" cellpadding="0" width="100%" border="0"> <colgroup> <col width="380"> <col> </colgroup> <tr class="shadeH0"> <td><label for="AB01_01">Heimatland:</label></td> <td class="dropdown input"> <select name="AB01_01" id="AB01_01"> <option value="1">Abchasien</option> <option value="2">Afghanistan</option> <option value="3">Ägypten</option> <!-- u.s.w. --> <option value="206">Zypern</option> </select> </td> </tr> </table> </div>
Tipp: Welche CSS-Klassen SoSci Survey verwendet, können Sie einfach bei einer „normalen“ Fragen nachsehen: Lassen Sie sich auf der entsprechenden Fragebogen-Seite im Browser den HTML-Quellcode anzeigen. Den Quellcode für eine bestimmte Frage finden Sie ganz einfach, indem Sie nach der Frage-Kennung suchen.
Die oben skizzierte Lösung geht davon aus, dass der Wert aus einem benutzerdefinierten Eingabeelement (<input>
oder <select>
) in den Datensatz übermittelt werden soll.
Möglicherweise möchten Sie aber gar kein solches Eingabefeld anlegen, sondern einen Wert mittels JavaScript ermitteln und diesen in den Datensatz übertragen. In diesem Fall sind zwei Änderungen notwendig:
prepare_input()
aus der Fragebogen-Seite.
Tipp: Falls Sie nur bestimmte interne Variablen der Frage benötigen, legen Sie dies mit dem -Symbol fest bei Items anzeigen. Alternativ fügen Sie die Frage vom Typ „interne Variablen“ mittels PHP-Funktion question()
in die Seite ein und spezifizieren die entsprechenden Item-Kennungen.
Wenn Sie die Frage in den Fragebogen einbinden, sehen Sie optisch keine Veränderung. Allerdings wird für jede interne Variable ein verstecktes Eingabefeld (type="hidden"
) hinterlegt, dessen Inhalt per JavaScript gelesen und geändert werden kann.
// Variablen 1 und 2 der Frage AB01 (Typ "interne Variablen") einbinden question('AB01', '1,2');
<script type="text/javascript"> <!-- // Wert in Variable 1 speichern document.getElementById("AB01_01").value = "Wert A"; // Letzten Wert in Variable 2 um 10 erhöhen var input2 = document.getElementById("AB01_02"); var curVal = parseInt(input2.value); if (isNaN(curVal)) { input2.value = 10; } else { input2.value = curVal + 10; } // --> </script>