Saya perlu menambahkan nama kelas ke label tertentu yang dibuat oleh API bentuk Drupal seperti ini:
$form['name'] => array(
'#type' => 'textfield',
'#title' => 'Prénom'
);
Jika saya menggunakan yang berikut ini, <textarea>
mendapat kelas, tetapi tidak label.
$form['name']['#attributes']['class'] = array('myClass');
Saya mencari sesuatu yang serupa yang akan menambah kelas ke <label>
.
.field-name-field-myfield label{ color:red; }
Jawaban:
Anda tidak bisa menetapkan kelas ke tag label elemen form menggunakan properti Form API. Namun, Anda dapat mengatur awalan dan akhiran untuk membungkus elemen (label + textarea) dan menggunakan beberapa pemilih CSS bersarang untuk mencapai apa yang Anda coba lakukan.
dan di CSS, Anda dapat memilih tag label seperti ini:
Bukan solusi yang layak tetapi itulah cara saya biasanya melakukan ini, dan telah melihat orang lain melakukannya.
#attributes
adalah untuk elemen input itu sendiri sehingga benar kode Anda menambahkanmyClass
kelas ketextarea
.sumber
Ini posting di StackOverflow mengatakan bahwa Drupal Formulir API tidak mendukung penambahan kelas untuk label, tetapi tidak mengandung solusi yang layak:
Dokumentasi API untuk theme_form_element_label () menunjukkan mengapa label tidak mungkin (setidaknya tidak out-of-the-box): array atribut diinisialisasi dalam fungsi tema dan diisi dengan hanya dua kelas opsional ('opsi' dan 'elemen -tidak terlihat ').
Jadi, apakah ini sepenuhnya mustahil? Sebenarnya, saya pikir itu bisa dilakukan, tetapi saya harus menambahkan bahwa saya belum mencoba ini sendiri. Anda dapat mencoba untuk:
#label_attributes
properti baru ke beberapa (atau semua) elemen formulir menggunakan hook_element_info_alter () dalam modul khusus;$attributes
array dengan nilai$element['#label_attributes']
.Jika Anda akan mencoba ini, beri tahu kami jika berhasil.
sumber
'#title'
atau mengatur'#title_display' => 'invisible'
dan kemudian lakukan'#suffix' => '<label for="TheElementId" class="option">Display This Text</label>'
. Itu menyebabkannya muncul di luar pembungkus yang<div>
digunakan Drupal untuk elemen input bentuknya, tetapi aturan CSS bisa membuatnya terlihat tidak berbeda.Memperluas jawaban Ayesh, saya telah menyertakan contoh kasus penggunaan untuk kode tersebut. Sementara jawaban marvangend jauh lebih Drupalesk, banyak menggali untuk hasil yang sangat sederhana. Menyimpan elemen khusus bentuk & CSS yang dibundel dengan formulir tersebut adalah kasus penggunaan umum, memungkinkan kita untuk menargetkan & bertindak pada elemen dalam adalah sedikit lebih spesifik.
http://legomenon.io/article/drupal-7-adding-form-placeholder-attributes
sumber
Pada Drupal 8, lakukan itu hanya dengan menambahkan file your_module.module
dan tambahkan #label_attributes pada pembuatan formulir:
sumber
Saya menemukan cara yang relatif mudah untuk melakukannya menggunakan modul Pagar D7. Modul ini dilengkapi dengan banyak file templat untuk menyesuaikan bidang. Edit bidang yang ingin Anda berikan kelas uniknya dan ubah markup pembungkus menjadi sesuatu yang relevan untuk Anda. Setelah itu, cari file templat yang sesuai dalam modul dan salin ke situs / all / themes / THEME_NAME Anda.
Sebelum
Setelah
Dengan menambahkan
<?php print $label; ?>
, ia mencetak nama bidang sebagai kelas, memungkinkan Anda untuk menargetkan semua label bidang secara individual. Saya harap ini membantu orang lain!sumber
Itu kotor, tetapi Anda dapat menambahkan HTML ke properti '# title':
Saya sendiri kaget ternyata berhasil. Saya pikir Drupal akan menyaring ini, tetapi tidak. Jadi, Anda dapat membungkus label dengan kelas lain:
sumber