Muszę dodać nazwę klasy do niektórych etykiet utworzonych przez interfejs API formularza Drupala w następujący sposób:
$form['name'] => array(
'#type' => 'textfield',
'#title' => 'Prénom'
);
Jeśli użyję następujących, <textarea>
klasa otrzyma klasę, ale nie etykietę.
$form['name']['#attributes']['class'] = array('myClass');
Szukam czegoś podobnego, co doda klasę do <label>
.
.field-name-field-myfield label{ color:red; }
Odpowiedzi:
Nie można ustawić klasy na znacznik etykiety elementu formularza przy użyciu właściwości interfejsu API formularza. Możesz jednak ustawić prefiks i sufiks, aby zawinąć element (etykieta + obszar tekstowy) i użyć zagnieżdżonego selektora CSS, aby osiągnąć to, co próbujesz zrobić.
a w CSS możesz wybrać tag etykiety w następujący sposób:
Nie jest to dobre rozwiązanie, ale zwykle tak to robię i widziałem, jak robią to inni.
#attributes
jest dla samego elementu wejściowego, więc poprawny kod dodajemyClass
klasę dotextarea
.źródło
Ten post na StackOverflow mówi, że interfejs API Drupal Form nie obsługuje dodawania klas do etykiet, ale zawiera przyzwoite obejście:
Dokumentacja interfejsu API dla theme_form_element_label () pokazuje, dlaczego etykiety nie są możliwe (przynajmniej nie po wyjęciu z pudełka): tablica atrybutów jest inicjowana w funkcji motywu i zapełniana tylko dwiema opcjonalnymi klasami („opcja” i „element” -niewidoczny').
Czy to jest całkowicie niemożliwe? Właściwie myślę, że da się to zrobić, ale muszę dodać, że sam tego nie próbowałem. Możesz spróbować:
#label_attributes
właściwość do niektórych (lub wszystkich) elementów formularza za pomocą hook_element_info_alter () w module niestandardowym;$attributes
tablicę z wartością$element['#label_attributes']
.Jeśli chcesz spróbować, daj nam znać, czy zadziałało.
źródło
'#title'
lub ustawienie,'#title_display' => 'invisible'
a następnie po prostu zrobienie tego'#suffix' => '<label for="TheElementId" class="option">Display This Text</label>'
. To powoduje, że pojawia się poza opakowaniem, które<div>
Drupal używa do wprowadzania danych do formularza, ale reguła CSS może sprawić, że nie będzie wyglądać inaczej.Rozwijając odpowiedź Ayesh, zamieściłem przykładowy przypadek użycia takiego kodu. Podczas gdy odpowiedź marvangend to znacznie więcej Drupalesk, to jest dużo kopania dla bardzo prostego wyniku. Łączenie specyficznych elementów formularza i CSS w pakiecie ze wspomnianą formą jest ogólnym przypadkiem użycia, pozwalając nam celować i działać na elementach wewnętrznych jest nieco bardziej konkretny.
http://legomenon.io/article/drupal-7-adding-form-placeholder-attributes
źródło
Na Drupal 8 zrób to, dodając plik your_module.module
i dodaj #label_attributes przy tworzeniu formularza:
źródło
Znalazłem stosunkowo łatwy sposób, aby to osiągnąć za pomocą modułu Fences D7. Ten moduł zawiera wiele plików szablonów do dostosowania pól. Edytuj pole, któremu chcesz nadać unikalną klasę, i zmień znacznik opakowania na coś odpowiedniego dla siebie. Następnie znajdź odpowiedni plik szablonu w module i skopiuj go do swoich witryn / all / themes / THEME_NAME.
Przed
Po
Po dodaniu
<?php print $label; ?>
drukuje nazwę pola jako klasę, umożliwiając kierowanie na wszystkie etykiety pól indywidualnie. Mam nadzieję, że to pomaga komuś innemu!źródło
Jest brudny, ale możesz dodać HTML do właściwości „# title”:
Jestem zaskoczony, że to działa. Sądzę, że Drupal to odfiltruje, ale nie. Możesz więc owinąć etykietę inną klasą:
źródło