ड्रुपल 8 के लिए एक कस्टम वेबफॉर्म हैंडलर प्लगइन बनाना।
यह दस्तावेज़ मानता है कि आपने पहले ही वेबफॉर्म और वेबफॉर्म-यूआई को स्थापित और सक्षम कर दिया है
1) अपना वेबफॉर्म बनाएं। - संरचना पर जाएँ -> वेबफ़ॉर्म और "+ वेबफ़ॉर्म जोड़ें" बटन दबाएं। - आप या तो यूआई का उपयोग कर सकते हैं या यमल का उपयोग कर सकते हैं, जो आपके ऊपर है। उदाहरण एक ईमेल फॉर्म लेने वाले फ़ील्ड फ़ील्ड के लिए yaml:
email:
'#type': email
'#title': email
'#title_display': invisible
'#placeholder': 'ENTER YOUR EMAIL'
'#attributes':
class:
- my-ip
याम्ल के लिए इंडेंटेशन महत्वपूर्ण है इसलिए सुनिश्चित करें कि आप इसे सही तरीके से प्राप्त करते हैं। संकेत रिक्त स्थान हैं।
अब अपना फॉर्म सेव करें।
2) एक वेबर हैंडलर प्लगइन बनाना
आगे हम एक नया प्लगइन बना सकते हैं जो वेबफॉर्म को संपादित करते समय "ईमेल / हैंडलर्स" अनुभाग में दिखाई देगा। मैं इसे myhandler कहूंगा, आप इसे अपनी इच्छानुसार कॉल कर सकते हैं, बशर्ते कि आप myhandler के सभी उल्लेखों को आपके द्वारा चुने गए नाम से बदल दें।
a) अपने प्लगइन के लिए एक नया फ़ोल्डर बनाएं, इसे अपने ड्रुपल रूट में करें (निम्नलिखित के रूप में यहाँ / var / www / html / के रूप में संदर्भित): / var / www / html / मॉड्यूल / कस्टम / 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 / मॉड्यूल / कस्टम / myhandler / src में src बनाने प्लगइन में प्लगइन बनाने WebformHandler
(इसका उपयोग करके एक बार में प्राप्त किया जा सकता है
mkdir -p /var/www/html/modules/Custom/myhandler/src/Plugin/WebformHandler/
जो कि mpdir को -p फ्लैग का उपयोग करके एक ही बार में पूरी संरचना बना देगा।)
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 मॉड्यूल (ड्रश या मेन्यू का उपयोग करके) को सक्षम करें और फिर अपने ड्रुपल कैश ("ड्रश क्र" को अपने ड्रुपल रूट (/ var / www / html यहाँ) के तहत कहीं भी फिर से बनाएँ (यदि आप ड्रश का उपयोग करते हैं)।
6) अपने वेबफ़ॉर्म को संपादित करें, "ईमेल / हैंडलर" पर जाएं और "+ हैंडलर जोड़ें" बटन पर क्लिक करें। आपको अपना प्लगइन सूचीबद्ध दिखाई देना चाहिए, हैंडलर जोड़ें पर क्लिक करें, आपको अब एक बॉक्स देखना चाहिए जो सबमिशन यूआरएल के लिए पूछ रहा है। Save बटन पर क्लिक करें। यदि कुछ सही नहीं दिखता है, या यह काम नहीं कर रहा है, तो अपाचे त्रुटि लॉग की जांच करें, आपको वहां कुछ उपयोगी मिल सकता है।
7) अपने फॉर्म का परीक्षण करें - फॉर्म को सबमिट करें, और फिर वॉचडॉग लॉग (ड्रश ws) की जांच करें, आपको इसे भेजे गए मानों को देखना चाहिए। वे आपके द्वारा देखे जाने वाले आउटपुट में काटे जा सकते हैं, घबराएँ नहीं, यह सब वहाँ है। अब आप इसके साथ क्या करते हैं यह आपके ऊपर है।
आशा है कि यह किसी की मदद करता है। मैंने इसे सामान से एक साथ जोड़ दिया, जो मैंने उस जगह के आसपास पाया और इसे एक एकल दस्तावेज़ में लिखा। दूसरों का शुक्रिया जो मुझे यहां मिला।
hook_form_alter()
, या यह बताना थोड़ा कठिन है कि आप क्या कर रहे हैं। इसके अलावा, आपको यह कहना चाहिए कि आप किस रूप में परिवर्तन करने का प्रयास कर रहे हैं।