Mam silnie tematyczną formę do zintegrowania, której strukturę pokazano poniżej. Jestem prawie tam, z wyjątkiem przesłania.
<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>
Próbowałem wielu różnych kombinacji, okazuje się, że button_type nie ma wpływu na rdzeń. Więc użyłem tego hacka , mając nadzieję, że rozwiąże to mój problem. Niestety, zmienia tylko atrybut „typ” (oczywiście), a nie sam element. Typ przycisku może zawierać inne elementy, w tym przypadku rozpiętość jest potrzebna do przechowywania obrazu tła, musi być w rozpiętości, aby rozciągać się, ponieważ tekst na przycisku jest dynamiczny.
Czy ktoś ma jakiś pomysł, jak wygenerować następujący wiersz znaczników za pomocą interfejsu API formularza?
<button type="submit" class="clearfix"><span>Login</span></button>
<botton type="submit">
, patrz drupal.org/node/1671190Odpowiedzi:
W D7 poleciłby:
W ten sposób możesz później zastąpić #markup funkcją alter, jeśli to konieczne, bez konieczności przebudowywania przycisku HTML.
źródło
Jako dodatek, na wypadek, gdyby ktoś napotkał takie same problemy, jak ja - kiedy używam
#markup
lub#prefix
/#suffix
trick na grupie formularzaactions
, funkcja wywołania zwrotnego przesyłania nie będzie w ogóle wywoływana , chyba żesubmit
element typu jest obecny. Moje obejście było takie:W ten sposób możesz używać niestandardowego kodu HTML do przesyłania grup akcji.
źródło
Aby dodać niestandardowy tag, możesz użyć następujących fragmentów:
źródło
Dla kompletności opublikuję alternatywne rozwiązanie, które wymaga zastąpienia
theme_button
(wzięte z tego postu na blogu )Najpierw dodaj
buttontype
atrybut do elementu formularza:A następnie zastąp przycisk motywu:
Powoduje to problemy, jeśli w formularzu jest więcej niż jeden przycisk, ponieważ Drupal nie jest w stanie wykryć, który przycisk został kliknięty.
Można temu zaradzić, dodając
#after_build
wywołanie zwrotne do formularza:A potem w funkcji po kompilacji:
źródło
Próbowałem odpowiedzi Óscara Gómeza Alcañiza, ale mój formularz wciąż nie był przesyłany. Aby obejść ten problem, zmieniłem jego rozwiązanie, aby dane wejściowe znajdowały się nad przyciskiem, ale były przezroczyste:
W ten sposób rzeczywisty
input[type="submit]
zostaje kliknięty i wyzwala akcję, ale przyciskPrawdopodobnie dobrym pomysłem jest umieszczenie całego CSS w arkuszu stylów w prawdziwym życiu, ale po prostu wstaw tutaj tag stylowy jako przykład.
źródło
Oto jak to osiągnąć w Drupal 8. Zasadniczo tworzę nową sugestię motywu, dzięki czemu mogę zastąpić przycisk niestandardowym plikiem gałązki.
Dodaj ten kod do pliku mythemename.theme:
W kodzie, gdziekolwiek utworzysz formularz, dodaj atrybut „data-twig-sugestion” do przycisku przesyłania:
Teraz, jeśli masz włączoną funkcję debugowania gałązek i sprawdzisz źródło HTML przycisku na stronie, zobaczysz nową propozycję gałązki:
Teraz możesz utworzyć plik wejściowy - prześlij - button.html.twig (umieszczam go w mythemename / templates / form_elements, ale możesz go umieścić gdzie indziej):
źródło
Bardziej poprawnym sposobem jest:
Tworzy poprawny kod HTML w następujący sposób:
... a ta metoda nie hamuje autouzupełniania i innych funkcji.
źródło
<button>
tagu, przynajmniej w D7. Ostatni wiersztheme_button()
w includes / form.inc jestreturn '<input' . drupal_attributes($element['#attributes']) . ' />';