Webforms mit eigenen Templates in Drupal 7

Webform ist im Grunde das Standardmodul zur Erstellung eigener Formulare in Drupal. Standardmäßig werden Webformulare als redaktioneller Inhalt behandelt und haben daher nur eine automatisch erzeugte ID (wie Nodes). In den meisten Fällen möchtet Ihr jedoch Formulare in einer lokalen Umgebung erstellen und auf Eurer Live-Webseite bereitstellen. Heute werde ich Euch erklären, wie das geht.

Zuerst müsst Ihr ein weiteres Modul installieren: Webform Features. Auf diese Weise könnt Ihr Webforms über das Modul Features als Feature exportieren. Nach der Installation von Webform Features könnt Ihr Euren Formularen maschinenlesbare Namen zuweisen.

Webform mit maschinenlesbarem Namen.
Webform mit maschinenlesbarem Namen.

Anschließend könnt Ihr das erstellte Formular aus dem Feature-Dialog auswählen. Bitte beachtet: Die maschinenlesbaren Namen müssen eindeutig sein. Sie werden automatisch erstellt, wenn Ihr ein neues Webform erstellt, können aber auch manuell bearbeitet werden.

Webform im Feature-Erstellungsdialog.
Webform im Feature-Erstellungsdialog.

Benutzerdefinierte Templates für Webforms

Vielleicht wollt Ihr auch ein eigenes Template für Euer Webform erstellen. Leider könnt Ihr derzeit nur Templates für bestimmte Node-IDs erstellen und man kann das Verhalten noch nicht einmal mit theme_hook_suggestions ändern, da das Webform-Modul die Template-Namen mit einer Pattern einschränkt. Es gab einen Versuch dies zu ändern, aber die Webform-Entwickler sind bei diesem Thema sehr stur.

Also seid Ihr im Grunde genommen gezwungen einen Patch zu verwenden:

diff --git a/webform.module b/webform.module
index c5c1802..ad72360 100644
--- a/webform.module
+++ b/webform.module
@@ -625,7 +625,6 @@ function webform_theme() {
     'webform_form' => array(
       'render element' => 'form',
       'template' => 'templates/webform-form',
-      'pattern' => 'webform_form_[0-9]+',
     ),
     'webform_confirmation' => array(
       'variables' => array('node' => NULL, 'sid' => NULL),

Anschließend könnt Ihr über Eure eigenen theme_hook_suggestions aus der template.php heraus neue Templates definieren. Tatsächlich könnt Ihr jeden Namen verwenden, der Euch in den Sinn kommt. Die Vorschläge unten entsprechen den Drupal Standards.

function YOUR_THEME_preprocess_webform_form(array &$variables) {
  $node = $variables['form']['#node'];
  if (isset($node->webform['machine_name'])) {
    $machine_name = $node->webform['machine_name'];
    $variables['theme_hook_suggestions'][] = 'webform_form__' . $machine_name;
  }
}

Endlich könnt Ihr nun für jedes Webform ein "deploybares", individuelles Template erstellen.

Aber was ist mit Drupal 8?

In Drupal 8 können Webforms über die Konfiguration exportiert werden. Also gibt es keine Notwendigkeit mehr für das Webform Features Modul.


Kommentare


Wichtig: Durch den Click auf die obige Checkbox stimmst Du ausdrücklich der Übertragung von Daten an Facebook zu. Die Zustimmung erfolgt einmalig für die Kommentare dieses Artikels und wird nicht gespeichert. Weitere Details kannst Du dem Punkt Social Plugins der Datenschutzerklärung entnehmen.