У меня есть тематическая форма для интеграции, структура которой показана ниже. Я почти там, по большей части, за исключением отправки.
<form action="#">
<fieldset>
<legend>Authentification</legend>
<label for="email">Courriel*</label>
<input type="text" name="email" id="email">
<label for="password">Mot de passe*</label>
<input type="password" name="password" id="password" class="last">
<a href="#" title="Mot de passe oublié?" class="clearfix">Forgot password?</a>
<button type="submit" class="clearfix"><span>Login</span></button>
</fieldset>
</form>
Я пробовал много разных комбинаций, оказалось, что button_type не влияет на ядро. Поэтому я использовал этот хак , надеясь, что это решит мою проблему. Увы, он изменяет только атрибут type (очевидно), но не сам элемент. Тип кнопки может содержать другие элементы, в этом случае интервал необходим для хранения фонового изображения, он должен находиться в интервале для растягивания, поскольку текст в кнопке является динамическим.
Кто-нибудь знает, как я могу генерировать следующую строку разметки, используя API формы?
<button type="submit" class="clearfix"><span>Login</span></button>
<botton type="submit">
, см. Drupal.org/node/1671190Ответы:
В D7 рекомендую:
Таким образом, вы можете заменить #markup в функции alter позже, если потребуется, без необходимости перестраивать кнопку HTML.
источник
Кроме того, на случай, если кто-то столкнется с той же проблемой, что и я, - при использовании трюка
#markup
or#prefix
/ /#suffix
дляactions
группы формы , функция обратного вызова submit не будет вызываться вообще , если не присутствуетsubmit
элемент type. Мой обходной путь был таким:Таким образом, вы можете использовать пользовательский HTML для отправки групп действий.
источник
Чтобы добавить собственный тег, вы можете использовать следующие фрагменты:
источник
Просто для полноты я опубликую альтернативное решение, которое включает переопределение
theme_button
(взято из этого сообщения в блоге )Сначала добавьте
buttontype
атрибут к элементу формы:А затем переопределить кнопку темы:
Однако это создает проблемы, если в форме больше одной кнопки, так как Drupal не может определить, какая кнопка была нажата.
Это можно решить, добавив
#after_build
обратный вызов в форму:А затем в функции после сборки:
источник
Я попытался ответить Оскару Гомесу Альканьису, но моя форма все еще не была отправлена. В качестве обходного пути я изменил его решение, чтобы ввод располагался поверх кнопки, но был прозрачным:
Таким образом, фактическое
input[type="submit]
нажатие и запуск действия, но кнопкаВероятно, это хорошая идея, чтобы поместить все эти CSS в таблицу стилей в реальной жизни, но просто добавьте встроенный тег стиля в качестве примера.
источник
Вот как я добиваюсь этого в Drupal 8. По сути, я создаю предложение новой темы, чтобы я мог переопределить кнопку с помощью пользовательского файла ветки.
Добавьте этот код в ваш файл mythemename.theme:
В своем коде, где бы вы ни создавали форму, добавьте атрибут «data-twig-Suggestion» к кнопке отправки:
Теперь, если у вас включена отладка веток и вы проверили html источник вашей кнопки на сайте, вы увидите новое предложение веток:
Теперь вы можете создать файл input - submit - button.html.twig (я помещаю его в mythemename / templates / form_elements, но вы можете разместить его в другом месте, если хотите):
источник
Более правильный путь:
Он производит правильный HTML, как это:
... и этот метод не тормозит автозаполнение и другие функции.
источник
<button>
тег, по крайней мере, в D7. Последняя строкаtheme_button()
в include / form.increturn '<input' . drupal_attributes($element['#attributes']) . ' />';