Me gustaría crear un tema para un formulario de contacto en Drupal 8. Me gustaría poner divs alrededor de los elementos del formulario (usando bootstrap).
También quiero poner algunas clases en ciertos elementos (botón de enviar, el formulario en sí).
Respuestas:
Abra su archivo YOURTHEMENAME.theme y agregue el siguiente código:
Y aquí está tu resultado:
No olvides limpiar tus cachés;)
fuente
Simplemente puede tema cada forma como desee. No me gusta el método de @rpayanm, porque es difícil de mantener y fácil de leer, con formas grandes, este no es el caso, solo un contenedor y una estructura simple.
Cada formulario que intenta usar el tema es igual al nombre de su máquina. Puede encontrar este nombre de plantilla
$form['#theme']
simplemente alterando, siempre es (o en la mayoría de las veces) igual que el nombre de la máquina de identificación de formulario. Lo que debe hacer es registrar la plantilla para ello. Necesitas implementarhook_theme()
. Puede escribirlo en CUSTOMMODULE.module o en THEMENAME.theme. La clave del tema debe ser la misma que en$form['#theme']
, por lo que se usa automáticamente, de lo contrario, debe agregar una nueva a través del formulario alter.Drupal pasa $ formulario variable con formulario.
Luego debe crear
custom-form-template-name.html.twig
(con su nombre de plantilla de hook_theme ()).La plantilla mínima es
También puede imprimir cada campo desde el formulario donde desee
Aquí puedes hacer lo que quieras con marcado.
También puede pasar datos adicionales a la plantilla implementando
template_preprocess_TEMPALTENAME
Y luego usar en plantilla
Creo que este método es más flexible, limpio y potente.
Lo siento por mi inglés, espero que alguien edite y corrija mis errores :)
Ejemplo de forma compleja usando este método.
fuente
{{ form.submit }}
a{{ form.actions.submit }}
{{ form }}
, está imprimiendo todo el formulario, pero si uso un campo específico como{{ form.my_field }}
, no se muestra nada. ¿Alguna idea de cómo podemos mostrar cada campo del formulario de paquete de entidad personalizado?{{ form }}
. Sugiero que después de imprimir{{ form }}
todos los elementos del formulario se marcarán como'#rendered' => TRUE
y no se procesarán pronto. Si desea utilizar este método de forma temática, debe imprimir cada campo individualmente. No existedrupal_render_children()
en Drupal 8, a menos que lo escriba usted mismo. De todos modos, esto provocará duplicados de forma predeterminada, así que intente imprimir cada campo manualmente.{{ form }} & {{ form.my_field }}
juntos. Primero lo intenté solo con{{ form }}
, aquí puedo ver el formulario completo. Luego se eliminó{{ form }}
de la plantilla y luego se intentó para cada campo de formulario por separado de esta manera{{ form.my_field }}, etc
, pero no se saca nada. No se muestra nada.template_preprocess_FORM_ID_THEME(&$variables)
. En este preproceso puede agregar nuevas variables, cambiar las existentes, incluidos los elementos de formulario. Nunca he visto esto{{ form.field_name.widget }}
y yo temo formas a menudo. ¿Parece que este campo es personalizado creado o agregado por un módulo de terceros? Creo que esto está permitido, pero no es una regla para otros. Le recomiendo que comience con un gancho de preproceso y solo mire$variables['form']
lo que contiene dentro.