Tworzenie niestandardowej wtyczki do obsługi formularzy internetowych dla drupal 8.
Ten dokument zakłada, że już zainstalowałeś i włączyłeś webform i webform-ui
1) Utwórz swój formularz internetowy. - Przejdź do struktury -> formularze internetowe i naciśnij przycisk „+ Dodaj formularz internetowy”. - Możesz użyć interfejsu użytkownika lub yaml, to zależy od ciebie. przykład yaml dla formularza z jednym polem, który przyjmuje adres e-mail:
email:
'#type': email
'#title': email
'#title_display': invisible
'#placeholder': 'ENTER YOUR EMAIL'
'#attributes':
class:
- my-ip
Wcięcie jest ważne dla yaml, więc upewnij się, że dobrze to zrobisz. wcięcia są spacjami.
Teraz zapisz formularz.
2) Tworzenie wtyczki modułu obsługi formularzy internetowych
Następnie możemy utworzyć nową wtyczkę, która pojawi się w sekcji „Wiadomości e-mail / handlery” podczas edycji formularza internetowego. Nazywam to myhandler, możesz nazwać to jak chcesz, pod warunkiem, że zastąpisz wszystkie wzmianki o myhandler wybraną nazwą.
a) Utwórz nowy folder dla swojej wtyczki, zrób to w swoim katalogu głównym drupal (określanym tutaj jako / var / www / html /) w następującym podfolderze: / var / www / html / modules / Custom / myhandler
b) Utwórz nowy plik w powyższym katalogu o nazwie myhandler.info.yml w tym pliku jest następujący:
name: My Form Handler
description: handles form submits, does something with them.
package: Custom
type: module
version: 1.0
core: 8.x
3) Utwórz katalog src w katalogu modułów, np .: / var / www / html / modules / Custom / myhandler / src in src create Plugin in Plugin create WebformHandler
(można to osiągnąć za jednym razem, używając
mkdir -p /var/www/html/modules/Custom/myhandler/src/Plugin/WebformHandler/
co sprawi, że cała struktura za jednym razem użyje flagi -p do mkdir.)
4) Utwórz nowy plik /var/www/html/modules/Custom/myhandler/src/Plugin/WebformHandler/MyFormHandler.php
w tym pliku znajduje się następujący kod php, opuściłem konfigurację formularza konfiguracji, abyś mógł zobaczyć, jak skonfigurować wtyczkę w razie potrzeby.
<?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) Włącz moduł MyHandler (używając menu drush lub rozszerz), a następnie odbuduj pamięć podręczną drupal („drush cr” z dowolnego miejsca pod twoim rootem drupal (/ var / www / html tutaj) by to zrobił, jeśli używasz drush)
6) edytuj swój formularz internetowy, przejdź do „E-mail / handlerów” i kliknij przycisk „+ Dodaj moduł obsługi” Powinieneś zobaczyć swoją wtyczkę na liście, kliknij przycisk Dodaj moduł obsługi, powinieneś teraz zobaczyć pole z prośbą o podanie adresu URL przesyłania. kliknij przycisk Zapisz. Jeśli coś nie wygląda dobrze lub nie działa, sprawdź dziennik błędów apache, może tam być coś pomocnego.
7) Przetestuj formularz - prześlij formularz, a następnie sprawdź dziennik nadzoru (drush ws), powinieneś zobaczyć wartości przesłane do niego. Mogą one zostać obcięte na wyjściu, które widzisz, nie panikuj, to wszystko tam jest. To, co teraz z tym zrobisz, zależy od ciebie.
Mam nadzieję, że to komuś pomoże. Zebrałem go z rzeczy znalezionych w tym miejscu i zapisałem w jednym dokumencie. Dzięki innym, którzy mnie tu dostali.
hook_form_alter(), lub nieco trudniej jest ci powiedzieć, co robisz źle. Powinieneś także powiedzieć, którą formę chcesz zmienić.