Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
Nächste ÜberarbeitungBeide Seiten der Revision
de:create:inputs-custom [01.10.2011 17:42] – [Einschränkungen] adminde:create:inputs-custom [28.11.2014 11:32] admin
Zeile 1: Zeile 1:
 ====== Eigene Formularelemente verwenden ====== ====== Eigene Formularelemente verwenden ======
  
-oFb bietet zwar eine große Auswahl von Fragetypen - mitunter lässt sich eine Frage aber nicht mithilfe der vorgefertigten Module realisieren. Für diesen Fall unterstützt oFb das Einlesen benutzerdefinierter Formularelemente.+SoSci Survey bietet zwar eine große Auswahl von Fragetypen - mitunter lässt sich eine Frage aber nicht mithilfe der vorgefertigten Module realisieren. Für diesen Fall unterstützt oFb das Einlesen benutzerdefinierter Formularelemente.
  
 **Tipp:** Bevor Sie mit der Programmierung eigener Formulare anfangen, prüfen Sie bitte auch einfachere Möglichkeiten unter [[de:create:composition|Erweiterte Darstellungsmöglichkeiten]]. **Tipp:** Bevor Sie mit der Programmierung eigener Formulare anfangen, prüfen Sie bitte auch einfachere Möglichkeiten unter [[de:create:composition|Erweiterte Darstellungsmöglichkeiten]].
Zeile 8: Zeile 8:
  
 Es liegt also nahe, oFb mitzuteilen, dass man bestimmte Variablen gerne einlesen und im Datensatz speichern möchte. Dazu verwendet man interne Variablen und die PHP-Funktion ''prepare_input()''. Es liegt also nahe, oFb mitzuteilen, dass man bestimmte Variablen gerne einlesen und im Datensatz speichern möchte. Dazu verwendet man interne Variablen und die PHP-Funktion ''prepare_input()''.
 +
  
 ===== Einschränkungen ===== ===== Einschränkungen =====
  
-Bei der Verwendung benutzerdefinierter Formularelemente gibt es eine wesentliche Einschränkung: Die Bedeutung der Werte (i.d.R. Zahlencodes) wird nicht im Datensatz gespeichert. Während bei einer gewöhnlichen Auswahl-Frage z.B. hinterlegt sein könnte, dass die 1 für "Student" und die 2 für "Angestellter" steht, müssen Sie das bei einem benutzerdefiniertem Formularelement selbst im Auge behalten.+Bei der Verwendung benutzerdefinierter Formularelemente gibt es zwei wesentliche Einschränkungen: 
 + 
 +  - Die Bedeutung der Werte (i.d.R. Zahlencodes) wird nicht im Datensatz gespeichert. Während bei einer gewöhnlichen Auswahl-Frage z.B. hinterlegt sein könnte, dass die 1 für "Student" und die 2 für "Angestellter" steht, müssen Sie das bei einem benutzerdefiniertem Formularelement selbst im Auge behalten. 
 +  - Wenn Sie dem Teilnehmer einen Zurück-Knopf anbieten oder die Seite bei unvollständigen Angaben wiederholt wird, müssen Sie sich darum kümmern, dass Ihr Formularelement eine vorher gegebene Antwort anzeigt. Dazu können Sie den Wert mittels ''[[:de:create:functions:value|value()]]'' auslesen und entsprechende Platzhalter für den Textbaustein initialisieren. 
  
-Wenn Sie dem Teilnehmer einen Zurück-Knopf anbieten oder die Seite bei unvollständigen Angaben wiederholt wird, müssen Sie sich darum kümmern, dass Ihr Formularelement eine vorher gegebene Antwort anzeigt. Dazu können Sie den Wert mittels ''value()'' auslesen und entsprechende Platzhalter für den Textbaustein initialisieren. 
 ===== Umsetzung ===== ===== Umsetzung =====
  
Zeile 112: Zeile 116:
  
 **Tipp:** Wenn Sie eine fertige Fragebogen-Seite im Browser ansehen, können Sie sich dort auch einfach den HTML-Quellcode anzeigen lassen. Den Quellcode für eine bestimmte Frage finden Sie ganz einfach, indem Sie nach der Frage-Kennung suchen. **Tipp:** Wenn Sie eine fertige Fragebogen-Seite im Browser ansehen, können Sie sich dort auch einfach den HTML-Quellcode anzeigen lassen. Den Quellcode für eine bestimmte Frage finden Sie ganz einfach, indem Sie nach der Frage-Kennung suchen.
 +
 +===== Variante JavaScript =====
 +
 +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:
 +
 +  - Entfernen Sie das ''prepare_input()'' aus der Fragebogen-Seite
 +  - Ziehen Sie stattdessen die Frage vom Typ "interne Variable" in den Fragebogen -- platzieren Sie die Frage über dem JavaScript, welches den Wert speichern soll.
 +
 +Falls Sie nur einige Variablen der Frage benötigen, legen Sie dies als //Items anzeigen// mit dem {{:button.settings.png?nolink|Einstellungen}}-Symbol fest -- oder fügen Sie die Frage mittels ''question()'' ein und geben Sie dabei die entsprechenden Item-Kennungen an.
 +
 +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.
 +
 +<code php>
 +// Frage vom Typ "interne Variablen",
 +// nur Variablen 1 und 2 einbinden
 +question('AB01', '1,2');
 +</code>
 +
 +<code html>
 +<script type="text/javascript">
 +<!--
 +// Wert in Variable 1 speichern
 +document.getElementById("AB01_01").value = "Wert A";
 +
 +// Wert in Variable 2 um 10 erhöhen
 +var input2 = document.getElementById("AB01_02");
 +var curVal = parseInt(Wert .value);
 +if (isNaN(curVal)) {
 +  input2.value = 10;
 +} else {
 +  input2.value = curVal + 10;
 +}
 +// -->
 +</script>
 +</code>
  
 ===== Fazit ===== ===== Fazit =====
  
 Mit diesem Werkzeug erhält man sehr viel Freiheit bei der Gestaltung des Fragebogens -- der Aufwand zum Programmieren der Formularelemente kann allerdings schnell ausarten. Deshalb bietet oFb die meisten Fragen eben schon fertig an. Mit diesem Werkzeug erhält man sehr viel Freiheit bei der Gestaltung des Fragebogens -- der Aufwand zum Programmieren der Formularelemente kann allerdings schnell ausarten. Deshalb bietet oFb die meisten Fragen eben schon fertig an.
de/create/inputs-custom.txt · Zuletzt geändert: 24.10.2020 22:15 von admin
 
Falls nicht anders bezeichnet, ist der Inhalt dieses Wikis unter der folgenden Lizenz veröffentlicht: CC Attribution-Share Alike 4.0 International
Driven by DokuWiki