Mohon Bantuan Dropdown List Bertingkat

para master mohon bantuannya

sudah googling dan belum menemukan pencerahan, semoga para master berkenan memberikan jawaban yang sudah dua hari saya cari :)

saya membuat dropdownlist dengan mengambil data dr tabel country dan state untuk diambil id nya untuk disimpan di tabel blogger

pada tabel country ada id, country_name

pada tabel state ada idstate, state_name, idcountry

id pada country dan idstate pada state lah yang hendak saya save ke tabel bloger

kendala nya adalah dropdown list state tidak memunculkan nilai

untuk BloggerControllernya


public function actionsetState()

	{

		$data=State::model()->findAll('provinsi_id=:parent_id',array(':parent_id'=>(int) $_POST['wilayah']));

		$data=CHtml::listData($data,'idstate','state_name');

		

		foreach($data as $value=>$name)

		{

			echo CHtml::tag('option',array('value'=>$value),CHtml::encode($name),true);

		}

	}

untuk _form nya


<div class=”row”>

	

	<?php echo $form->labelEx($model,'idcountry'); ?>

	

	<?php

	

	echo $form->dropDownList($model,'idcountry',CHtml::listData(country::model()->findAll(), 'id', 'country_name'),

		array(

		'prompt'=>'0',

		'value'=>'0',

		'ajax'=> array(

						'type'=>'POST',//request type

						'url'=>CController::createUrl('BloggerController/setState'),//memanggil setState pada BloggerController

						'update'=>'#Blogger',//pilih yang akan diupdate

						'data'=>array('wilayah'=>'js:this.value'),)));?>

						

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




	</div>

	

	


	

	<div class=”row”>


	<?php echo $form->labelEx($model,'idstate'); ?>


	<?php echo $form->dropDownList($model,'idstate', array(),array( 'prompt'=>'Pilih Country dahulu.','value'=>'0'));?>


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


	</div>

dan pada model Blogger nya


	public function relations()

	{

		// NOTE: you may need to adjust the relation name and the related

		// class name for the relations automatically generated below.

		return array(

			'blogs' => array(self::HAS_MANY, 'Blog', 'idblogger'),

			'idcountry0' => array(self::BELONGS_TO, 'Country', 'idcountry'),

			'idstate'=>array(self::BELONGS_TO,'state_name','idstate')

		);

	}



mohon untuk para master memberi pencerahannya, apa yang salah dengan code saya :)

coba pasang firebug, atau pake chrome dev-tools, lalu inspeksi, waktu idcountry-nya diganti Ajax Request ke setStatenya udah jalan belum? kalo sudah request coba cek parameternya yg dilempar udah bener gak (wilayah = xx).

kalo saya pribadi gak seberapa suka pake dependent dropdownlist model begitu, kurang user friendly.

Mending pake 1 autocomplete untuk kota, begitu suggestion dipilih user, otomatis propinsi ngikutin.

kalo yang seperti itu kaya gimana gan

alhamdulilah udah selesai yang ini

Pake cjuiautocomplete, arahkan request untuk suggestionnya ke controller tertentu, misalnya lookup/kota

kembalian dari lookup/kota harus membawa nama kota, propinsi dan id-nya masing2,

contoh:

4477

search_kota1.png

4478

search_kota2.png

saat kota dipilih, combo box propinsi langsung di assign sesuai id_propinsi, ini contoh kodingan saya (saya gak pake id kota dan propinsi, silahkan nyesuaikan):

view




..snip..

	<?php echo $form->textFieldRow($model,'kecamatan',array('class'=>'span5','maxlength'=>255)); ?>


	<?php echo $form->labelEx($model, 'kabkota'); ?>

	<div class="input-append">

	<?php $this->widget('bootstrap.widgets.TbTypeahead', array(

		'model'=>$model,

		'attribute'=>'kabkota',

		'htmlOptions'=>array('class'=>'span5', 'autocomplete'=>'off'),

		'options'=>array(

			'items'=>4,

			'source'=>sprintf('js:function(query, process) {

				$.get("%s", {key: query}, function(data) {

					data = JSON.parse(data);

					found = [];

					$.each(data, function(i, line) {

						found.push(line.key);

						foundList[line.key] = line;

					});

					return process(found);

				});

			}', Yii::app()->createUrl('lookup/kota')),

			'updater'=>'js:function(item) {

				$("#Sekolah_propinsi").val(typeof foundList[item].propinsi == "undefined" ? null : foundList[item].propinsi);

				return foundList[item].nama;

			}',

		),

	)); ?>

		<span class="add-on"><a href="#" id="search-button"><i class="icon-search"></i></a></span>

	</div>	


	<?php echo $form->dropDownListRow($model,'propinsi', $list_propinsi, array('class'=>'span3')); ?>

..snip..

<?php

Yii::app()->clientScript->registerScript('form-sekolah.js', '

	var foundList = [];

	

	$("#search-button").click(function(ev) {

		ev.preventDefault();


		$("#Sekolah_kabkota").focus();

	});	

');




LookupController




..snip..

	public function actionKota($key)

	{

		$listKota = Kabkota::model()->findAll(array(

			'condition'=>"LOWER(nama) LIKE LOWER('%{$key}%')",

			'limit'=>10,

		));


		$result = array();

		if (! empty($listKota))

			foreach ($listKota as $kota) {

				array_push($result, array(

					'key'=>sprintf('%s, %s', $kota->nama, $kota->propinsi->nama),

					'nama'=>$kota->nama,

					'propinsi'=>$kota->propinsi->nama,

				));

			}

		echo CJSON::encode($result);

	}

..snip..