Formulare mit Drupal Drupalcamp, Köln 2009 Jutta Horstmann

whoami Jutta Horstmann (Dipl. Inform., Dipl. Pol.) IT­Beraterin (“data in transit”) ● Schwerpunkt: Freie Software ● Content Management Systeme ● Datenbankmanagement­Systeme ● Analyse, Beratung, Konzeption ● Implementation, Web­Programmierung : : : data in transit : : : DrupalCamp 2009 : : : Jutta Horstmann : : : 17.01.2009 : : : 2

data in transit ● IT­Beratung ● gegründet 2005 in Berlin ● 2006 Umzug nach Bonn ● ● www.dataintransit.com Letzte Drupal­Projekte: – select.postbank.de (Postbank AG) – www.lisa­freundeskreis.de (Burda) : : : data in transit : : : DrupalCamp 2009 : : : Jutta Horstmann : : : 17.01.2009 : : : 3

Die Themen Wozu Formulare? Ein Beispielprojekt Formulare in Drupal CCK vs. Webforms vs. Programmierung Hot New Stuff : : : data in transit : : : DrupalCamp 2009 : : : Jutta Horstmann : : : 17.01.2009 : : : 4

Wozu Formulare? ©TOM (Jochen Enterprises) : : : data in transit : : : DrupalCamp 2009 : : : Jutta Horstmann : : : 17.01.2009 : : : 5

Ein Beispielprojekt ● ● ● ● Der Kunde ist ein bundesweit operierendes Unternehmen. Auf Stellenangebote des Unternehmens soll man sich online bewerben können. Es gibt 3 Arten von Bewerbungsbögen: Trainee, Berufseinsteiger, Führungsposition. Diese werden pro Ausschreibung vom HR­Team inhaltlich erweitert und angepasst. Es gibt veränderbare und nicht veränderbare Felder. Abgesendete Daten werden per E­Mail verschickt, in Reports zusammengefasst und exportiert. : : : data in transit : : : DrupalCamp 2009 : : : Jutta Horstmann : : : 17.01.2009 : : : 6

Anforderungen: PUTPUT Anforderungen: INPUT Anforderungen: OUTPUT : : : data in transit : : : DrupalCamp 2009 : : : Jutta Horstmann : : : 17.01.2009 : : : 7

Anforderungen PUTPUT: Das Formular und seine Erstellung : : : data in transit : : : DrupalCamp 2009 : : : Jutta Horstmann : : : 17.01.2009 : : : 8

PUTPUT: Das Formular und seine Erstellung ● ● ● Redakteure erstellen und bearbeiten das Formular Benutzerfreundlicher Formulareditor Anfang und Ende der Veröffentlichung des Formulars terminieren : : : data in transit : : : DrupalCamp 2009 : : : Jutta Horstmann : : : 17.01.2009 : : : 9

Anforderungen INPUT: Strukturierte Dateneingabe : : : data in transit : : : DrupalCamp 2009 : : : Jutta Horstmann : : : 17.01.2009 : : : 10

INPUT: Strukturierte Dateneingabe: Gruppierung von Feldern ● 2 Felder im Formular, 1 Feld in der DB z.B. Vorwahl + Anschluß ● Feldgruppe als “multiple” Feld : : : data in transit : : : DrupalCamp 2009 : : : Jutta Horstmann : : : 17.01.2009 : : : 11

INPUT: Strukturierte Dateneingabe: Abhängigkeiten zwischen Feldern ● ● Wenn Option A gewählt, dann aktiviere Feld X Wenn Feld A ausgefüllt, dann sind Feld B und Feld C Pflichtfelder : : : data in transit : : : DrupalCamp 2009 : : : Jutta Horstmann : : : 17.01.2009 : : : 12

INPUT: Strukturierte Dateneingabe: Mehrseitige Formulare ● Ein Formular wird auf mehrere Seiten verteilt ● Navigation mit “Weiter”, “Zurück” ● Fehlermeldungen auf zugehöriger Seite ● Unabhängig von Javascript : : : data in transit : : : DrupalCamp 2009 : : : Jutta Horstmann : : : 17.01.2009 : : : 13

INPUT: Strukturierte Dateneingabe: Anzeige nach Absenden Wenn Formular vollständig ausgefüllt wurde: ● Bestätigungsnachricht oder ● Weiterleitung auf Bestätigungsseite : : : data in transit : : : DrupalCamp 2009 : : : Jutta Horstmann : : : 17.01.2009 : : : 14

INPUT: Strukturierte Dateneingabe: Weitere Anforderungen ● ● Zwischenspeichern von Eingaben Übernahme von Daten aus anderen bereits gesendeten Formularen als Default­Wert : : : data in transit : : : DrupalCamp 2009 : : : Jutta Horstmann : : : 17.01.2009 : : : 15

Anforderungen OUTPUT: Die Weiterverarbeitung der Daten : : : data in transit : : : DrupalCamp 2009 : : : Jutta Horstmann : : : 17.01.2009 : : : 16

