2013-06-12 6 views
5

तो मेरे पास तीन प्रकार के उपयोगकर्ता हैं - व्यवस्थापक, एलए व्यवस्थापक और उपयोगकर्ता। मैं इसे स्थापित करने की कोशिश कर रहा हूं ताकि व्यवस्थापक और एलए व्यवस्थापक उपयोगकर्ता के लिए उपयोगकर्ता नाम, पासवर्ड और टाइमज़ोन संपादित नहीं कर सकें। मैं व्यवस्थापक के लिए डिफ़ॉल्ट उपयोगकर्ता संपादन फ़ॉर्म के बारे में बात कर रहा हूं और फॉर्म आईडी "उपयोगकर्ता-प्रोफ़ाइल-फ़ॉर्म" है।ड्रूपल में उपयोगकर्ता को संपादित करें फॉर्म पर कुछ फ़ील्ड कैसे छिपाना है?

मैंने एक कस्टम मॉड्यूल बनाया है लेकिन ऐसा लगता है कि यह काम नहीं कर रहा है। कोई विचार क्या मैं गलत कर रहा हूँ?

यहां तक ​​कि var_dump outputting प्रतीत नहीं होता है। मैंने कैश साफ़ कर दिया है और सत्यापित किया है कि मॉड्यूल सक्षम है।

function profile_change_form_alter(&$form, $form_state, $form_id) { 
    if ($form_id === 'user-profile-form') { 
     var_dump ($form); 

     hide($form['account']['pass']); 
     hide($form['account']['current_pass_required_values']); 
     hide($form['account']['current_pass']); 
    } 
} 
+0

इसके बजाय उन्हें अक्षम कर दें, यह समझ में आता है! –

उत्तर

3

मैं तुम्हें नाम मॉड्यूल संभालने रहा हूँ कि आप इसे hook_form_alter() का स्वरूप, जहाँ आप अपने मॉड्यूल का नाम profile_change साथ hook जगह ले ली है में प्रयोग किया जाता है PROFILE_CHANGE & तो।

आपने 3 '=' हस्ताक्षर किया है जहां आप फॉर्म आईडी की जांच करने के लिए शर्त दे रहे हैं, जो user-profile-form है। मैंने सरल बराबर चिह्न रखा है जो '==' & यह काम कर रहा है।

function profile_change_form_alter(&$form, $form_state, $form_id) { 
    if ($form_id == 'user-profile-form') { 
     hide($form['account']['pass']); 
     hide($form['account']['current_pass_required_values']); 
     hide($form['account']['current_pass']); 
    } 
} 

var_dump() का उपयोग न करें, आप हमेशा DEVEL & जांच $formdpm($form) तरह के उत्पादन में सिर्फ प्रपत्र को बदलने के लिए अपने हुक समारोह के बाद का उपयोग करना चाहिए। यह आपको फ़ॉर्म के बारे में सारी जानकारी देगा, जहां आपके पास कभी भी आपके पृष्ठ पर एक फॉर्म होगा।

function profile_change_form_alter(&$form, $form_state, $form_id) { 
    dpm($form); 
} 
3

असल में मैं बस अपना कोड में user_profile_form को user-profile-form बदलने के लिए यह काम करने के लिए किया था। किसी कारण से, ड्रूपल को अंडरस्कोर की आवश्यकता होती है।

+1

'$ form_id' फॉर्म का आईडी है जो उसके PHP फ़ंक्शन नाम से लिया गया है, न कि HTML आईडी (जो संगत होने की गारंटी नहीं है)। यही कारण है कि इसमें अंडरस्कोर होता है और हाइफ़न नहीं होता है जब आप – Clive

+1

"किसी कारण से" फ़ॉर्म को बदलते हैं क्योंकि डैश और अंडरस्कोर समकक्ष तार नहीं होते हैं। मार्कअप ड्रूपल आउटपुट में डैश होते हैं, लेकिन आंतरिक रूप से यह अंडरस्कोर का उपयोग करता है। आप अपना स्रोत देखकर और 'इनपुट [name = "form_id"] 'ढूंढकर और उस सटीक मान का उपयोग करके फॉर्म आईडी पा सकते हैं। किसी भी ड्रूपल व्यवस्थापक फॉर्म पेज पर अपने ब्राउज़र कंसोल में इस jQuery स्निपेट को चलाने का प्रयास करें: 'jQuery (' इनपुट [name = "form_id"] ')। Val() ' –

5

यदि आप hide() का उपयोग करते हैं तो आप फ़ील्ड को हटा देंगे, लेकिन छुपाएं "देरी" फ़ील्ड प्रतिपादन के लिए अधिक है ... जैसे आप इसे छुपाते हैं, लेकिन फिर (टेम्पलेट फ़ाइल में) आप इसे किसी अन्य स्थान पर प्रिंट करते हैं। क्योंकि, यदि आप बाद में इसे प्रिंट नहीं करते हैं तो इसे पृष्ठ में प्रस्तुत नहीं किया जाएगा, यदि यह अनिवार्य है तो आपको सत्यापन त्रुटि मिल जाएगी और इसी तरह से।

आप इसे छुपाना चाहते हैं, तो उपयोगकर्ता इसे नहीं देख सकते, लेकिन आप प्रपत्र चाहते हैं की तरह क्षेत्र उपयोग कुछ के पिछले मूल्य रखने के लिए हैं:

$form['field_yourfield']['#access'] = FALSE; 

और आप इसे दिखाई देना चाहते हैं, लेकिन अक्षम (उपयोगकर्ता इसका मान नहीं बदल सकता):

$form['field_yourfield']['#disabled'] = TRUE; 
+1

धन्यवाद यह काम कर रहा है –

संबंधित मुद्दे