Ich muss bestimmten Beschriftungen, die mit der Formular-API von Drupal erstellt wurden, einen Klassennamen hinzufügen:
$form['name'] => array(
'#type' => 'textfield',
'#title' => 'Prénom'
);
Wenn ich Folgendes verwende, <textarea>
erhält der eine Klasse, aber nicht das Label.
$form['name']['#attributes']['class'] = array('myClass');
Ich suche nach etwas Ähnlichem, das dem eine Klasse hinzufügt <label>
.
.field-name-field-myfield label{ color:red; }
Antworten:
Sie können mithilfe der Eigenschaften der Formular-API keine Klasse für das Beschriftungs-Tag des Formularelements festlegen. Sie können jedoch ein Präfix und ein Suffix festlegen, um das Element (Beschriftung + Textbereich) zu umschließen, und einen verschachtelten CSS-Selektor verwenden, um das zu erreichen, was Sie versuchen.
und im CSS können Sie das Label-Tag wie folgt auswählen:
Keine anständige Lösung, aber so mache ich das normalerweise und habe andere gesehen.
#attributes
ist für das Eingabeelement selbst, also ist es richtig, dass Ihr Code diemyClass
Klasse zum hinzufügttextarea
.quelle
In diesem Beitrag zu StackOverflow heißt es, dass die Drupal Form-API das Hinzufügen von Klassen zu Labels nicht unterstützt, jedoch eine angemessene Problemumgehung enthält:
Die API-Dokumentation für theme_form_element_label () zeigt, warum Beschriftungen nicht möglich sind (zumindest nicht sofort einsatzbereit ): Das Attributarray wird in der Designfunktion initialisiert und mit nur zwei optionalen Klassen ('Option' und 'Element' gefüllt -unsichtbar').
Ist es also völlig unmöglich? Tatsächlich denke ich, dass dies möglich ist, aber ich muss hinzufügen, dass ich dies nicht selbst versucht habe. Sie könnten versuchen:
#label_attributes
einigen (oder allen) Formularelementen mithilfe von hook_element_info_alter () in einem benutzerdefinierten Modul eine neue Eigenschaft hinzu .$attributes
Array mit dem Wert von zusammen$element['#label_attributes']
.Wenn Sie es versuchen möchten, teilen Sie uns bitte mit, ob es funktioniert hat.
quelle
'#title'
oder einzustellen'#title_display' => 'invisible'
und dann einfach zu tun'#suffix' => '<label for="TheElementId" class="option">Display This Text</label>'
. Dies führt dazu, dass es außerhalb des Wrappers<div>
angezeigt wird, den Drupal für seine Formulareingabeelemente verwendet. Eine CSS-Regel kann jedoch dazu führen, dass es nicht anders aussieht.Um Ayeshs Antwort zu erweitern, habe ich einen Anwendungsbeispiel für einen solchen Code beigefügt. Während Marvangends Antwort viel mehr Drupalesk ist, wird viel nach einem sehr einfachen Ergebnis gesucht. Es ist der allgemeine Anwendungsfall, formularspezifische Elemente und CSS mit diesem Formular zu bündeln. Es ist ein kleines bisschen spezifischer, wenn wir auf innere Elemente zielen und darauf reagieren können.
http://legomenon.io/article/drupal-7-adding-form-placeholder-attributes
quelle
Führen Sie dies in Drupal 8 einfach durch Hinzufügen der Datei your_module.module durch
und fügen Sie die #label_attributes bei der Formularerstellung hinzu:
quelle
Ich habe einen relativ einfachen Weg gefunden, dies mit dem Fences D7-Modul zu erreichen. Dieses Modul enthält viele Vorlagendateien zum Anpassen der Felder. Bearbeiten Sie das Feld, dem Sie eine eindeutige Klasse zuweisen möchten, und ändern Sie das Wrapper-Markup in ein für Sie relevantes Feld. Suchen Sie danach die entsprechende Vorlagendatei im Modul und kopieren Sie sie in Ihre sites / all / theme / THEME_NAME.
Vor
Nach dem
Durch Hinzufügen
<?php print $label; ?>
wird der Name des Felds als Klasse gedruckt, sodass Sie alle Feldbezeichnungen einzeln ausrichten können. Ich hoffe das hilft jemand anderem!quelle
Es ist schmutzig, aber Sie können der '# title'-Eigenschaft HTML hinzufügen:
Ich bin selbst überrascht, dass es funktioniert. Ich würde denken, Drupal würde das herausfiltern, aber nein. Sie können das Etikett also mit einer anderen Klasse umschließen:
quelle