प्रदर्शन से बाहर किए जाने के लिए $ फॉर्म तत्व निर्दिष्ट करें?


20

मैं form_alter या टेम्पलेट फ़ाइल का उपयोग करके फ़ॉर्म में कुछ तत्वों को छिपाना चाहता हूं। मैंने कहीं पढ़ा है कि Drupal 7 में, हम $ फॉर्म एलिमेंट्स निर्दिष्ट कर सकते हैं, इसलिए यह फॉर्म में प्रदर्शित नहीं होगा, लेकिन मुझे याद नहीं है! परेशान नहीं () लेकिन कुछ अन्य समारोह!

जवाबों:


29

unset()रूपों का उपयोग करना एक अच्छा समाधान नहीं है (जैसा कि मुझे लगता है कि आप जानते हैं), जैसा कि आप कभी नहीं जानते कि क्या सबमिट करें / मान्य हैंडलर प्रक्रिया शुरू होने पर असंगत तत्व की मौजूदगी की उम्मीद कर सकते हैं। इससे अवांछित त्रुटियां हो सकती हैं।

तीन तरीके हैं जो आप सुरक्षित रूप से एक फार्म तत्व को 'छिपाने' के लिए उपयोग कर सकते हैं

  • '#type' => 'value'तत्व पर उपयोग करें , जिसका प्रभाव होगा कि तत्व के लिए मूल्य अभी भी #valueसामान्य के साथ प्रस्तुत / मान्य कार्यों के माध्यम से पारित किया जाएगा । यह मेरी पसंदीदा विधि है।
  • का प्रयोग करें '#access' => FALSEनिरूपित करने के लिए यह स्क्रीन करने के लिए outputted नहीं किया जाना चाहिए तत्व पर।
  • उपयोग '#type' => 'hidden'बार्ट के रूप में सुझाव दिया है (हालांकि यह के उपयोग के आपके उपयोग के मामले पर निर्भर करता है, मैं अगर तुम तुम क्या एक फ़ॉर्म एलीमेंट का मान को छिपाने के लिए नहीं एक छिपा इनपुट के रूप में रूप में यह उत्पादन करना चाहते हैं की कोशिश कर रहे कल्पना)।

छिपाना भूल गया ()
युसेफ

2
@zhilevan का hide()उपयोग फार्म तत्वों पर नहीं किया जाना चाहिए, यह आसानी से पूरे फॉर्म जमा करने की प्रक्रिया को गड़बड़ कर सकता है क्योंकि सत्यापनकर्ता अभी भी तत्व के लिए चलाए जा रहे हैं। उदाहरण के लिए, यदि आप hide($form['title']);एक नोड फॉर्म पर हैं , तो आप कभी भी फॉर्म सबमिट नहीं कर पाएंगे, क्योंकि शीर्षक फ़ील्ड की आवश्यकता है, लेकिन एक मूल्य प्रदान नहीं किया जाएगा। 3 तरीकों से ऊपर सबसे अच्छा लोगों को उपयोग करने के लिए, इसी क्रम में :) हैं
क्लाइव

@ धन्यवाद, मैं उपरोक्त तरीकों को जानता हूं, मेरा सवाल छिपाने से संबंधित कुछ था () मुझे लगता है (अभी भी समारोह को याद नहीं कर सकते हैं) .. वैसे भी कृपया मेरी टिप्पणी को 1 उत्तर में देखें, drupal_render($form['base']['prices']['sell_price'])काम क्यों नहीं कर रहा है?
सेरजस

क्या यह कोड उस टेम्पलेट फ़ाइल में है जो फ़ॉर्म को थीम कर रही है? यदि नहीं, तो इसका कारण यह नहीं है कि जब आप स्क्रीन पर किसी भी रेंडर तत्व को प्रिंट कर सकते हैं drupal_render(), तो आपको कोई भी फॉर्म टैग / टोकन / आदि नहीं मिलेगा। जब तक आप उत्पादन पूरी $formसरणी
क्लाइव

मैं हुक विषय और print_r ($ फार्म) और यहां तक ​​कि drupal_render ($ फार्म ['शीर्षक']) काम कर रहे हैं, समस्या वर्टीकल टैब के तहत तत्व है!
सेराज

4

यदि आप टेम्प्लेट फ़ाइल का उपयोग कर रहे हैं तो आप छिपाकर () का उपयोग करके सामान छिपा सकते हैं ।

यदि आप किसी प्रपत्र तत्व को छिपाना चाहते हैं hook_form_alter, unset()तो आपका सबसे अच्छा विकल्प हो सकता है।

यदि यह केवल एक मूल्य संग्रहीत करने के लिए है तो आप '# टाइप' => 'छिपा' का उपयोग कर सकते हैं ।


छिपाना तत्व को बुझाने की बेहतर विधि है।
युसेफ

मैं जो प्राप्त करने की कोशिश कर रहा था वह एक कस्टम Ubsercart उत्पाद नोड रूप था, मैं सभी को बेचना_प्राइस प्रदर्शित करना चाहता था, और शिपिंग, भार आदि जैसे अन्य तत्वों को छिपाता हूं, लेकिन drupal_render($form['base']['prices']['sell_price'])प्रपत्र प्रदर्शित करेगा, लेकिन इसकी बचत नहीं!
सर्जस

4

मैंने पाया है कि #access का उपयोग झूठे कुछ रूपों को तोड़ सकता है यदि इसे सबमिट बटन या समान पर उपयोग किया जाता है। उन मामलों में मैंने तत्वों को छिपाने के लिए सीएसएस का उपयोग किया है:

$form['basic']['submit']['#attributes']['class'][] = 'element-hidden';

बस एक और विकल्प।

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