Erstellen eines benutzerdefinierten Webform-Handler-Plugins für Drupal 8.
In diesem Dokument wird davon ausgegangen, dass Sie Webform und Webform-UI bereits installiert und aktiviert haben
1) Erstellen Sie Ihr Webformular. - Gehen Sie zu Struktur -> Webformulare und klicken Sie auf die Schaltfläche "+ Webformular hinzufügen". - Sie können entweder die Benutzeroberfläche oder Yaml verwenden, das liegt ganz bei Ihnen. Beispiel-Yaml für ein Ein-Feld-Formular, das eine E-Mail-Adresse enthält:
email:
'#type': email
'#title': email
'#title_display': invisible
'#placeholder': 'ENTER YOUR EMAIL'
'#attributes':
class:
- my-ip
Die Einrückung ist wichtig für yaml, stellen Sie also sicher, dass Sie es richtig machen. Einrückungen sind Leerzeichen.
Speichern Sie nun Ihr Formular.
2) Erstellen eines Webform-Handler-Plugins
Als nächstes können wir ein neues Plugin erstellen, das beim Bearbeiten des Webformulars im Abschnitt "E-Mails / Handler" angezeigt wird. Ich werde es myhandler nennen, Sie können es so nennen, wie Sie möchten, vorausgesetzt, Sie ersetzen alle Erwähnungen von myhandler durch den Namen, den Sie auswählen.
a) Erstellen Sie einen neuen Ordner für Ihr Plugin. Befolgen Sie dies in Ihrem Drupal-Stammverzeichnis (hier als / var / www / html / bezeichnet) im folgenden Unterordner: / var / www / html / modules / Custom / myhandler
b) Erstellen Sie eine neue Datei im obigen Verzeichnis mit dem Namen myhandler.info.yml. Diese Datei enthält folgende Informationen:
name: My Form Handler
description: handles form submits, does something with them.
package: Custom
type: module
version: 1.0
core: 8.x
3) Erstellen Sie ein src-Verzeichnis in Ihrem Modulverzeichnis, z. B .: / var / www / html / modules / Custom / myhandler / src in src Plugin erstellen in Plugin erstellen WebformHandler
(Dies kann in einem Durchgang mit erreicht werden
mkdir -p /var/www/html/modules/Custom/myhandler/src/Plugin/WebformHandler/
Dadurch wird die gesamte Struktur in einem Durchgang mit dem Flag -p zu mkdir.)
4) Erstellen Sie eine neue Datei /var/www/html/modules/Custom/myhandler/src/Plugin/WebformHandler/MyFormHandler.php
In dieser Datei befindet sich der folgende PHP-Code. Ich habe das Konfigurationsformular verlassen, damit Sie bei Bedarf sehen können, wie Sie Ihr Plugin konfigurieren.
<?php
namespace Drupal\myhandler\Plugin\WebformHandler;
use Drupal\Core\Session\AccountInterface;
use Drupal\Core\Serialization\Yaml;
use Drupal\Core\Form\FormStateInterface;
use Drupal\webform\Plugin\WebformHandlerBase;
use Drupal\webform\webformSubmissionInterface;
/**
* Form submission handler.
*
* @WebformHandler(
* id = "myhandler_form_handler",
* label = @Translation("MyHandler form handler"),
* category = @Translation("Form Handler"),
* description = @Translation("Do something extra with form submissions"),
* cardinality = \Drupal\webform\Plugin\WebformHandlerInterface::CARDINALITY_SINGLE,
* results = \Drupal\webform\Plugin\WebformHandlerInterface::RESULTS_PROCESSED,
* )
*/
class MyFormHandler extends WebformHandlerBase {
/**
* {@inheritdoc}
*/
public function defaultConfiguration() {
return [
'submission_url' => 'https://api.example.org/SOME/ENDPOINT',
];
}
/**
* {@inheritdoc}
*/
public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
$form['submission_url'] = [
'#type' => 'textfield',
'#title' => $this->t('Submission URL to api.example.org'),
'#description' => $this->t('The URL to post the submission data to.'),
'#default_value' => $this->configuration['submission_url'],
'#required' => TRUE,
];
return $form;
}
/**
* {@inheritdoc}
*/
public function submitForm(array &$form, FormStateInterface $form_state, WebformSubmissionInterface $webform_submission) {
// Your code here.
// Get an array of the values from the submission.
$values = $webform_submission->getData();
// Get the URL to post the data to.
$post_url = $this->configuration['submission_url'];
$message = "MyHandler got form data:".print_r($values,1);
\Drupal::logger('myformhandler')->error($message);
return true;
}
}
?>
5) Aktivieren Sie Ihr MyHandler-Modul (mit drush oder extend menu) und erstellen Sie dann Ihren Drupal-Cache neu ("drush cr" von irgendwo unter Ihrem Drupal-Stammverzeichnis (/ var / www / html hier) würde dies tun, wenn Sie drush verwenden)
6) bearbeite dein Webformular, gehe zu "Email / Handlers" und klicke auf "+ Handler hinzufügen". Du solltest dein Plugin aufgelistet sehen, klicke auf "Handler hinzufügen". Klicken Sie auf die Schaltfläche Speichern. Wenn etwas nicht richtig aussieht oder nicht funktioniert, überprüfen Sie das Apache-Fehlerprotokoll. Möglicherweise finden Sie dort etwas Hilfreiches.
7) Testen Sie Ihr Formular - reichen Sie eine Übermittlung an das Formular ein und überprüfen Sie dann das Watchdog-Protokoll (drush ws). Sie sollten die Werte sehen, die an das Formular gesendet wurden. Sie könnten in der Ausgabe abgeschnitten sein, keine Panik, es ist alles da. Was Sie jetzt damit machen, liegt bei Ihnen.
Hoffe das hilft jemandem. Ich habe es aus Sachen zusammengeschustert, die ich in der Gegend gefunden habe, und es in ein einziges Dokument geschrieben. Vielen Dank an die anderen, die mich hierher gebracht haben.
hook_form_alter()
, sonst ist es etwas schwieriger, Ihnen mitzuteilen, was Sie falsch machen. Außerdem sollten Sie angeben, welche Form Sie ändern möchten.