Eu tenho uma forma fortemente temática para integrar, cuja estrutura é mostrada abaixo. Estou quase lá, na maioria, exceto pelo envio.
<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>
Eu tentei muitas combinações diferentes, verifica-se que button_type não tem efeito no núcleo. Então, eu usei esse hack , esperando que isso resolvesse o meu problema. Infelizmente, apenas altera o atributo 'type' (obviamente), e não o próprio elemento. O tipo de botão pode conter outros elementos; nesse caso, a extensão é necessária para conter uma imagem de plano de fundo; ela deve ser expandida, pois o texto no botão é dinâmico.
Alguém tem uma idéia de como posso gerar a seguinte linha de marcação usando a API do formulário?
<button type="submit" class="clearfix"><span>Login</span></button>
<botton type="submit">
, consulte drupal.org/node/1671190Respostas:
Em D7 recomendaria:
Dessa forma, você pode substituir o #markup em uma função de alteração posteriormente, se necessário, sem precisar reconstruir o botão HTML.
fonte
Além disso, caso alguém tenha o mesmo problema que eu - ao usar o truque
#markup
ou#prefix
/#suffix
noactions
grupo de um formulário , a função de retorno de chamada de envio não será chamada , a menos que umsubmit
elemento de tipo esteja presente. Minha solução alternativa foi assim:Dessa forma, você pode usar o HTML personalizado para enviar grupos de ações.
fonte
Para adicionar uma tag personalizada, você pode usar os seguintes trechos:
fonte
Para completar, postarei uma solução alternativa que envolve a substituição
theme_button
(retirada desta postagem do blog )Primeiro adicione um
buttontype
atributo ao elemento do formulário:E, em seguida, substitua o botão do tema:
Isso cria problemas, no entanto, se houver mais de um botão no formulário, pois o Drupal não consegue detectar em qual botão foi clicado.
Isso pode ser solucionado adicionando um
#after_build
retorno de chamada ao formulário:E então na função after build:
fonte
Tentei a resposta de Óscar Gómez Alcañiz, mas meu formulário ainda não estava sendo enviado. Como solução alternativa, alterei sua solução para que a entrada ficasse por cima do botão, mas fosse transparente:
Dessa forma, o real
input[type="submit]
está sendo clicado e acionando a ação, mas o botãoProvavelmente, é uma boa idéia colocar todo esse CSS em uma folha de estilo na vida real, mas apenas colocar a tag de estilo embutido aqui como exemplo.
fonte
Aqui está como consegui isso no Drupal 8. Basicamente, crio uma nova sugestão de tema para que eu possa substituir o botão por um arquivo de galho personalizado.
Adicione este código ao seu arquivo mythemename.theme:
No seu código, sempre que você criar seu formulário, adicione um atributo 'data-twig-sugestão' ao botão de envio:
Agora, se você tiver ativado a depuração de galho e verificar a fonte html do seu botão no site, verá uma nova sugestão de galho:
Agora você pode criar um arquivo input - submit - button.html.twig (eu o coloco em mythemename / templates / form_elements, mas você pode colocá-lo em outro lugar, se quiser):
fonte
A maneira mais correta é:
Produz HTML válido como este:
... e esse método não freia o preenchimento automático e outros recursos.
fonte
<button>
tag, pelo menos em D7. A última linhatheme_button()
no inclui / form.inc éreturn '<input' . drupal_attributes($element['#attributes']) . ' />';