Есть ли способ преобразовать обычную форму и добавить заполнители с помощью модуля, или это должно быть сделано с помощью шаблона формы или с помощью jQuery?
22
Это заполнитель HTML5, вы можете просто добавить его в качестве атрибута к любому элементу, и браузеры с поддержкой HTML5 будут реагировать соответствующим образом:
function MYMODULE_form_alter(&$form, &$form_state, $form_id) {
if ($form_id == 'some_form') {
$form['some_element']['#attributes']['placeholder'] = t('Placeholder text');
}
}
Короткая рекурсивная функция, подобная этой, может быть полезна, если вы хотите автоматически добавлять заполнители для каждого текстового поля в форме (на основе заголовка поля в этом примере):
function MYMODULE_auto_placeholders(&$element) {
if ( isset($element['#type']) && $element['#type'] == 'textfield') {
// set placeholder
$element['#attributes']['placeholder'] = $element['#title'];
// hide label
$element['#title_display'] = 'invisible';
}
foreach (element_children($element) as $key) {
MYMODULE_auto_placeholders($element[$key]);
}
}
Тогда в вашей форме изменить функцию просто вызов
MYMODULE_auto_placeholders($form);
Этот метод будет работать практически для каждого текстового поля в форме, за исключением тех, которые добавляются в #process
функции (например, текстовые поля alt и title поля изображения).
Я попробовал ответ Клайва:
Но, к моему удивлению, я получил заполнитель в текстовом поле, а не в самом текстовом поле. Тогда я попробовал вариант следующим образом, это сработало!
источник
Просто добавьте заполнитель в массив #attributes для элемента поля формы, например, в следующем коде.
источник
Наткнулся на это и подумал, что ответ Клайва, похоже, хорош для автоматического добавления заполнителей.
Итак, для исправления ситуации в drupal 8 необходимо внести несколько небольших изменений, так что здесь почти такой же ответ, но подходящий для вашей темы в drupal 8.
источник
Если вы хотите нацелить экземпляр формы напрямую, используйте hook_form_FORM_ID_alter. Может быть аккуратнее, чем использование условных выражений. Мое решение для ориентации только на экземпляр блока формы поиска.
источник