Donnerstag, 5. Januar 2012

Drupal Webform: Weiterleitung in Abhängigkeit der User-Eingaben

Das Modul Webform ist ein einfach zu handhabendes Modul zur Erstellung von Formularen jeglicher Art. So lassen sich schnell einfache Kontaktseiten erstellen, aber auch umfangreichere Formulare, die auf mehrere Seiten/Steps verteilt sind inkl. Pflichtfelder, Validierung und Speicherung in der Datenbank. Darüber hinaus bietet Webform die Möglichkeit, dass der User nach erfolgreichem Senden auf eine vorher definierte Seite weitergeleitet wird. Und genau hier möchte ich ansetzen:

Es gibt wohl bei Webform 3.x keine Option, die den User auf unterschiedliche Zielseiten – abhängig von seiner Eingabe – weiterleitet. Jedenfalls habe ich keine gefunden.
Wofür braucht man sowas? In unserem Fall sollte ein Test erstellt werden, der einige Fähigkeiten eines Benutzers abfragt und dann eine Seite mit dem Resultat darstellt ("Sie haben 20 von 30 möglichen Punkten und sind somit ...").

Laut Dokumentation muss man sich hierfür ein eigenes Modul erstellen (http://drupal.org/node/1245298), aber es geht auch einfacher anders mit Weform Rules und etwas PHP Code:

Zuerst einmal konfiguriert man mithilfe von Rules ein Ereignis, bei dem die Aktion überhaupt greifen soll. Das Event ist "After a webform has been submitted". Als nächsten logischen Schritt definiert man die Voraussetzung, bei welchem Webform das ganze passieren soll (mit "Condition", "Webform has name").  Letzter und umfangreichster Schritt ist die "Action", über die mit "Page redirect" die Umleitung eingerichtet wird. Der Wert der Umleitung kann via PHP mit einem einfachen

echo 'node/123';

angegeben werden. Um nun vorher die Antworten im Formular zu berechnen, benötigt man die Eingaben des Users. Für z.B. den Radiobutton "wert_1" wird

$data['components']['wert_1']['value'][0]  

herangezogen. Jetzt muss man "nur" noch die Berechnungen durchführen, deren Auswertung dann – je nach Wert – einen anderen Node aufruft.

Ich habe keinen einfacheren Weg gefunden – sollte es diesen geben, bitte einen Kommentar hinterlassen.

0 Kommentare:

Kommentar veröffentlichen