Pontianak Web & Open Source

Jasa Buat Website Pontianak. Pontianak Web & Open Source

Drupal 7: Cara Membuat HTML Select Memiliki Nilai Default Berdasarkan Role User

Rab, 2014-03-12 08:54 -- mbahlol

Kali ini aku pingin membuat HTML elemen form select list langsung memiliki nilai default berdasarkan role dari user, tanpa perlu user mengisi lagi. Ceritanya begini. User A setiap membuat konten baru maka konten tersebut akan otomatis memiliki nilai Taxonomy Term A. Jika User B maka otomatis Term B. 

Menggunakan module Taxonomy Access Control(TAC) aku sudah membuat kalo User A hanya bisa pilih Term A. Cuma jeleknya kagak default, jadi mesti milih dulu antara pilihan tidak ada dan Term A. Term B, C, D sudah dibuat disabled sama module TAC dan menghilangkan tampilan disabled tersebut dengan properti CSS option:disabled. Untuk menggunakan TAC silahkan buka dokumentasinya ya :)

Setelah bertanya di Drupal Answer dan diberi petunjuk. Maka aku gunakan hook_form_alter dengan memasukan kode dibawah pada file template.php. Sampai hari ini bingung apa bedanya masukin di template.php sama buat module sendiri ya. Lain kali cari dulu ah :p. Kodenya seperti dibawah, mungkin tidak seefisien programmer berpengalaman lainnya. 

function siskum_form_alter(&$form, &$form_state, $form_id) {

if($form_id == "peraturan_node_form") { 
/* cari dulu roles dari user, simpan di $rolesName */
 $rolesName = end($GLOBALS['user']->roles);
       
/* fungsi buat cari id roles berdasarkan nama roles */
function get_id_roles($rolesName) {
$roles = user_roles();
return array_search($rolesName, $roles);
}
 
/* simpan id dalam $rid */
$rid = get_id_roles($rolesName);
 
/* set id options
* nah disini maksudnya, jika id role 5 maka id option yang bakalan diselect adalah 18. aku lihat id option dan role pake dsm($form) devel punya kerja
*/
if(empty($form['field_kabupaten']['und']['#default_value'][0])) { // maksudnya mode add, jika kosong
switch($rid) {
case 5 : $idOpt = 18; break;
case 6 : $idOpt = 11; break;
case 7 : $idOpt = 17; break;
case 8 : $idOpt = 16; break;
case 9 : $idOpt = 21; break;
case 10 : $idOpt = 19; break;
case 11 : $idOpt = 15; break;
case 12 : $idOpt = 14; break;
case 13 : $idOpt = 13; break;
case 14 : $idOpt = 22; break;
case 15 : $idOpt = 23; break;
case 16 : $idOpt = 24; break;
case 17 : $idOpt = 20; break;
}   
} else { /* jika mode edit */
$idOpt = $form['field_kabupaten']['und']['#default_value'][0];
}
 
/* di set option defaultnya */
$form['field_kabupaten']['und']['#default_value'] = $idOpt;
/* set judul dari halaman, biar ketauan aja role mana nih yang masuk dan sedang input*/
drupal_set_title(ucwords("Input peraturan -- $rolesName")); 
    }
}
 
Nah cuma segitu kodenya, masih belepotan. Begitu test login user A trus liat pilihan terms langsung isi deh, setelah aku coba simpan baru bisa senyum. Asyik berhasil juga.
 
Sumber: Thanks to amir.
Kategori Blog: