it-swarm-tr.com

Form seçimi alanı için bir seçeneği devre dışı bırakma

Form seç alanındaki bir seçeneği nasıl devre dışı bırakabilirim?

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

Örneğin, "Yalnızca başlık" seçeneğini nasıl devre dışı bırakabilirim?

9
Miguel Borges

Bir seçeneği devre dışı bırakmak zor olabilir ( bir seçim alanının BİR seçeneğini devre dışı bırakmak için form_alter kullanma ), bu yüzden alternatif olarak optgroups öğesine bakmanızı tavsiye ederim. Drupal form API belgeleri bunu açıklamıyor, ancak API seçenekler için iç içe diziye izin veriyor, form_select_options () ve <optgroup> Bölüm.
Bu kodu yazabilirsiniz:

$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 formları ve optgroup dizileri .

Düzenle : bunun açık bir cevap değil, alternatif olduğunu açıklığa kavuşturmak.

6
tostinni

"Select" form alanı için seçeneklerden birini devre dışı bırakmanın tek yolu theme_select () işlevini hook_theme_registry_alter () geçersiz kılmaktır.

theme_select() aşağıdaki kodu yürütür:

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>';
}

Uyguladığınız işlev form_select_options () yerine kendi işlevinizi çağırmalıdır.

Herhangi bir Drupal formunda kullanılan her seçim alanı için theme_select() çağrıldığından, seçeneği kaldırmak için hook_form_alter () kullanmayı tercih ederim. form alanı.

6
kiamlaluno

Bilmiyorum ve devre dışı bireysel bir seçenek için herhangi bir yol bulamadık. Drupal'a böyle bir şey sokmaya çalışıyorlar gibi görünüyor. Belki bazı alternatifler, css ile ne yapmak istersiniz ?:

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

Veya değerlerin hiç gösterilmesini istemiyorsanız ayarlarınızı kaldırabilirsiniz

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

Aşağıdaki satırla benimkini çalıştırdım

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

burada 1, görüntülenmesini istemediğiniz öğenin dizinidir.

3
ArchbishopLolly

Devre dışı bırakmak istediğiniz tek bir öğeyi boş bir <optgroup> Biçimine dönüştürün.

Artıları:

  • Bu bir hook_form_alter İçinde veya doğrudan özel formunuzu oluştururken yapılabilir, temanızda theme_select İşlevini uygulamaya gerek yoktur.

Eksileri:

  • Ortaya çıkan DOM'daki orijinal value='title' İle ilişkili <option> Özelliğini göstermenin bir yolu yoktur.
  • Zaten bir optik grupla ilgili bir seçeneği devre dışı bırakmaya çalışıyorsanız YMMV. Yuvalanmış optgroups gerçekten işe yarayabilir, ancak bu test edilmemiştir ve doğrulanmamıştır.

ygulama:

Drupal) içindeki optgroups, #options Dizisi içinde değerin kendisinin bir dizi olduğu herhangi bir key => value Çifti olarak gösterilir.

Bu yüzden OP'deki örnekten t('Titles only') değerini key olmak için hareket ettirip değeri boş bir dizi haline getiririz.

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

Ortaya çıkan HTML şöyle görünecektir:

<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

Tüm alanı devre dışı bırakmak için

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

Seçim alanındaki bir seçeneği devre dışı bırakmak için şunu kullanın:

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

nerede:

['field_name'] alanınızın adıdır

[1] listedeki seçeneğin dizinidir

0
Rony Samuel