Pernahkan anda menjumpai permasalahan saat menginputkan data pada suatu text dengan ketentuan data itu harus benar berasal dari tabel tertentu? Kemudian dengan cara apa anda menyikapi permasalahan seperti ini? Menggunakan dropdownlist atau autocomplete? Benar, itu merupakan salah satu jalan keluar yang baik tetapi pernahkan anda berfikir apabila data dalam tabel tersebut ada ribuan? Tentu saja akan memusingkan apabila harus memilih data yang ribuan tersebut dalam suatu inputan dropdownlist.
Beberapa tutorial dalam wiki Yii Framework membuat panduan berupa select data dari kotak dialog yang didalamnya itu nanti muncul data dari tabel lain dan terdapat suatu inputan pencarian. Pada contoh berikut ini saya akan membuat tutorial dengan studi kasus aplikasi jurnal dengan data tabel master Dosen sebagai pelaku yang mengisikan data pada aplikasi jurnal tersebut. Berikut ini langkah pembuatannya:
Buatlah form yang terdiri dari textfield NIDN, Nama dan Program Studi seperti pada gambar berikut:
Kemudian buatlah tombol "ubah" untuk memunculkan data tabel dosen dalam dialog seperti pada gambar diatas.
Apabila data Dosen berasal dari tabel yang lain yaitu tabel dosen maka renderlah model tersebut. Contoh disini saya akan merender model dosen dalam action create sebagai berikut:
public function actionCreate()
{
$model=new Jurnal;
$model2=new Dosen('search');
$model2->unsetAttributes();
if(isset($_GET['Dosen']))
$model2->attributes=$_GET['Dosen'];
if(isset($_POST['Jurnal']))
{
$model->attributes=$_POST['Jurnal'];
$model->save();
}
$this->render('create',array(
'model'=>$model,
'model2'=>$model2,
));
}
Kemudian pada file protected/view/jurnal/_form.php buatlah form dialog yang berasal dari model dosen sebagai berikut:
<?php
$this->beginWidget('zii.widgets.jui.CJuiDialog',array(
//Nama selector/id
'id'=>'mydialog',
// additional javascript options for the dialog plugin
'options'=>array(
'title'=>'Klik tanda <code>+</code> untuk memilih NIDN!',
'autoOpen'=>false,
//Fokus atau modal diaktifkan
'modal' => true,
'show'=>array(
'effect'=>'blind',
'duration'=>1000,
),
'hide'=>array(
'effect'=>'explode',
'duration'=>500,
),
'width' => 640,
'height' => 480
),
));?>
<?php $this->widget('bootstrap.widgets.TbGridView',array(
'id'=>'dosen-grid',
'dataProvider'=>$model2->search(),
'type'=>'striped bordered condensed',
'filter'=>$model2,
'columns'=>array(
array(
'name'=>'nidn',
'filter'=> CHtml::activeTextField($model2, 'nidn', array('placeholder'=>'Cari NIDN dosen')),
),
array(
'name'=>'nama',
'filter'=> CHtml::activeTextField($model2, 'nama', array('placeholder'=>'Cari nama dosen')),
),
array(
'name'=>'program_studi',
'type'=>'raw',
'filter'=>CHtml::listData(Dosen::model()->findAll(array(
'distinct' => true,
'order' => 'program_studi ASC'
)), 'program_studi', 'program_studi'),
),
array(
'header'=>'PILIH',
'type'=>'raw',
'value'=>'CHtml::Button(
"+"
, array(
"class" => "btn submit"
, "id" => "get_link"
, "onClick" => "$(\"#mydialog\").dialog(\"close\");$(\"#Jurnal_nidn \").val(\"". $data->nidn."\");
$(\"#Dosen_nama \").val(\"". $data->nama."\");
$(\"#Dosen_program_studi \").val(\"". $data->program_studi."\");
"))',
),
),
)); ?>
<?php $this->endWidget('zii.widgets.jui.CJuiDialog'); ?>
Pada source code diatas merupakan code untuk membuat pilihan dialog data dari dosen kemudian apabila user sudah memilih salah satu data maka otomatis langsung mengset textfield NIDN, Nama dan Program Studi seperti pada gambar berikut ini:
Setelah button [+] di pilih maka akan menset textfield sebagai berikut ini:
Pada textfield NIDN terdapat button "ubah" source codenya sebagai berikut:
Pada textfield NIDN terdapat button "ubah" source codenya sebagai berikut:
<?php echo $form->textFieldRow($model, 'nidn', array('disabled'=>true, 'class'=>'span2', 'hint' => '<i class="text-info" id="nidn">Klik <a href="#" onclick=$("#mydialog").dialog("open"); return false;><code>ubah</code></a> untuk memilih NIDN.</i>')); ?>
Pada textfield NIDN dipasang action onclick bernama #mydialog untuk menampilkan dialog tersebut.
Apabila muncul pesan error "Undefined variable: model2" maka definisikan model2 dalam file create.php di folder protected/view/jurnal/create.php
Pada contoh ini menggunakan struktur tabel sebagai berikut:
Apabila muncul pesan error "Undefined variable: model2" maka definisikan model2 dalam file create.php di folder protected/view/jurnal/create.php
Pada contoh ini menggunakan struktur tabel sebagai berikut:
saya sudah coba scriptnya, tapi yang terisi hanya NIDN nya saja. kira - kira salah dimana ya . terimakasih sebelumnya :)
ReplyDeleteBagaimana struktur database anda?
Deletesudah bisa , ternyata $(\"#Dosen_nama \").val(\"". $data->nama."\");
Delete$(\"#Dosen_program_studi \").val(\"". $data->program_studi."\");
datanya ga masuk.
saya ubah jadi $(\"#Jurnal_nama \").val(\"". $data->nama."\");
$(\"#Jurnal_program_studi \").val(\"". $data->program_studi."\");
baru bisa.
saya mau bertanya, textfield nya saya disabled sesuai tutorial nya om.
tapi pas mau di create/save , nidn cannot be blank. ga bisa di save.
kenapa ya om?
Tambah method beforesave atau tambah form hidden nidn di viewnya: hiddenField($model, 'nidn'); ?>
Deletekalau boleh tau , method before save nya seperti apa ? maaf newbie om :D
Deleteganti ama
Deletearray(readOnly=>True)
mas nur rochim, tanya dunk struktur databesenya gmna ya.. apadi tabel jurnal ada field nama dan program_studi juga buat ? jadi seperti ini :
ReplyDeleteTabel Dosen {nidn,nama,program_studi}
Tabel Jurnal{id_jurnal,staus,publikasi (nidn,nama,program_studi),anggota}
Terimkasih atas respon dan petunjuknya.
Pada tabel jurnal cukup nidn saja sebagai fk di relasikan dengan field nidn tabel dosen.
DeleteMaksudnya untuk Autofill nya mas Nur. jadi setelah Pilih dari Tabel Dosen maka Autofill ke textfield nama dan program studi. apakah harus di buat nama dan program studinya di tabel jurnal. trims
DeleteTergantung struktur databasenya mas. Untuk contoh ini program studi saya buat tabel berbeda yaitu tabel lppm_dosen yang saya relasikan ke tabel jurnal. Agar autofill terbaca pada 'view jurnal' maka bisa di panggil relasi pada model jurnal tsb.
DeleteOk mas nur rochim, Tks ya ilmunya. sudah solved
ReplyDeletemas nur tanya dunk, pas proses update , bagaimana ya biar nama , dan program studinya muncul, krn pas aku coba2 cuma nidn aja.
ReplyDeleteBaru kalo saya pilih ubah muncul (proses tdk otomatis).
Mohon solusinya ya mas. Tks
Untuk create dan update di buat file yang berbeda, tentunya dengan form yang berbeda pula...
DeleteThis comment has been removed by the author.
ReplyDeletemas nur, mohon bantuannya untuk yg action update biar datanya bisa ketarik bagaimna ya? help
ReplyDeletemas nur kalau cjuidialog nya dipindah ke admin bisa nggak?
ReplyDeletejd action nya dipindah ke ke action update gimana kang?
Source bisa dipindah sesuai function yang di inginkan.
DeleteTombol Buka kok gak muncul ya mas?? mohon pencerahan. :D
ReplyDeletesudah bisa tapi pas di tekan tombol + kok textfieldnya tetap kosong ya??
DeleteSilahkan cek name form textfieldnya apakah sudah sesuai atau belum.
DeleteThis comment has been removed by the author.
ReplyDeletekang bagi yang udah jadi dung klo boleh, yang sederhana ajah, newbie ni kang
ReplyDeleteMas Ocim mau tanya, caranya menghapus otomatis pemesanan ketika pemesan tidak melakukan konfirmasi selama 24 jam setelah dia melakukan pemesanan bagaimana ya mas?
ReplyDeleteMohon pencerahannya :)
Get well soon..:)
Code definisi model 2 nya bagaimana ya?
ReplyDeletetolong pencerahannya master
Baik, silahkan pada file create.php anda ubah seperti baris kode berikut: echo $this->renderPartial('_form', array('model'=>$model, 'model2'=>$model2));
DeleteMas rochim,
ReplyDeletedialognya udah jalan,
cuma pas di klik tanda tambah kok gak ke set ke textfieldnya ya mas?
terus di CActiveForm gak mengenal TextFieldRow katanya mas
Silahkan cek name textfieldnya apakah sudah sesuai. TextFieldRow merupakan textfield dari yii-bootstrap, cukup menggunakan textfield saja apabila tidak menggunakan ext.yii-bootstrap.
DeleteThis comment has been removed by the author.
ReplyDeletesolved, pas ganti thame,
Deletetapi pas di klik + datanya ga masuk ke textfield yang di disable itu, knp ya mas ?
Cek name textfieldnya apakah sudah sesuai dengan action onclick di btn submit (+)
DeleteKok tombol "ubah" nya gak muncul ya? Pokoknya teks sederet tombol ubah jg gk muncul. Cuma form nidnnya aja yg bisa disable. Mohon solusinya master :)
ReplyDeleteKode program sudah sesuai diatas atau ada yang mbak Elsa rubah?
DeleteCuma yg nidn nya za ubah jd nip mas.. Soalnya mau ngambil nilai nip dr tabel dosen yg udh diisi mas
Deletetrus ada jg pesan error (alias "bootsrap.widgets.TbGridView" is invalid) itu knp ya mas?
Delete1. Perhatikan nama selector id nya apakah sudah sesuai atau tidak.
Delete2. Silahkan menggunakan ext bootstrap/ booster.
Apabila ada masalah lagi silahkan private chat melalui email di menu Kontak.
This comment has been removed by the author.
ReplyDeleteKok tombol "ubah" nya gak muncul ya?
ReplyDeletetolong dong solusinya master
Cek CSS apakah ada yang bentrok atau tidak
DeleteBang, kok pas search nidn nya error ya, jadi gak mau search
ReplyDeleteDeklarasikan terlebih dahulu modelnya.
DeleteBoleh dicontohin gak bang buat referensi. Soalnya saya baru nyoba yii ?
Deletemohon bantuannya master
Baik untuk referensi bisa saudara buka di tautan http://yii.aimagu.com/kinerja/jurnal-create.html
Deletemaster, kan data yg inputan ini udah di save nah, pas mau di update kok malah error . itu kenapa ya ?
ReplyDeletetulisannya gini "
Fatal error: Call to a member function search() on a non-object in D:\xampp\htdocs\perpus\protected\views\pengembalian\_form.php on line 46"
udah deh bang. udah berhasil sekarang mah hehe..
Deletepaling yang search di dialognya. kalau boleh minta kodingnya sama tempat ngeletakin kodingnya dimana ?
makasih master
This comment has been removed by the author.
ReplyDeletedatanya tidak tersimpan itu kenapa ya master?
ReplyDelete