Я предлагаю описать вашу проблему более подробно и сказать, что вы уже пробовали. Это покажет некоторую инициативу и поможет другим дать вам лучший ответ.
Арам Бояджян
Ответы:
16
Откройте файл YOURTHEMENAME.theme и добавьте следующий код:
Вы можете просто тему каждой формы, как вы хотите. Мне не нравится метод @rpayanm, потому что он труден для понимания и трудно читаем, с большими формами это не так, просто одиночная оболочка и простая структура.
Каждая форма, пытающаяся использовать тему, соответствует имени машины. Вы можете найти это имя шаблона $form['#theme']просто по alter, оно всегда (или в большинстве случаев) совпадает с именем машины с идентификатором формы. Что вам нужно сделать, это зарегистрировать шаблон для него. Вам нужно реализовать hook_theme(). Вы можете написать это в CUSTOMMODULE.module или в THEMENAME.theme. Ключ темы должен быть таким же, как и в $form['#theme'], поэтому он автоматически использует его, в противном случае вам нужно добавить новый через форму alter.
Затем вы должны создать custom-form-template-name.html.twig(с вашим именем шаблона из hook_theme ()).
Минимальный шаблон
{{ form }}
Вы также можете распечатать каждое поле из формы, где вы хотите
{{ form.field_name }}
Здесь вы можете делать все, что вы хотите с разметкой.
Вы также можете передать дополнительные данные в шаблон, реализовав template_preprocess_TEMPALTENAME
function template_preprocess_FORM_ID_THEME(&$variables){
$variables['example']='This is added via preprocess';}
А потом использовать в шаблоне
{{ example }}<div class="first-field">{{ form.first_field }}</div><div class="second-field">{{ form.second_field }}</div><div class="buttons">{{ form.submit }}{{ form.preview }}</div>{#Don't forget to add printing form special info at the end.
Without this data form will not working propertly.
#}
{{ form.form_build_id }}
{{ form.form_token }}
{{ form.form_id }}
Я думаю, что этот метод более гибкий, чистый и мощный.
Ps извините за мой английский, надеюсь, что кто-то отредактирует и исправит мои ошибки :)
Пример сложной формы с использованием этого метода.
Обратите внимание, что для меня, я должен был изменить {{ form.submit }}на{{ form.actions.submit }}
mikeDOTexe
@Niklan: я следовал вышеупомянутому коду для моей пользовательской формы связки сущностей. Если я использую {{ form }}, это печать всей формы. Но если я использую определенное поле, как {{ form.my_field }}, ничего не отображается. Любая идея, как мы можем отобразить каждое поле пользовательской формы пакета сущностей?
Калидасан
@kalidasan попробуйте напечатать каждое поле без печати {{ form }}. Я предлагаю после печати {{ form }}все элементы формы будут помечены как '#rendered' => TRUEи не будут отображаться в ближайшее время. Если вы не хотите использовать этот метод формы тем, вы должны печатать каждое поле отдельно. В drupal_render_children()Drupal 8 его нет, если вы не пишете это самостоятельно. В любом случае по умолчанию это приведет к дублированию, поэтому попробуйте распечатать каждое поле вручную.
Никлан
@Niklan: я не использовал {{ form }} & {{ form.my_field }}вместе. Сначала попробовал только с {{ form }}, здесь я могу видеть всю форму. Затем удалили {{ form }}из шаблона, затем попытались для каждого поля формы отдельно, как это {{ form.my_field }}, etc , но dint получить любой положить. Ничего не отображается
Калидасан
1
@kalidasan вы можете удалить заголовки в template_preprocess_FORM_ID_THEME(&$variables). В этом препроцессоре вы можете добавлять новые переменные, изменять существующие, включая элементы формы. Я никогда не видел это, {{ form.field_name.widget }}и я часто пишу формы. Похоже, это поле специально создано или добавлено сторонним модулем? Я думаю, что это разрешено, но не правило для других. Я рекомендую вам начать с препроцессора и просто посмотреть, $variables['form']что в нем содержится.
Ответы:
Откройте файл YOURTHEMENAME.theme и добавьте следующий код:
И вот ваш результат:
Не забудьте очистить ваши кеши;)
источник
Вы можете просто тему каждой формы, как вы хотите. Мне не нравится метод @rpayanm, потому что он труден для понимания и трудно читаем, с большими формами это не так, просто одиночная оболочка и простая структура.
Каждая форма, пытающаяся использовать тему, соответствует имени машины. Вы можете найти это имя шаблона
$form['#theme']
просто по alter, оно всегда (или в большинстве случаев) совпадает с именем машины с идентификатором формы. Что вам нужно сделать, это зарегистрировать шаблон для него. Вам нужно реализоватьhook_theme()
. Вы можете написать это в CUSTOMMODULE.module или в THEMENAME.theme. Ключ темы должен быть таким же, как и в$form['#theme']
, поэтому он автоматически использует его, в противном случае вам нужно добавить новый через форму alter.Drupal pass $ form переменная с формой.
Затем вы должны создать
custom-form-template-name.html.twig
(с вашим именем шаблона из hook_theme ()).Минимальный шаблон
Вы также можете распечатать каждое поле из формы, где вы хотите
Здесь вы можете делать все, что вы хотите с разметкой.
Вы также можете передать дополнительные данные в шаблон, реализовав
template_preprocess_TEMPALTENAME
А потом использовать в шаблоне
Я думаю, что этот метод более гибкий, чистый и мощный.
Ps извините за мой английский, надеюсь, что кто-то отредактирует и исправит мои ошибки :)
Пример сложной формы с использованием этого метода.
источник
{{ form.submit }}
на{{ form.actions.submit }}
{{ form }}
, это печать всей формы. Но если я использую определенное поле, как{{ form.my_field }}
, ничего не отображается. Любая идея, как мы можем отобразить каждое поле пользовательской формы пакета сущностей?{{ form }}
. Я предлагаю после печати{{ form }}
все элементы формы будут помечены как'#rendered' => TRUE
и не будут отображаться в ближайшее время. Если вы не хотите использовать этот метод формы тем, вы должны печатать каждое поле отдельно. Вdrupal_render_children()
Drupal 8 его нет, если вы не пишете это самостоятельно. В любом случае по умолчанию это приведет к дублированию, поэтому попробуйте распечатать каждое поле вручную.{{ form }} & {{ form.my_field }}
вместе. Сначала попробовал только с{{ form }}
, здесь я могу видеть всю форму. Затем удалили{{ form }}
из шаблона, затем попытались для каждого поля формы отдельно, как это{{ form.my_field }}, etc
, но dint получить любой положить. Ничего не отображаетсяtemplate_preprocess_FORM_ID_THEME(&$variables)
. В этом препроцессоре вы можете добавлять новые переменные, изменять существующие, включая элементы формы. Я никогда не видел это,{{ form.field_name.widget }}
и я часто пишу формы. Похоже, это поле специально создано или добавлено сторонним модулем? Я думаю, что это разрешено, но не правило для других. Я рекомендую вам начать с препроцессора и просто посмотреть,$variables['form']
что в нем содержится.