Apakah ada cara untuk mengonversi formulir biasa dan menambahkan placeholder dengan modul, atau haruskah ini dilakukan dengan Templat formulir atau dengan jQuery?
22
Itu adalah placeholder HTML5, Anda bisa menambahkannya sebagai atribut ke elemen apa pun dan browser yang diaktifkan HTML5 akan bereaksi sesuai itu:
function MYMODULE_form_alter(&$form, &$form_state, $form_id) {
if ($form_id == 'some_form') {
$form['some_element']['#attributes']['placeholder'] = t('Placeholder text');
}
}
Fungsi rekursif singkat seperti ini mungkin berguna jika Anda ingin secara otomatis menambahkan placeholder untuk setiap bidang teks dalam formulir (berdasarkan judul bidang dalam contoh ini):
function MYMODULE_auto_placeholders(&$element) {
if ( isset($element['#type']) && $element['#type'] == 'textfield') {
// set placeholder
$element['#attributes']['placeholder'] = $element['#title'];
// hide label
$element['#title_display'] = 'invisible';
}
foreach (element_children($element) as $key) {
MYMODULE_auto_placeholders($element[$key]);
}
}
Kemudian dalam bentuk Anda ubah fungsi panggil saja
MYMODULE_auto_placeholders($form);
Metode itu akan bekerja untuk hampir semua bidang teks pada formulir, dengan pengecualian yang ditambahkan dalam #process
fungsi (misalnya alt dan judul bidang teks bidang gambar misalnya).
Saya mencoba jawaban Clive:
Tapi yang mengejutkan saya, saya mendapatkan placeholder di bungkus textfield, bukan textfield itu sendiri. Kemudian saya mencoba variasi sebagai berikut, itu berhasil!
sumber
Tambahkan saja placeholder di larik #attributes untuk elemen bidang formulir, seperti dalam kode berikut.
sumber
Menemukan ini dan berpikir jawaban Clive tampak bagus untuk secara otomatis menambahkan placeholder.
Anda, beberapa perubahan kecil diperlukan untuk melakukannya dengan benar di drupal 8, jadi inilah jawaban yang hampir sama, tetapi cocok untuk tema drupal 8 Anda.
sumber
Jika Anda ingin menargetkan contoh formulir secara langsung menggunakan hook_form_FORM_ID_alter. Mungkin lebih rapi daripada menggunakan kondisional. Solusi saya untuk menargetkan contoh blok formulir pencarian saja.
sumber