it-swarm.asia

قم بتعطيل خيار لحقل النموذج المحدد

كيف أقوم بتعطيل خيار في حقل النموذج المحدد؟

$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.'),
);

كيف يمكنني تعطيل خيار "العنوان فقط" ، على سبيل المثال؟

9
Miguel Borges

قد يكون تعطيل خيار ما أمرًا صعبًا ( باستخدام form_alter لتعطيل خيار ONE لحقل محدد ) لذا أوصيك بالنظر إلى optgroups كبديل. 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 ومصفوفات optgroup .

تحرير : لتوضيح هذا بديل وليست إجابة مباشرة.

6
tostinni

الطريقة الوحيدة لتعطيل أحد الخيارات لحقل نموذج "تحديد" هي تجاوز theme_select () تنفيذ الوظيفة hook_theme_registry_alter () .

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
kiamlaluno

لا أعرف ولم أتمكن من العثور على أي طريقة تعطيل خيار فردي. يبدو أنهم يحاولون إدخال شيء من هذا القبيل إلى دروبال. ربما بعض البدائل ، هل يمكنك فعل ما تريد باستخدام CSS ؟:

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

أو ، إذا كنت لا تريد إظهار القيم على الإطلاق ، يمكنك إلغاء تعيينها

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

حصلت على العمل مع الخط التالي

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

حيث 1 هو فهرس العنصر الذي لا تريد عرضه.

3
ArchbishopLolly

تحويل العنصر الواحد الذي تريد تعطيله إلى <optgroup> فارغ.

الإيجابيات =

  • يمكن القيام بذلك في hook_form_alter أو مباشرة عند إنشاء النموذج المخصص الخاص بك ، ليست هناك حاجة لتنفيذ وظيفة theme_select في السمة الخاصة بك.

سلبيات:

  • لا توجد طريقة لتمثيل السمة value='title' المرتبطة بـ <option> الأصلية في DOM الناتج.
  • YMMV إذا كنت تحاول تعطيل خيار يتعلق بالفعل بمجموعة optg. قد تعمل مجموعات optgested المتداخلة بالفعل ، ولكن هذا غير مجرب وغير مؤكد.

التنفيذ:

يتم الإشارة إلى Optgroups في Drupal داخل الصفيف #options مثل أي أزواج key => value حيث تكون القيمة في حد ذاتها صفيفًا.

لذا من المثال الموجود في OP ، سنقوم بنقل قيمة 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
JamesWilson

لتعطيل الحقل بأكمله ، استخدم

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

لتعطيل خيار في الحقل المحدد ، استخدم

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

أين:

['field_name'] هو اسم المجال الخاص بك

[1] هو فهرس الخيار في القائمة

0
Rony Samuel