चयन प्रपत्र फ़ील्ड के लिए एक विकल्प को अक्षम करें


9

मैं चयन फ़ॉर्म फ़ील्ड में एक विकल्प को कैसे अक्षम कर सकता हूं?

$form['feed'] = array(
  '#type' => 'select', 
  '#title' => t('Display of XML feed items'), 
  '#options' => array(
    'title' => t('Titles only'), 
    'teaser' => t('Titles plus teaser'), 
    'fulltext' => t('Full text'),
  ),
  '#description' => t('Global setting for the length of XML feed items that are output by default.'),
);

मैं कैसे अक्षम कर सकता हूं, उदाहरण के लिए, "केवल शीर्षक" विकल्प?


यह जानना बहुत अच्छा होगा कि कैसे करना है, मैं अभी भी सूची में प्रकट होने का विकल्प चाहता हूं, लेकिन चयन योग्य नहीं ...
DrCord

जवाबों:


6

"चयन" फ़ॉर्म फ़ील्ड के लिए विकल्पों में से एक को अक्षम करने का एकमात्र तरीका है, जो विषय_सेलेक्ट () फ़ंक्शन को कार्यान्वित करने के लिए हुक_टीम_रजिस्ट्री_अल्टर () को ओवरराइड करता है ।

theme_select() निम्नलिखित कोड निष्पादित करता है:

function theme_select($variables) {
  $element = $variables['element'];
  element_set_attributes($element, array('id', 'name', 'size'));
  _form_set_class($element, array('form-select'));

  return '<select' . drupal_attributes($element['#attributes']) . '>' . form_select_options($element) . '</select>';
}

आपके द्वारा कार्यान्वित फ़ंक्शन को form_select_options () के बजाय अपने स्वयं के फ़ंक्शन को लागू करना चाहिए ।

जैसा कि theme_select()किसी भी Drupal फॉर्म में उपयोग किए जाने वाले प्रत्येक चयनित फ़ील्ड के लिए कहा जाता है, मैं आपके द्वारा इच्छित फॉर्म फ़ील्ड से विकल्प को हटाने के लिए hook_form_alter () को लागू करने पर विचार करूंगा ।


6

एक विकल्प को निष्क्रिय करना मुश्किल हो सकता है ( किसी फ़ील्ड के एक विकल्प को अक्षम करने के लिए form_alter का उपयोग करके ) इसलिए मैं आपको विकल्प के रूप में ऑप्टग्राफ को देखने की सलाह दूंगा । Drupal फॉर्म API दस्तावेज़ीकरण इसकी व्याख्या नहीं करता है, लेकिन एपीआई विकल्पों के लिए नेस्टेड सरणी की अनुमति देता है, form_select_options () और <optgroup>भाग पर एक नज़र है ।
आप इस कोड को लिख सकते हैं:

$form['feed'] = array(
    '#type' => 'select', 
    '#title' => t('Display of XML feed items'), 
    '#options' => array(
        'Titles only' => array(, 
          'teaser' => t('Titles plus teaser'), 
          'fulltext' => t('Full text'),
        ),
        'Titles only 2' => array(, 
          'teaser2' => t('Titles plus teaser 2'), 
          'fulltext2' => t('Full text 2'),
        ),
    ),
    '#description' => t('Global setting for the length of XML feed items that are output by default.'),
);

Drupal 6 रूपों और ऑप्टग्रुप सरणियों पर एक नज़र डालें ।

संपादित करें : यह स्पष्ट करने के लिए एक विकल्प है और एक सीधा जवाब नहीं है।


प्रश्न किसी एक विकल्प को अक्षम करने के बारे में है, न कि उन्हें समूहीकृत करने के लिए।
kiamlaluno

मुझे यह समझ में आया लेकिन मुझे लगा कि ऑप्टग्रुप एक अच्छा विकल्प प्रदान करता है।
tostinni

प्रतिभाशाली! बिलकुल वही, जिसकी मुझे तलाश थी, धन्यवाद !!!
3

3

मैं नहीं जानता और किसी भी विकल्प को निष्क्रिय करने का कोई तरीका नहीं ढूंढ सका हूं । ऐसा लगता है कि वे ड्रुपल में ऐसा कुछ पाने की कोशिश कर रहे हैं। शायद कुछ विकल्प, क्या आप चाहते हैं कि सीएसएस के साथ किया जा सकता है ?:

$form['feed']['#attributes'] = array('class' => array('options-styles-class'));

या, यदि आप नहीं चाहते कि मूल्यों को दिखाया जाए तो आप उन्हें परेशान कर सकते हैं

unset($form['feed']['#options']['title']);

3

मुझे निम्नलिखित लाइन के साथ काम करने का मौका मिला

unset($form['field_name']['und']['#options'][1]);

जहां 1 उस आइटम का सूचकांक है जिसे आप प्रदर्शित नहीं करना चाहते हैं।


यह विकल्प को हटा देता है। सवाल विकल्प को निष्क्रिय करने के बारे में है (इसे धूसर प्रदर्शित करके छोड़ना)।
कोएन

0

एक एकल आइटम जिसे आप रिक्त में अक्षम करना चाहते हैं, उसे रूपांतरित करें <optgroup>

पेशेवरों:

  • यह hook_form_alterआपके कस्टम फॉर्म का निर्माण करते समय या सीधे किया जा सकता है , theme_selectआपके विषय में फ़ंक्शन को लागू करने की कोई आवश्यकता नहीं है ।

विपक्ष:

  • परिणामी DOM में value='title'मूल से जुड़ी विशेषता को दर्शाने का कोई तरीका नहीं है <option>
  • YMMV यदि आप एक विकल्प को अक्षम करने का प्रयास कर रहे हैं जो पहले से ही एक ऑप्टग्रुप से संबंधित है। नेस्टेड ऑप्टग्रेप्स वास्तव में काम कर सकते हैं, लेकिन यह अप्रयुक्त और अपुष्ट है।

कार्यान्वयन:

Drupal में Optgroups #optionsको किसी भी key => valueजोड़े के रूप में सरणी के अंदर निरूपित किया जाता है जहाँ मूल्य स्वयं एक सरणी है।

इसलिए ओपी में उदाहरण से हम मूल्य t('Titles only')बनने के लिए आगे बढ़ते हैं keyऔर फिर मूल्य को एक खाली सरणी बनाते हैं।

$form['feed'] = array(
  '#type' => 'select', 
  '#title' => t('Display of XML feed items'), 
  '#options' => array(
    t('Titles only') => array(), // This one becomes disabled as an empty optgroup
    'teaser' => t('Titles plus teaser'), 
    'fulltext' => t('Full text'),
  ),
  '#description' => t('Global setting for the length of XML feed items that are output by default.'),
);

परिणामी HTML कुछ इस तरह दिखाई देगा:

<form>
  <div>
    <label>Display of XML feed items</label>
    <select>
      <optgroup>Titles only</optgroup>
      <option value="teaser">Titles plus teaser</option>
      <option value="fulltext">Full text</option>
    </select>
  </div>
</form>

0

पूरे क्षेत्र को अक्षम करने के लिए, का उपयोग करें

$form['field_name']['#disabled']= TRUE;

चयन क्षेत्र में एक विकल्प को अक्षम करने के लिए, का उपयोग करें

unset($form['field_name']['und']['#options'][1]);

कहाँ पे:

['field_name'] आपके क्षेत्र का नाम है

[१] सूची में विकल्प का सूचकांक है

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