Drupal 8 için özel bir webform handler eklentisi oluşturma.
Bu belgede, web formunu ve webform-ui'yi zaten yüklediğinizi ve etkinleştirdiğiniz varsayılmaktadır
1) Web formunuzu oluşturun. - Yapı -> web formlarına gidin ve "+ Web formu ekle" düğmesine basın. - Kullanıcı arayüzünü kullanabilir veya yaml kullanabilirsiniz, bu size kalmış. e-posta adresi alan bir alan formu için örnek yaml:
email:
'#type': email
'#title': email
'#title_display': invisible
'#placeholder': 'ENTER YOUR EMAIL'
'#attributes':
class:
- my-ip
Girinti yaml için önemlidir, bu yüzden doğru aldığınızdan emin olun. girintiler boşluktur.
Şimdi formunuzu kaydedin.
2) Webform işleyici eklentisi oluşturma
Ardından, web formunu düzenlerken "E-postalar / İşleyiciler" bölümünde görünecek yeni bir eklenti oluşturabiliriz. Benim işleyici olarak adlandıracağım, benim işleyicimin tüm sözlerini seçtiğiniz adla değiştirirseniz, istediğiniz şeyi arayabilirsiniz.
a) Eklentiniz için yeni bir klasör oluşturun, bunu aşağıdaki alt klasörde drupal kökünüzde (/ var / www / html / olarak anılır) yapın: / var / www / html / modules / Custom / myhandler
b) Yukarıdaki dizinde bu dosyada myhandler.info.yml adlı yeni bir dosya oluşturun:
name: My Form Handler
description: handles form submits, does something with them.
package: Custom
type: module
version: 1.0
core: 8.x
3) Modül dizininizde bir src dizini oluşturun, örneğin: / var / www / html / modules / Custom / myhandler / src in src eklentisinde eklenti oluşturun WebformHandler oluşturun
(bu tek seferde kullanarak elde edilebilir
mkdir -p /var/www/html/modules/Custom/myhandler/src/Plugin/WebformHandler/
bu da mpdir'e -p bayrağını kullanarak tüm yapıyı tek seferde yapacak.)
4) Yeni bir dosya oluşturun /var/www/html/modules/Custom/myhandler/src/Plugin/WebformHandler/MyFormHandler.php
Bu dosyada aşağıdaki php kodu gider, ben gerekirse eklenti yapılandırmak nasıl görebilirsiniz görebilirsiniz yapılandırma formu kurulum bıraktım.
<?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 modülünüzü etkinleştirin (drush veya expand menüsünü kullanarak) ve drupal önbelleğinizi (drupal kökünüzün altındaki herhangi bir yerden "drush cr" yeniden oluşturun (/ var / www / html burada drush kullanırsanız)
6) web formunuzu düzenleyin, "E-posta / İşleyiciler" e gidin ve "+ İşleyici Ekle" düğmesini tıklayın Eklentinizin listelendiğini, İşleyici Ekle'yi tıklayın, şimdi gönderim URL'sini soran bir kutu görmelisiniz. Kaydet düğmesine tıklayın. Bir şey düzgün görünmüyorsa veya çalışmıyorsa, apache hata günlüğünü kontrol edin, orada yararlı bir şeyler bulabilirsiniz.
7) Formunuzu test edin - forma gönderin ve ardından gözlem günlüğünü (drush ws) kontrol edin, kendisine gönderilen değerleri görmelisiniz. Gördüğünüz çıktıda kesilmiş olabilirler, panik yapmayın, hepsi orada. Bununla şimdi ne yapacağınız size kalmış.
Umarım bu birine yardımcı olur. Yeri çevresinde bulduğum şeylerden bir araya getirdim ve tek bir belgeye yazdım. Beni buraya getiren diğerlerine teşekkürler.
hook_form_alter()
yoksa neyi yanlış yaptığınızı söylemek biraz daha zor. Ayrıca, hangi formu değiştirmeye çalıştığınızı söylemelisiniz.