การสร้างปลั๊กอินตัวจัดการเว็บฟอร์มที่กำหนดเองสำหรับ drupal 8
เอกสารนี้จะถือว่าคุณได้ติดตั้งและเปิดใช้งาน webform และ webform-ui แล้ว
1) สร้างเว็บฟอร์มของคุณ - ไปที่โครงสร้าง -> เว็บฟอร์มและกดปุ่ม "+ เพิ่มเว็บฟอร์ม" - คุณสามารถใช้ ui หรือใช้ yaml ได้ขึ้นอยู่กับคุณ ตัวอย่าง yaml สำหรับฟอร์มฟิลด์เดียวที่ใช้ที่อยู่อีเมล:
email:
'#type': email
'#title': email
'#title_display': invisible
'#placeholder': 'ENTER YOUR EMAIL'
'#attributes':
class:
- my-ip
การเยื้องเป็นสิ่งสำคัญสำหรับ yaml ดังนั้นให้แน่ใจว่าคุณทำให้ถูกต้อง เยื้องเป็นช่องว่าง
ตอนนี้บันทึกฟอร์มของคุณ
2) การสร้างปลั๊กอินตัวจัดการเว็บฟอร์ม
ต่อไปเราสามารถสร้างปลั๊กอินใหม่ซึ่งจะแสดงในส่วน "อีเมล / ตัวจัดการ" เมื่อแก้ไขเว็บฟอร์ม ฉันจะเรียกมันว่า myhandler คุณสามารถเรียกมันว่าสิ่งที่คุณต้องการหากคุณแทนที่ myhandler ทั้งหมดด้วยชื่อที่คุณเลือก
a) สร้างโฟลเดอร์ใหม่สำหรับปลั๊กอินของคุณทำในรูท drupal ของคุณ (เรียกที่นี่ว่า / var / www / html /) ในโฟลเดอร์ย่อยต่อไปนี้: / var / www / html / modules / 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 / modules / กำหนดเอง / myhandler / src ใน src สร้างปลั๊กอินในปลั๊กอินสร้าง 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) ทดสอบแบบฟอร์มของคุณ - ส่งแบบฟอร์มจากนั้นตรวจสอบบันทึกการเฝ้าสังเกต (ดูรายละเอียด) คุณควรเห็นค่าที่ส่งไป พวกเขาอาจถูกตัดทอนในผลลัพธ์ที่คุณเห็นไม่ต้องตกใจมันมีทั้งหมด สิ่งที่คุณทำตอนนี้ขึ้นอยู่กับคุณ
หวังว่านี่จะช่วยใครซักคน ฉันปูด้วยกันจากสิ่งของที่ฉันพบรอบ ๆ สถานที่และเขียนลงในเอกสารชิ้นเดียว ขอบคุณคนอื่น ๆ ที่มาหาฉันที่นี่
hook_form_alter()
หรือยากกว่าที่จะบอกคุณว่าคุณทำอะไรผิด นอกจากนี้คุณควรบอกว่าคุณกำลังพยายามแก้ไขฟอร์มใด