xandeadx.ru Блог музицирующего веб-девелопера

Drupal → Добавляем возможность указывать атрибуты для элементов option

Опубликовано в

12 лет, как в друпал не могут добавить возможность указывать атрибуты для элементов <option> в select-ах. Делаем сами:

1. Копируем core/modules/system/templates/select.html.twig в папку своей темы.

2. Изменяем строчку

<option value="{{ option.value }}"{{ option.selected ? ' selected="selected"' }}>{{ option.label }}</option>

на

{% set option_attributes = element['#options_attributes'][option.value] ? element['#options_attributes'][option.value] : [] %}
<option value="{{ option.value }}"{{ option.selected ? ' selected="selected"' }}{{ create_attribute(option_attributes) }}>{{ option.label }}</option>

3. Сбрасываем кэш.

После этого можно пользоваться новым свойством #options_attributes:

$form['select'] = [
  '#type' => 'select',
  '#options' => [
    0 => 'Foo',
    1 => 'Bar',
    2 => 'Baz',
  ],
  '#options_attributes' => [
    0 => ['data-custom-attribute' => 'example-value'],
    1 => ['class' => ['example-class']],
    2 => ['disabled' => TRUE],
  ],
];

Результат:

Написанное актуально для Drupal 8
Похожие записи

Комментарии RSS

Есть еще модуль, который если я правильно понял делает тоже самое
https://www.drupal.org/project/form_options_attributes

Оставить комментарий

Содержимое этого поля является приватным и не будет отображаться публично. Если у вас есть аккаунт в Gravatar, привязанный к этому e-mail адресу, то он будет использован для отображения аватара.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступные HTML теги: <a> <i> <b> <strong> <code> <ul> <ol> <li> <blockquote> <em> <s>
  • Строки и параграфы переносятся автоматически.
  • Подсветка кода осуществляется с помощью тегов: <code>, <css>, <html>, <ini>, <javascript>, <sql>, <php>. Поддерживаемые стили выделения кода: <foo>, [foo].

Подробнее о форматировании