Tengo una forma muy temática para integrar, cuya estructura se muestra a continuación. Estoy casi allí en su mayor parte, excepto por el envío.
<form action="#">
<fieldset>
<legend>Authentification</legend>
<label for="email">Courriel*</label>
<input type="text" name="email" id="email">
<label for="password">Mot de passe*</label>
<input type="password" name="password" id="password" class="last">
<a href="#" title="Mot de passe oublié?" class="clearfix">Forgot password?</a>
<button type="submit" class="clearfix"><span>Login</span></button>
</fieldset>
</form>
He intentado muchas combinaciones diferentes, resulta que button_type no tiene efecto en el núcleo. Así que usé este truco , esperando que solucionara mi problema. Por desgracia, solo cambia el atributo 'type' (obviamente), y no el elemento en sí. El tipo de botón puede contener otros elementos, en este caso, el espacio es necesario para mantener una imagen de fondo, debe estar en un espacio para estirarse ya que el texto en el botón es dinámico.
¿Alguien tiene idea de cómo puedo generar la siguiente línea de marcado utilizando el formulario API?
<button type="submit" class="clearfix"><span>Login</span></button>
<botton type="submit">
, consulte drupal.org/node/1671190Respuestas:
En D7 recomendaría:
De esa manera, puede reemplazar el #markup en una función alter más tarde si es necesario, sin tener que reconstruir el botón HTML.
fuente
Además, en caso de que alguien tenga el mismo problema que yo: al usar el truco
#markup
o#prefix
/#suffix
en elactions
grupo de un formulario , la función de devolución de llamada de envío no se llamará en absoluto , a menos que haya unsubmit
elemento de tipo presente. Mi solución fue así:De esa manera, puede usar HTML personalizado para enviar grupos de acciones.
fuente
Para agregar alguna etiqueta personalizada, puede usar los siguientes fragmentos:
fuente
Solo para completar, publicaré una solución alternativa que implica anular
theme_button
(tomada de esta publicación de blog )Primero agregue un
buttontype
atributo al elemento de formulario:Y luego anular el botón de tema:
Sin embargo, esto crea problemas si hay más de un botón en el formulario, ya que Drupal no puede detectar en qué botón se ha hecho clic.
Esto se puede solucionar agregando una
#after_build
devolución de llamada al formulario:Y luego en la función after build:
fuente
Intenté la respuesta de Óscar Gómez Alcañiz pero mi formulario aún no se había enviado. Como solución alternativa, alteré su solución para que la entrada se ubicara sobre la parte superior del botón pero fuera transparente:
De esta forma,
input[type="submit]
se hace clic en lo real y se activa la acción, pero el botónProbablemente sea una buena idea poner todo ese CSS en una hoja de estilo en la vida real, pero solo coloque la etiqueta de estilo en línea aquí como ejemplo.
fuente
Así es como lo logro en Drupal 8. Básicamente, creo una nueva sugerencia de tema para poder anular el botón con un archivo de ramita personalizado.
Agregue este código dentro de su archivo mythemename.theme:
En su código donde sea que cree su formulario, agregue un atributo 'sugerencia de ramita de datos' a su botón de envío:
Ahora, si tiene habilitada la depuración de ramitas y verifica la fuente html de su botón en el sitio, verá una nueva sugerencia de ramitas:
Ahora puede crear un archivo input - submit - button.html.twig (lo coloco en mythemename / templates / form_elements pero puede colocarlo en otro lugar si lo desea):
fuente
La forma más correcta es:
Produce HTML válido como este:
... y este método no frena el autocompletado y otras características.
fuente
<button>
etiqueta, al menos en D7. La última línea detheme_button()
in include / form.inc esreturn '<input' . drupal_attributes($element['#attributes']) . ' />';