OUTPUT: Die Weiterverarbeitung der Daten Anforderungen: ● Versand per E­Mail ● Speicherung in der Datenbank ● Datenexport ● ● Übersicht über alle abgesendeten Formulareingaben (zu einem Formular / zu allen vorhandenen Formularen) Reports, Statistiken : : : data in transit : : : DrupalCamp 2009 : : : Jutta Horstmann : : : 17.01.2009 : : : 17

Drupal! : : : data in transit : : : DrupalCamp 2009 : : : Jutta Horstmann : : : 17.01.2009 : : : 18

Formulare in Drupal ● Modul: Webform ● Modul: CCK ● Eigenbau mit Forms API => Einsatz je nach Anforderungen im Projekt (Für die Beispiele: Drupal 6.9, CCK 6.x­2.1, Webform 6.x­2.4) : : : data in transit : : : DrupalCamp 2009 : : : Jutta Horstmann : : : 17.01.2009 : : : 19

CCK/Webform vs. Programmierung CCK und Webform bieten Formulareditor ● ● ● Keine Programmierkenntnisse notwendig Webform Formulare können von Redakteuren gebaut werden Formulare können sehr schnell gebaut werden : : : data in transit : : : DrupalCamp 2009 : : : Jutta Horstmann : : : 17.01.2009 : : : CCK 20

