Drupal 8+
Пример темизации формы с идентификатором example_form
:
1. Реализуем хук hook_theme()
, в котором в качестве имени шаблона указываем идентификатор формы:
// THEMENAME.theme
/**
* Implements hook_theme().
*/
function THEMENAME_theme(): array {
return [
'example_form' => [
'render element' => 'form',
],
];
}
2. Создаём файл templates/example-form.html.twig
, в котором выводим элементы в нужной разметке:
<div class="container">
<div class="row">
<div class="col-sm">{{ form.element1 }}</div>
<div class="col-sm">{{ form.element2 }}</div>
</div>
</div>
{{ 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+
Похожие записи
- Темизация группы чекбоксов или радио-кнопок (#type=>checkboxes, #type=>radios)
- Изменить тип всех кнопок с input type="submit" на button type="submit"
- Создание сравнительной таблицы с значениями из EAV Field
- Препроцессинг настроек форматтера перед сохранением
- Тест оверхеда Layout Builder и Paragraphs
Комментарии
Может, мой вопрос покажется глупым, но где при этом должен находится файл commerce-checkout-form-checkout.tpl.php?
там же где файл с реализацией hook_theme
Не знаю что за ребус, но кнопку Юберкарта "Добавить в корзину" я так и не смог переоределить ни этим способом, ни
так
ни даже скопировав из юберкарта код функции в собственный модуль.
Единственное что дает эффект - это править код в самом модуле.
Добавить комментарий