मैं फॉर्म सबमिशन हैंडलर को कैसे बदलूं?


16

किसी कारण से मुझे डेटाबेस में संग्रहीत किए जाने से ठीक पहले किसी भी रूप में प्रत्येक एकल टेक्स्टफील्ड में कुछ वर्ण (यदि मौजूद हैं) को बदलने की आवश्यकता है। दूसरे शब्दों में, मुझे एक हुक की आवश्यकता है जिसमें मैं सभी प्रस्तुत डेटा प्राप्त कर सकता हूं और उनके पात्रों को प्रतिस्थापित कर सकता हूं।
मुझे यह समाधान मिला:

function hook_form_alter($form, $form_state, $form_id) {
  $form['#submit'] = 'my_custom_submission_function';
}

लेकिन यह एक अच्छा विचार नहीं है क्योंकि मुझे बाकी सबमिशन प्रगति का भी ध्यान रखना है। मुझे बस कुछ पात्रों को बदलने की आवश्यकता है। क्या ऐसा करने के लिए कोई हुक है? उपाय क्या हैं?

जवाबों:


22

$form['#submit']प्रपत्र सबमिट हैंडलर की एक सरणी संग्रहीत करता है। आपके द्वारा प्रदान किए गए कोड के साथ आप इसे केवल अपनी खुद की जोड़कर अधिलेखित कर रहे हैं। आप जो परिणाम चाहते हैं उसे पाने के लिए आपको अपने सबमिट हैंडलर को इस तरह से सरणी में पहले तत्व के रूप में जोड़ना चाहिए:

array_unshift($form['#submit'], 'mymodule_custom_submission');

सही रूपों में सही मूल्य प्राप्त करना और कुछ पात्रों को प्रतिस्थापित करना शायद अपने आप में एक बड़ा मुद्दा है। आप यह सुनिश्चित करने के लिए कि आप कुछ भी नहीं तोड़ते हैं, आपको उन रूपों / क्षेत्रों को संकीर्ण करना होगा, जिन्हें आपको बदलना होगा।


2

शायद ड्रूपल द्वारा सुझाए गए के बजाय सत्यापन के दौरान इन संशोधनों को करना बेहतर होगा (देखें form_set_value फ़ंक्शन https://api.drupal.org/api/drupal/includes -form.inc/form_form_value/7 पर )।

यदि आप चाहें तो अपने हुक_फॉर्म_अल्टर में आप इसे मौजूदा सत्यापन कार्यों के अंत में भी जोड़ सकते हैं:

$form['#validate'][] = 'mymodule_custom_validation';
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.