जैविक रूप से समूह के लिए group_audience जैसे किसी रूप में फ़ील्ड्स तक पहुंच को छिपाने और / या कैसे रोकें


9

यह मुझे थोड़ी देर के लिए परेशान कर रहा है .. जब मैं समूह दर्शकों के क्षेत्र, या प्रकाशन फ़ॉर्म से फ़ील्ड को छिपाने का प्रयास करता हूं, तो सत्यापन पर प्रपत्र इन दोनों फ़ील्ड को एक शून्य मान पर सेट करता है, भले ही डीफ़ॉल्ट मान हो सही ढंग से घोषित किया गया।

मैंने अदृश्य, # अतिरिक्त का उपयोग करने की कोशिश की, कुछ भी नहीं छिपाया! यह बहुत परेशानी की बात है क्योंकि मेरे वर्तमान प्रोजेक्ट के लिए उपयोगकर्ता उस समय केवल अपनी प्रोफ़ाइल के छोटे-छोटे बिट्स को संपादित कर सकते हैं, उदाहरण के लिए, केवल पते या चित्र के लिए, इसलिए यदि मैं समूह दर्शकों को छिपाता हूं तो उपयोगकर्ता उन समूहों से बाहर निकल जाता है जिन्हें वह हर समय संबंधित है। संपादित करें।

मैंने उपयोगकर्ता को उनके समूह में रखते हुए इन फ़ील्ड को छिपाने के लिए नीचे दिए गए कोड का उपयोग करके समाप्त किया।

$variables['user_edit_about']['group_audience']= $temp['group_audience'];       
$variables['user_edit_about']['group_audience']['#prefix'] = '<div style="display:none;">';
$variables['user_edit_about']['group_audience']['#suffix'] = '</div>';

क्या कोई इसे हासिल करने का बेहतर तरीका सोचेगा?

धन्यवाद


यह उत्तर सही नहीं है क्योंकि उपयोग अभी भी डोम हेरफेर के साथ मूल्य बदल सकता है
iStryker

जवाबों:


6

संपादित करें:

ठीक है, मैंने पता लगा लिया। इसे अपने कस्टम मॉड्यूल में रखें:

function example_form_alter(&$form, &$form_state, $form_id) {
    if($form_id == 'story_node_form') {
        $form['title']['#value'] = 'hot stuff';
        $form['title']['#access'] = FALSE;

    }
}

यह कहानी नोड का शीर्षक 'हॉट स्टफ' पर सेट करेगा और यह पेज पर प्रस्तुत नहीं किया जाएगा क्योंकि #access = FALSE;

आप हुक_फॉर्म_ल्टर () की तरह अधिक ग्रैन्युलैरिटी नियंत्रण जोड़ सकते हैं

  global $user;

  // Check to see if $user has does not have the administrator role.
  if (!in_array('administrator', array_values($user->roles))) {
    $form['title']['#access'] = FALSE;
  }

यह Drupal 6 और 7 के लिए काम करता है।

पुराना उत्तर (उपेक्षा):

जब से मैंने ऐसा कुछ किया है, तब से मैं कुछ गलत कर रहा हूँ। यदि आप [#value]प्रपत्र आइटम सेट करते हैं, तो यह प्रपत्र पर दिखाई नहीं देगा।

मैंने ड्रुपल 6 hook_form_alter()में एक कस्टम मॉड्यूल में किया। मुझे नहीं पता कि यह ड्रुपल 7 में काम करेगा और मुझे नहीं पता कि क्या आप इसे प्रीप्रोसेस फंक्शन में कर सकते हैं


आपके उत्तर के लिए धन्यवाद, हालांकि यह दुर्भाग्य से मेरे मामले में काम नहीं किया, फॉर्म फ़ील्ड में पहले से ही एक #value पूर्व दर्ज किया गया है क्योंकि वे फॉर्म संपादित कर रहे हैं
SilkAdmin

@silkAdmin कृपया नए संपादन देखें
iStryker

उस समय के आसपास खुदाई करने के लिए धन्यवाद स्ट्राइकर के लिए धन्यवाद, घटना हालांकि आपके ऊपर तेचनिक काम करता है खेतों को छिपाने के लिए ऐसा लगता है कि डिफ़ॉल्ट मूल्य को या तो सबमिट करने पर ध्यान नहीं दिया जाता है। इसलिए मैं हर प्रोफाइल एडिट पर अपने ग्रुप से अभी भी बाहर निकल रहा हूं। अब तक केवल #prefix # प्रत्यय ट्रिक लगता है जिससे यह सामान्य रूप से व्यवहार करता है।
सिल्कएडमिन

$ $ रूप ['शीर्षक'] [value # मूल्य ’] = $ रूप [] शीर्षक’] [
default

5

आप 'एलिमेंट-हिडन' सीएसएस क्लास को भी फॉर्म एलिमेंट में जोड़ सकते हैं

$form['user_edit_about']['group_audience']['#attributes']['class'][] = 'element-hidden';

जैसा कि iStryker ने पहले उल्लेख किया है, यह अभी भी डोम हेरफेर के माध्यम से मूल्य को बदलना संभव होगा। हालाँकि, प्रपत्र फ़ील्ड (या किसी अन्य रेंडर तत्व) को छिपाने का यह एक अच्छा, आसान तरीका है। में element-hiddenवर्ग को परिभाषित किया गया है system.base.css


बडी, तुमने मुझे बचा लिया। धन्यवाद। मैंने देखा है अन्य सभी तरीकों से फार्म पर ही तत्वों का उत्पादन नहीं होता है। मेरे मामले में, मैं एक contrib मॉड्यूल में प्रपत्र तत्वों को छिपाना चाहता हूं जो उन तत्वों को फ़ॉर्म में होने की उम्मीद करता है अन्यथा यह ठीक से काम करने में विफल रहता है। आपका सीएसएस फिक्स अवांछित तत्वों को छुपाता है लेकिन सब कुछ अभी भी काम करता है। यह भी ध्यान देने के लिए धन्यवाद कि यह "हैकर-प्रूफ" नहीं है और केवल तब ही काम करता है जब आपको जरूरत है कि आप उस इंटरफ़ेस को सरल बनाएं जिसे आप विश्वसनीय संपादक उपयोगकर्ताओं के लिए प्रस्तुत करते हैं।
मारियो अवॉड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.