Мне нужно добавить имя класса для определенных меток, созданных API форм Drupal, например:
$form['name'] => array(
'#type' => 'textfield',
'#title' => 'Prénom'
);
Если я использую следующее, <textarea>
получает класс, но не метку.
$form['name']['#attributes']['class'] = array('myClass');
Я ищу что-то подобное, что добавит класс к <label>
.
.field-name-field-myfield label{ color:red; }
Ответы:
Вы не можете установить класс для тега label элемента формы, используя свойства Form API. Однако вы можете установить префикс и суффикс, чтобы обернуть элемент (label + textarea) и использовать некоторые вложенные CSS-селекторы для выполнения того, что вы пытаетесь сделать.
и в CSS вы можете выбрать метку тега следующим образом:
Не приличное решение, но так я обычно делаю, и я видел, как это делают другие.
#attributes
предназначен для самого элемента ввода, поэтому ваш код добавляетmyClass
класс в классtextarea
.источник
В этом посте о StackOverflow говорится, что API-интерфейс Drupal Form не поддерживает добавление классов к меткам, но содержит достойный обходной путь:
Документация API для theme_form_element_label () показывает, почему метки невозможны (по крайней мере, не из коробки): массив атрибутов инициализируется в функции темы и заполняется двумя необязательными классами (option и element) незримые ').
Итак, это совершенно невозможно? На самом деле, я думаю, что это можно сделать, но я должен добавить, что я сам не пробовал. Вы можете попробовать:
#label_attributes
свойство к некоторым (или всем) элементам формы, используя hook_element_info_alter () в пользовательском модуле;$attributes
массив со значением$element['#label_attributes']
.Если вы собираетесь попробовать, пожалуйста, дайте нам знать, если это сработало.
источник
'#title'
или установить,'#title_display' => 'invisible'
а затем просто сделать'#suffix' => '<label for="TheElementId" class="option">Display This Text</label>'
. Это заставляет его появляться за пределами оболочки,<div>
используемой Drupal для своих элементов ввода формы, но правило CSS может заставить его выглядеть не иначе.Расширяя ответ Айеша, я включил пример использования такого кода. В то время как ответ Марванендга гораздо больше, чем Drupalesk, очень много нужно искать очень простой результат. Хранение специфичных для формы элементов и CSS в сочетании с указанной формой - это общий случай использования, позволяющий нам нацеливать и воздействовать на внутренние элементы, чуть более специфично.
http://legomenon.io/article/drupal-7-adding-form-placeholder-attributes
источник
На Drupal 8 сделайте это, просто добавив файл your_module.module
и добавьте #label_attributes при создании формы:
источник
Я нашел относительно простой способ сделать это с помощью модуля Fences D7. Этот модуль поставляется с большим количеством файлов шаблонов для настройки полей. Отредактируйте поле, которому вы хотите присвоить уникальный класс, и измените разметку оболочки на что-то подходящее для вас. После этого найдите соответствующий файл шаблона в модуле и скопируйте его в ваши сайты / all / themes / THEME_NAME.
Перед
После
Добавляя
<?php print $label; ?>
, он печатает имя поля как класс, что позволяет вам настроить таргетинг на все метки полей по отдельности. Я надеюсь, что это помогает кому-то еще!источник
Это грязно, но вы можете добавить HTML к свойству '# title':
Я сам удивлен, что это работает. Я думаю, что Drupal отфильтрует это, но нет. Таким образом, вы можете обернуть ярлык другим классом:
источник