CCK/Webform vs. Programmierung ● Eigenbau mit Forms API → Volle Flexibilität function my_module_menu() { $items = array(); $items[‘my_module/form’] = array( ‘title’ => t(‘My form’), ‘page callback’ => ‘my_module_form’, ‘access arguments’ => array(‘access content’), ‘description’ => t(‘My form’), ‘type’ => MENU_CALLBACK, ); return $items; } function my_module_form() { return drupal_get_form(‘my_module_my_form’); } function my_module_my_form($form_state) { $form[‘name’] = array( ‘#type’ => ‘textfield’, ‘#title’ => t(‘Name’), ); $form[‘submit’] = array( ‘#type’ => ‘submit’, ‘#value’ => ‘Submit’, ); return $form; } http://drupal.org/node/262422 : : : data in transit : : : DrupalCamp 2009 : : : Jutta Horstmann : : : 17.01.2009 : : : 21

CCK/Webform vs. Programmierung Best of both worlds: Mit CCK/Webform erstellte Formulare können per FAPI und / oder Themeing noch weiter angepasst werden function helpers_form_alter(&$form, $form_state, $form_id){ if ($form_id == ‘webform_client_form_3’) { $form[‘#validate’][]= ‘helpers_customforms_validate’; } } function helpers_customforms_validate($form, &$form_state) { if ($form_state[‘values’][‘details’][‘page_num’] == 1) { $email = $form_state[‘values’][‘submitted’] [‘kontaktdaten’][‘email’]; if ($email) { if (!eregi(“^[_a­z0­9­]+(.[_a­z0­9­]+)@ [a­z0­9­]+(.[a­z0­9­]+)(.[a­z]*)$”, $email)){ form_set_error(‘submitted][kontaktdaten][email’, t(‘%value ist keine valide E­Mail­Adresse.’, array(‘%value’ => $email))); } } } } : : : data in transit : : : DrupalCamp 2009 : : : Jutta Horstmann : : : 17.01.2009 : : : 22

CCK vs. Webform : : : data in transit : : : DrupalCamp 2009 : : : Jutta Horstmann : : : 17.01.2009 : : : 23

Webform vs. CCK Webform ● ● Das Formular ist ein Node Die Eingaben in das Formular sind keine Nodes : : : data in transit : : : DrupalCamp 2009 : : : Jutta Horstmann : : : 17.01.2009 : : : 24

Webform vs. CCK CCK ● ● Das Formular ist ein Inhaltstyp Die Eingaben in das Formular sind Nodes : : : data in transit : : : DrupalCamp 2009 : : : Jutta Horstmann : : : 17.01.2009 : : : 25

Webform vs. CCK ­ Konsequenzen Webform: ● Eingaben in Formulare stehen nicht für Views zur Verfügung CCK: ● Viele Formulare = viele Inhaltstypen : : : data in transit : : : DrupalCamp 2009 : : : Jutta Horstmann : : : 17.01.2009 : : : 26

Webform vs. CCK: Formular erstellen & verwalten (PUTPUT) : : : data in transit : : : DrupalCamp 2009 : : : Jutta Horstmann : : : 17.01.2009 : : : 27

Formular erstellen/verwalten mit Webform ● Inhalt erstellen → Webform → Titel “Trainee Form” oder ● Vorhandenes Formular “Trainee Form” auswählen → Klonen (node_clone) ● Felder anlegen / editieren: Formulareditor ● Veröffentlichung terminieren (scheduler) ● Nicht möglich: Berechtigung pro Feld : : : data in transit : : : DrupalCamp 2009 : : : Jutta Horstmann : : : 17.01.2009 : : : 28

Formular erstellen/verwalten mit CCK ● Verwalten → Inhaltsverwaltung → Inhaltstypen – Inhaltstyp hinzufügen: “form_trainee” oder – “Exportieren” → Inhaltstyp “form_trainee” → Code kopieren → “Importieren” → Code einfügen & editieren → Absenden Umständlich und fehleranfällig. ● Felder anlegen / editieren: Formulareditor ● Nicht möglich: – Veröffentlichung terminieren – Berechtigung pro Feld : : : data in transit : : : DrupalCamp 2009 : : : Jutta Horstmann : : : 17.01.2009 : : : 29

Webform vs. CCK: Strukturierte Dateneingabe (INPUT) : : : data in transit : : : DrupalCamp 2009 : : : Jutta Horstmann : : : 17.01.2009 : : : 30

Strukturierte Dateneingabe mit Webform ● Mehrseitige Formulare (per “pagebreak”) ● Bestätigungsseite nach Absenden konfigurierbar ● Nicht (bzw. nur per Code): – Gruppierung von Feldern – Abhängigkeiten zwischen Feldern – Zwischenspeichern von Eingaben – Übernahme von gespeicherten Daten aus anderen Formularen als Vorgabe für Felder : : : data in transit : : : DrupalCamp 2009 : : : Jutta Horstmann : : : 17.01.2009 : : : 31

Strukturierte Dateneingabe mit CCK ● Zwischenspeichern : “Speichern” ohne “Veröffentlichen” ● Gruppierung von Feldern: flexifield ● Bestätigungsseite nach Absenden: trigger + action ● Mehrseitige Formulare: Eingeschränkt: – pageroute: Inhaltstyp pro Seite. – cck_fieldgroup_tabs: Nur mit aktiviertem Javascript. – multistep: Nur mit aktiviertem Javascript. Nicht Drupal 6. ● Abh. Felder: conditional_fields (nicht: abh. Pflichtfelder) ● Übernahme von Daten als Default: Nur mit Code : : : data in transit : : : DrupalCamp 2009 : : : Jutta Horstmann : : : 17.01.2009 : : : 32

Webform vs. CCK: Weiterverarbeitung der Daten (OUTPUT) : : : data in transit : : : DrupalCamp 2009 : : : Jutta Horstmann : : : 17.01.2009 : : : 33

Weiterverarbeitung der Daten mit Webform ● Versand per E­Mail – ist eingebaut ● Datenexport: CSV, XLS – ist eingebaut ● Reports, Statistiken – eingebaut (eingeschränkt) ● Speicherung in der DB: webform, webform_component, webform_roles, webform_submissions, webform_submitted_data ● Übersicht über alle abgesendeten Formulareingaben (nur: zu einem Formular, nicht: zu allen vorhandenen Formularen) : : : data in transit : : : DrupalCamp 2009 : : : Jutta Horstmann : : : 17.01.2009 : : : 34

Weiterverarbeitung der Daten mit CCK ● Versand per E­Mail: trigger + action ● Speicherung in der DB: content_type_form_trainee ● ● ● Export: views_bonus_pack: CSV, DOC, TXT Übersicht über alle abgesendeten Formulareingaben: views Reports, Statistiken: views : : : data in transit : : : DrupalCamp 2009 : : : Jutta Horstmann : : : 17.01.2009 : : : 35

Fazit: Webform vs. CCK ● Flexibilität in INPUT und OUTPUT: → CCK (Ausnahme: mehrseitiges Formular) ● Benutzerfreundlichkeit im Anlegen und Bearbeiten von Formularen (PUTPUT), schnelle Export­Lösung: → Webform : : : data in transit : : : DrupalCamp 2009 : : : Jutta Horstmann : : : 17.01.2009 : : : 36

Hot New Stuff & Ausblick : : : data in transit : : : DrupalCamp 2009 : : : Jutta Horstmann : : : 17.01.2009 : : : 37

Front End: Form Builder ● Lullabot ● Formulare bauen per Drag&Drop (AJAX) ● ● Ersatz für alle Drupal Formulareditoren Module fügen Formularlogik hinzu http://drupal.org/project/form_builder http://quicksketch.org/demos/form­builder­example : : : data in transit : : : DrupalCamp 2009 : : : Jutta Horstmann : : : 17.01.2009 : : : 38

Back End: Drupal 7 Fields API ● ● Felder als 1st level citizens im Core CCK und Webforms können auf die selben Felder zugreifen => zum Beispiel: ● Webform­Logik (benutzerfreundliches Anlegen von Formularen, einfacher Export) verheiraten mit ● flexiblen CCK­Feldern : : : data in transit : : : DrupalCamp 2009 : : : Jutta Horstmann : : : 17.01.2009 : : : 39

Fragen??? data in transit http://www.dataintransit.com Kontakt jh@dataintransit.com : : : data in transit : : : DrupalCamp 2009 : : : Jutta Horstmann : : : 17.01.2009 : : : 40