Saya mencoba menjadikan beberapa bidang formulir profil Drupal sebagai hanya-baca dalam mode edit. Saya menggunakan kode berikut di hook_alter
$form[field_organisation_company_name][und][0]['#after_build'][]='_build_element_readonly';
function _build_element_readonly($element, &$form_state) {
$element['value']['#attributes']['readonly'] = 'readonly';
return $element;
}
Di UI yang diajukan ditampilkan sebagai hanya-baca, tapi tetap saja, saya bisa mengubah nilainya menggunakan pembakar dan menyimpan. Apakah ada cara untuk mencegah perilaku ini?
field_permissions
akan lebih mudah daripada melakukan pekerjaan dengan cara yang kotor.Saat Anda menetapkan bidang sebagai
readonly
, browser mengunci bidang dan mengirim data kembali ke server setelah pengiriman. Atribut lainnya adalahdisabled
yang mengunci bidang dan tidak mengirim data kembali ke server.Untuk kedua kasus, Anda dapat secara paksa mengatur nilainya menjadi sama setelah pengiriman. Jadi, bahkan ketika bidang diatur ke
readonly
ataudisabled
, dan pengguna memodifikasi HTML dan mengirim data yang berbeda,$form_state['values']
akan tetap tidak berubah.Perhatikan bahwa kita atur
#value
dari #default_value. #default_value adalah cara biasa untuk menetapkan nilai default yang dimuat saat formulir dibuat, dan$form_state['values']
akan berisi nilai default_value atau input pengguna. Ketika Anda mengatur#value
secara eksplisit, input pengguna diabaikan dan#value
akan digunakan.Bagaimanapun, saya akan merekomendasikan untuk digunakan
'#access' => FALSE,
ketika menyembunyikan elemen formulir. Ini akan menghapus elemen sepenuhnya, sementara memungkinkan Anda untuk menggunakan nilainya.sumber
Anda tidak dapat mencegah Firebug dari mengubah bidang hanya baca. Tetapi jika bidang teks hanya dibaca, itu hanya tujuannya adalah untuk menampilkan data. Jadi mengapa tidak mengubah elemen input terhadap elemen teks?
Anda dapat menggunakan atribut "cacat" sebagai gantinya, karena bidang input yang dinonaktifkan tidak dikirim ke server.
Anda dapat menghapus atribut "nonaktif" dengan pembakar juga, tetapi inti drupal tidak bereaksi pada perubahan bidang input yang dinonaktifkan!
sumber
Cara teraman untuk melakukan ini adalah mengubah jenis bidang menjadi 'item'. http://api.drupal.org/api/drupal/developer!topics!forms_api_reference.html/7#item
sumber
Anda dapat menggunakan Izin Bidang + Bidang Baca Saja .
Izin Bidang akan memungkinkan Anda untuk membuat beberapa bidang Anda tidak dapat diakses oleh pengguna tertentu.
Field Readonly akan memungkinkan Anda untuk menampilkan bidang yang tidak dapat diakses sebagai item hanya-baca pada formulir edit (alih-alih menyembunyikannya).
sumber
Saya pikir menggunakan
#disabled = true;
adalah cara termudah untuk mencapai ini alih-alih menambahkan beberapa modul berat ke inti Anda, sebagai contoh saya menonaktifkan edit bidang gambar kustom di user_profile_form ketika itu diisi oleh pengguna sebelumnya.Juga, Anda dapat memeriksa peran pengguna dan hanya menonaktifkan (bidang baca-saja) untuk bukan admin pengguna.
sumber