Створення користувальницького плагіна для обробки веб-форм для drupal 8.
Цей документ передбачає, що ви вже встановили та включили веб-форму та веб-форму
1) Створіть свою веб-форму. - Перейдіть до структури -> веб-форм і натисніть кнопку "+ Додати веб-форму". - Ви можете або використовувати ui, або використовувати yaml, це залежить від вас. приклад yaml для форми однієї поля, яка містить електронну адресу:
email:
'#type': email
'#title': email
'#title_display': invisible
'#placeholder': 'ENTER YOUR EMAIL'
'#attributes':
class:
- my-ip
Відступ важливий для ямла, тому переконайтеся, що ви його правильно. відступи - пробіли.
Тепер збережіть форму.
2) Створення плагіна для обробки веб-форм
Далі ми можемо створити новий плагін, який з’явиться у розділі «Електронна пошта / Обробники» під час редагування веб-форми. Я буду називати його myhandler, ви можете називати його, що хочете, за умови, що ви заміните всі згадки про myhandler на вибране ім'я.
a) Створіть нову папку для свого плагіна, зробіть це у вашому корінці drupal (згаданому тут / var / www / html /) у наступній підпапці: / var / www / html / module / Custom / myhandler
b) Створіть новий файл у наведеній вище каталозі під назвою myhandler.info.yml, у цьому файлі йде наступне:
name: My Form Handler
description: handles form submits, does something with them.
package: Custom
type: module
version: 1.0
core: 8.x
3) Створіть каталог src у каталозі свого модуля, наприклад: / var / www / html / module / Custom / myhandler / src in src create Plugin in Plugin create WebformHandler
(це можна досягти за один раз за допомогою
mkdir -p /var/www/html/modules/Custom/myhandler/src/Plugin/WebformHandler/
що зробить всю структуру за один раз, використовуючи прапор -p для mkdir.)
4) Створіть новий файл /var/www/html/modules/Custom/myhandler/src/Plugin/WebformHandler/MyFormHandler.php
у цьому файлі йде наступний php-код, я залишив налаштування форми конфігурації, щоб ви могли бачити, як налаштувати ваш плагін, якщо потрібно.
<?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) Увімкніть модуль MyHandler (за допомогою меню "drush" або "розширити"), а потім відновіть кеш Drupal ("drush cr" з будь-якого місця під вашим корінком drupal (/ var / www / html тут), це зробить, якщо ви використовуєте drush)
6) відредагуйте веб-форму, перейдіть до "Електронна пошта / Обробники" та натисніть кнопку "+ Додати обробник". Ви повинні побачити ваш плагін у списку, натисніть кнопку Додати обробник, тепер ви повинні побачити вікно із запитом URL для подання. натисніть кнопку Зберегти. Якщо щось не виглядає правильно, або воно не працює, перевірте журнал помилок apache, там ви можете знайти щось корисне.
7) Перевірте форму - зробіть подання до форми, а потім перевірте журнал сторожової собаки (drush ws), ви повинні побачити надіслані їй значення. Вони можуть бути врізані у висновок, який ви бачите, не панікуйте, це все є. Що ви робите з цим зараз, залежить від вас.
Сподіваюся, що це комусь допоможе. Я обмотав це разом із речей, які я знайшов навколо цього місця, і записав його в єдиний документ. Дякую іншим, хто мене тут завів.
hook_form_alter()
, або трохи складніше сказати, що ви робите неправильно. Також слід сказати, яку форму ви намагаєтесь змінити.