По умолчанию разметка HTML для переключателей выглядит следующим образом (Drupal 7):
<div class="form-item form-type-radio form-item-SOME_ID">
<input id="edit-SOME_ID" class="form-radio" type="radio" value="SOME_VALUE" name="SOME_NAME" />
<label class="option" for="edit-bla-bla">MY LABEL</label>
</div>
Мне нужно изменить / добавить некоторые классы CSS во внешнем <div>
ИЛИ добавить обертку <div>
. Как я могу это сделать?
Ответы:
Если вы определяете форму самостоятельно , вы можете заключить элемент с HTML с использованием
#prefix
и#suffix
свойства:Если вы хотите добавить класс к существующей оболочке, вы можете сделать это, используя
#attributes
свойство:Если вы не определяете форму самостоятельно, вы все равно можете использовать ту же логику и реализовать a
hook_form_alter()
для изменения существующей формы:Обратите внимание, что при использовании
hook_form_alter()
метода вы должны добавить к существующему массиву классов, чтобы не переопределять любые классы, которые были установлены ранее.источник
Вы можете сделать выше (префикс / суффикс) для элементов в массиве параметров, тогда вы получите все, что вы хотите вокруг каждого элемента.
источник
Я смог добиться этого после большой работы и пробовал каждый опубликованный метод, используя умный совет, который я нашел глубоко в Интернете на другом сайте: http://e9p.net/altering-individual-radio-or-checkbox-items-drupal- 7-фапи , чтобы
#after_build
можно было изменять отдельные элементы формы, если они являются массивом друпал рендеринга.Я хотел, чтобы каждое радио было упаковано в контейнер с классом, поэтому я использовал
#prefix
и#suffix
для этого:пример использования:
Однако если вы хотите, чтобы
input
элемент имел только класс, вам нужно реализовать решение, которое я разместил на drupal.org по адресу https://api.drupal.org/comment/60197#comment-60197, чтобы разрешить использование #options_attributes. правильно для индивидуальных вариантов. Повторно опубликовать код здесь:пример использования:
источник
Единственный способ добиться этого - создать разные элементы формы для каждого радио, вручную связать имена с помощью #name и вручную установить значение с помощью #attributes. (#value по какой-то причине не работает.)
Например:
Это добавит оболочку и класс к отдельным переключателям, а не к группе переключателей, как это делает принятый в настоящее время ответ.
источник