Ich muss eine stark thematisierte Form integrieren, deren Struktur unten gezeigt wird. Ich bin zum größten Teil fast da, bis auf die Einreichung.
<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>
Ich habe viele verschiedene Kombinationen ausprobiert, es stellt sich heraus, dass button_type keinen Einfluss auf den Kern hat. Also habe ich diesen Hack benutzt , in der Hoffnung, dass er mein Problem beheben würde. Leider ändert es nur das Attribut 'type' (offensichtlich) und nicht das Element selbst. Der Schaltflächentyp kann andere Elemente enthalten. In diesem Fall wird die Spanne benötigt, um ein Hintergrundbild aufzunehmen. Sie muss sich in einer Spanne befinden, um gedehnt zu werden, da der Text in der Schaltfläche dynamisch ist.
Hat jemand eine Ahnung, wie ich die folgende Markup-Zeile mithilfe der Formular-API generieren kann?
<button type="submit" class="clearfix"><span>Login</span></button>
<botton type="submit">
, siehe drupal.org/node/1671190Antworten:
In D7 würde empfehlen:
Auf diese Weise können Sie das #markup später bei Bedarf in einer Änderungsfunktion ersetzen, ohne das HTML der Schaltfläche neu erstellen zu müssen.
quelle
Für den Fall, dass jemand auf die gleichen Probleme stößt wie ich - wenn Sie den
#markup
oder#prefix
/#suffix
Trick für dieactions
Gruppe eines Formulars verwenden , wird die Rückruffunktion zum Senden überhaupt nicht aufgerufen , es sei denn, asubmit
Typelement ist vorhanden. Meine Problemumgehung war wie folgt:Auf diese Weise können Sie benutzerdefiniertes HTML zum Senden von Aktionsgruppen verwenden.
quelle
Um ein benutzerdefiniertes Tag hinzuzufügen, können Sie die folgenden Snippets verwenden:
quelle
Der Vollständigkeit halber werde ich eine alternative Lösung veröffentlichen, die das Überschreiben beinhaltet
theme_button
(entnommen aus diesem Blog-Beitrag ).Fügen Sie
buttontype
dem Formularelement zunächst ein Attribut hinzu:Und dann die Themenschaltfläche überschreiben:
Dies führt jedoch zu Problemen, wenn mehr als eine Schaltfläche im Formular vorhanden ist, da Drupal nicht erkennen kann, auf welche Schaltfläche geklickt wurde.
Dies kann durch Hinzufügen eines
#after_build
Rückrufs zum Formular behoben werden:Und dann in der After-Build-Funktion:
quelle
Ich habe die Antwort von Óscar Gómez Alcañiz ausprobiert, aber mein Formular wurde immer noch nicht eingereicht. Um dieses Problem zu umgehen, habe ich seine Lösung so geändert, dass die Eingabe über der Schaltfläche angezeigt wurde, aber transparent war:
Auf diese Weise wird auf das tatsächliche
input[type="submit]
geklickt und die Aktion ausgelöst, jedoch die SchaltflächeWahrscheinlich eine gute Idee, all das CSS im wirklichen Leben in ein Stylesheet zu integrieren, aber hier nur das Inline-Style-Tag als Beispiel einzufügen.
quelle
So erreiche ich dies in Drupal 8. Grundsätzlich erstelle ich einen neuen Themenvorschlag, damit ich die Schaltfläche mit einer benutzerdefinierten Zweigdatei überschreiben kann.
Fügen Sie diesen Code in Ihre Datei mythemename.theme ein:
Fügen Sie in Ihrem Code, wo immer Sie Ihr Formular erstellen, ein Attribut "Datenzweig-Vorschlag" zu Ihrer Senden-Schaltfläche hinzu:
Wenn Sie nun das Debuggen von Zweigen aktiviert haben und die HTML-Quelle Ihrer Schaltfläche auf der Website überprüfen, wird ein neuer Zweigvorschlag angezeigt:
Jetzt können Sie eine Datei input - submit - button.html.twig erstellen (ich platziere diese in mythemename / templates / form_elements, aber Sie können sie an einer anderen Stelle platzieren, wenn Sie möchten):
quelle
Richtiger ist:
Es erzeugt gültiges HTML wie folgt:
... und diese Methode bremst nicht die automatische Vervollständigung und andere Funktionen.
quelle
<button>
Zumindest in D7 wird kein Tag zurückgegeben. Die letzte Zeile vontheme_button()
in include / form.inc istreturn '<input' . drupal_attributes($element['#attributes']) . ' />';