Drupal 8+
Пример темизации формы с идентификатором example_form
:
1. Реализуем хук hook_theme()
, в котором в качестве имени шаблона указываем идентификатор формы:
/**
* Implements hook_theme().
*/
function THEMENAME_theme(): array {
return [
'example_form' => [
'render element' => 'form',
],
];
}
2. Создаём файл example-form.html.twig
, в котором выводим всё что нужно:
<header>
{{ form.element1 }}
{{ form.element2 }}
</header>
{{ form|without('element1', 'element2') }}
3. Сбрасываем кэш.
Как это работает? Если у формы не задано свойство #theme
, а оно по умолчанию не задано, то в \Drupal\Core\Form\FormBuilder::prepareForm()
вызывается:
$form['#theme'] = [$form_id];
if (isset($build_info['base_form_id'])) {
$form['#theme'][] = $build_info['base_form_id'];
}
Остаётся только объявить соответствующий шаблон и создать twig файл.
Drupal 7
Пример темизации формы commerce_checkout_form_checkout
:
1. Реализуем хук hook_theme()
:
function THEMENAME_theme() {
return array(
'commerce_checkout_form_checkout' => array(
'render element' => 'form',
'template' => 'commerce-checkout-form-checkout',
),
);
}
2. В корне модуля/темы создаём файл commerce-checkout-form-checkout.tpl.php
:
<div class="row">
<div class="col">
<?php echo render($form['field_name1']); ?>
<?php echo render($form['field_name2']); ?>
</div>
<div class="col">
<?php echo render($form['field_name3']); ?>
</div>
</div>
<?php echo drupal_render_children($form); ?>
3. Очищаем кэш.
Написанное актуально для
Drupal 7/8/9
Похожие записи
- Темизация группы чекбоксов или радио-кнопок (#type=>checkboxes, #type=>radios)
- Изменить тип всех кнопок с <input type="submit"> на <button type="submit">
- Вывести дефолтное значение элемента формы с помощью #lazy_builder
- Inline Form Errors только у конкретных форм
- Восстанавливаем позицию текстового курсора при ajax обновлении формы
Комментарии
Может, мой вопрос покажется глупым, но где при этом должен находится файл commerce-checkout-form-checkout.tpl.php?
там же где файл с реализацией hook_theme
Не знаю что за ребус, но кнопку Юберкарта "Добавить в корзину" я так и не смог переоределить ни этим способом, ни
так
ни даже скопировав из юберкарта код функции в собственный модуль.
Единственное что дает эффект - это править код в самом модуле.
Добавить комментарий