Saya memiliki daftar tarik-turun yang menampilkan berbagai bidang berdasarkan apa yang dipilih dan saya tahu bahwa saya dapat meningkatkan visibilitas dengan status, tetapi ketika saya mencoba menggunakan diperlukan, * span ditampilkan, tetapi sebenarnya tidak diperlukan. Maksud saya adalah bahwa meskipun "diperlukan" saya bisa menekan kirim dan tidak mendapatkan pesan kesalahan dari drupal. Apakah saya melakukan sesuatu yang salah atau apakah saat ini rusak di Drupal 7.8?
$form['host_info'] = array(
'#type' => 'select',
'#title' => t("Host Connection"),
'#options' => array(
'SSH2' => t('SSH2'),
'Web Service' => t('Web Service'),
),
'#default_value' => t(variable_get('host_info', 'SSH2')),
'#description' => t("Specify the connection information to the host"),
'#required' => TRUE,
);
$form['ssh_host'] = array(
'#type' => 'textfield',
'#title' => t("Host Address"),
'#description' => t("Host address of the SSH2 server"),
'#default_value' => t(variable_get('ssh_host')),
'#states' => array(
'visible' => array(
':input[name=host_info]' => array('value' => t('SSH2')),
),
'required' => array(
':input[name=host_info]' => array('value' => t('SSH2')),
),
),
);
$form['ssh_port'] = array(
'#type' => 'textfield',
'#title' => t("Port"),
'#description' => t("Port number of the SSH2 server"),
'#default_value' => t(variable_get('ssh_port')),
'#states' => array(
'visible' => array(
':input[name=host_info]' => array('value' => t('SSH2')),
),
'required' => array(
':input[name=host_info]' => array('value' => t('Web Service')),
),
),
);
7
javascript
Sathariel
sumber
sumber
name
. Pasti begitu:input[name="host_info"]
.Jawaban:
Anda harus memvalidasi ini sendiri dalam fungsi validasi khusus.
Segala sesuatu yang dikonfigurasikan oleh status # terjadi 100% di peramban, segala sesuatu yang dikerjakannya tidak terlihat untuk Drupal ketika formulir dikirimkan (misalnya, semua bidang formulir yang tak terlihat dikirimkan dan divalidasi dengan cara yang sama jika tidak ada # keadaan).
sumber
Anda dapat menggunakan wajib seperti ini:
sumber
Sangat mirip dengan jawaban Felix Eve hanya ini cuplikan untuk validasi elemen inline:
Anda memanggil fungsi validasi elemen elemen yang diperlukan:
Kemudian fungsi validasi menemukan bidang yang diperlukan dan memeriksa untuk melihat apakah itu memiliki nilai bentuk yang benar yang akan mengungkapkan bidang yang perlu diisi.
sumber
Ada cara lain untuk menggunakan fungsi AFTER_BUILD untuk formulir dan menjadikan bidang itu opsional. Berikut ini tautan untuk drupal 6.
Tambahkan ini ke kode formulir Anda
Terapkan setelah membangun, uji kondisi bidang khusus Anda
Dalam kasus saya, #state menambahkan beberapa * jadi saya harus menghindarinya dan menggunakan jquery untuk menyembunyikan dan menampilkan rentang yang berisi *
Dan
Berdasarkan nilai custom_field saya.
sumber
Berikut panduan terperinci tentang status Drupal 7 dari status # .
Ini adalah bagian penting:
sumber
Saya baru saja dihadapkan dengan masalah yang sama sehingga diperlukan untuk memberikan validasi khusus namun saya ingin ini dikendalikan melalui array #states jadi saya tidak perlu menentukan aturan yang sama dua kali.
Ini bekerja dengan mengekstraksi nama bidang dari pemilih jQuery (pemilih harus dalam format
:input[name="field_name"]
atau tidak akan berfungsi).Kode di bawah ini hanya diuji dalam skenario spesifik yang saya gunakan, namun saya pikir itu mungkin bermanfaat bagi orang lain.
sumber
Saya bisa melakukannya dengan cara ini di Drupal 8:
Jangan letakkan t ('SSH2'). ini akan menempatkan terjemahannya di sana alih-alih nilai opsi yang merupakan SSH2 yang tidak diterjemahkan.
Saya menduga bahwa ini akan bekerja untuk Drupal 7 juga.
sumber
Saya memiliki bidang formulir bersarang, dan kotak centang, jadi saya perlu bekerja sedikit pada jawaban Dominic Woodman. Jika ada orang lain yang mengalami masalah yang sama:
sumber