Lookup field, ada yg pernah buat?

Salam,

Agan2 master, bagaimana ya caranya membuat lookup field di form?

Jadi ceritanya, sy punya form untuk membuat "Premi". Nah di form itu terdapat field "tertanggung" yg harus diisi. Field "tertanggung" ini berasal dr tabel lain tentunya. Krn data tertanggung jumlahnya bisa sgt banyak, maka sy ingin membuat agar form isiannya itu dalam bentuk lookup field yg akan memanggil list semua data tertanggung yg tersimpan dalam database. Jd sy tinggal memilih salah satu data kemudian mengembalikan data itu pada form Premi.

Saya blum paham bgmn membuatnya. Sdh pernah cb pakai javascript, tp blm berhasil :D

Di forum jg sy tdk menemukan tutorial yg mudah.

Kalau agan2 sdh pernah ada yg mencoba. Mohon di share ya ^^

Mohon bantuannya, sy msh sgt newbie nih

Terima kasih

Maksudnya ketika orang ketik muncul pilihan gitu?

Mungkin CJuiAutoComplete merupakan jawabannya

ramadhanie87, anda bisa membuat class lookup di model untuk mapping data kalau datanya cuma sedikit, contohnya begini:




class LookupJenisKelamin extends CActiveRecord

{

	/**

	 */


	private static $_items=array();


	/**

	 * Returns the static model of the specified AR class.

	 * @return CActiveRecord the static model class

	 */

	public static function model($className=__CLASS__)

	{

		return parent::model($className);

	}


	/**

	 * @return string the associated database table name

	 */

	public function tableName()

	{

		return 'jenis_kelamin';

	}


	/**

	 * Returns the items for the specified type.

	 * @param string item type (e.g. 'PostStatus').

	 * @return array item names indexed by item code. The items are order by their position values.

	 * An empty array is returned if the item type does not exist.

	 */

	public static function items($type)

	{

		if(!isset(self::$_items[$type]))

			self::loadItems($type);

		return self::$_items[$type];

	}


	/**

	 * Returns the item name for the specified type and code.

	 * @param string the item type (e.g. 'PostStatus').

	 * @param integer the item code (corresponding to the 'code' column value)

	 * @return string the item name for the specified the code. False is returned if the item type or code does not exist.

	 */

	public static function item($type,$code)

	{

		if(!isset(self::$_items[$type]))

			self::loadItems($type);

		return isset(self::$_items[$type][$code]) ? self::$_items[$type][$code] : false;

	}


	/**

	 * Loads the lookup items for the specified type from the database.

	 * @param string the item type

	 */

	private static function loadItems($type)

	{

		self::$_items[$type]=array();

		$models=self::model()->findAll(array(

			'condition'=>'is_active=:type',

			'params'=>array(':type'=>$type),

			'order'=>'deskripsi',

		));

		foreach($models as $model)

			self::$_items[$type][$model->id]=$model->deskripsi;

	}

}



Nanti tinggal dipanggil aja di formnya seperti ini:




	<tr class="row">

		<td><?php echo $form->labelEx($model,'id_agama'); ?></td>

		<td><?php echo $form->dropDownList($model,'id_agama',array(

						'prompt'=>'Silakan pilih:',

						''=>LookupAgama::items('1'),

					)); ?></td>

		<?php //echo $form->error($model,'id_agama'); ?>

	</tr>



Masih lumayan nyaman sih untuk data yang nyampe 100 record untuk scrolldown, tapi kalau ribuan data, user aplikasi anda bisa ngomel2, he2. Untuk itu ya harus pakai AutoComplete seperti bung junxiong bilang.

Ini ada contoh Artikel Wikinya

thanks buat junxiong dan itmagetan atas tanggapannya…

tapi lookup yg sy maksud bukan dlm bentuk drop down. Karena datanya akan sgt banyak, sy ingin data yg ditampilkan itu berupa tabel yg berisi list data dr model yg ingin dipanggil berikut dgn detailnya. Dan dr tabel itu bs di select salah satu data untuk dikembalikan ke field yg memanggil.

sbg contoh,

Di Form Premi ada field Tertanggung yg berupa textfield (uneditable) dgn button yg bisa memunculkan tabel yg berisi list Tertanggung yg tersimpan dalam database. Lalu dr tabel bisa memilih data yg diinginkan untuk dimasukkan scr otomatis ke field bersangkutan yg ada di form Premi.

any idea??

Ya dengan autocomplete itu tadi, tapi harus ngetikkan nama tertanggung, kalau ingin dengan click & select, bisa pakai CJuiDialog seperti yang anda inginkan tadi, tapi kalau datanya sangat banyak seperti anda bilang, model begini malah akan merepotkan karena akhirnya akan scrolling juga, lebih baik pakai autocomplete saran saya.

agan bisa pake datapicker, contohnya ada di Yii forum juga.

ini ada sedikit contohnya gan, mungkin bisa membantu, ditaruh di _form




<?php echo $form->hiddenField($model,'accountid'); ?>

	  <input type="text" name="account_name" id="account_name" title="Account name" readonly value="<?php echo Account::model()->findByPk($model->accountid)->accountname ?>">

    <?php

      $this->beginWidget('zii.widgets.jui.CJuiDialog',

       array(   'id'=>'account_dialog',

                // additional javascript options for the dialog plugin

                'options'=>array(

                                'title'=>Yii::t('app','Account'),

                                'width'=>'auto',

                                'autoOpen'=>false,

                                'modal'=>true,

                                ),

                        ));


    $this->widget('zii.widgets.grid.CGridView', array(

      'id'=>'account-grid',

      'dataProvider'=>$account->Searchwstatus(),

      'filter'=>$account,

      'template'=>'{summary}{pager}<br>{items}{pager}{summary}',

      'columns'=>array(

        array(

          'header'=>'',

          'type'=>'raw',

        /* Here is The Button that will send the Data to The MAIN FORM */

          'value'=>'CHtml::Button("+",

          array("name" => "send_absschedule",

          "id" => "send_absschedule",

          "onClick" => "$(\"#account_dialog\").dialog(\"close\"); $(\"#account_name\").val(\"$data->accountname\"); $(\"#Journaldetail_accountid\").val(\"$data->accountid\");

		  "))',

          ),

        'accountid',

        'accountcode',

        'accountname',

        array(

          'class'=>'CCheckBoxColumn',

          'name'=>'recordstatus',

          'selectableRows'=>'0',

          'header'=>'Record Status',

          'checked'=>'$data->recordstatus'

        ),

        ),

    ));


    $this->endWidget('zii.widgets.jui.CJuiDialog');

    echo CHtml::Button('...',

                          array('onclick'=>'$("#account_dialog").dialog("open"); return false;',

                       ))?>		



thanks masukannya bro ^^

Bravo, this is exactly what i’m looking for gan!

thanks yo! :D

yoi gan, sami2 gan, kalo ada kesulitan, contact2 ane gan, siapa tau bisa bantuin.

chat juga boleh ke siskalandre

Sip…ikut senang jika ada masalah yang berhasil terpecahkan. Mari bahu-membahu & saling membantu.

jangan lupa judul tritnya di rename tambahin [solved]