[solve] combo box on change

halo para master yii…

saya mau nanya dunk…

saya punya 2 kombo box…

1 -->kategori

2–>product

1 text box

1–>nama

nah pas saat combo box 1[kategori] saya pilih combo box ke 2[product] akan shorting menurut kategori

dan text box nama lngsng ke isi nama dari kategori…

saya liat2 pake ajax ga gt gerti…hehehe…

mnt contoh dong kl ada gt…cara kerja ajax tu gmn di yii

mohon bantuanya…

coba baca dulu postingan ini dulu gan…

Posting DropDwon On Change

ma documentation yang ini…

DropDwon List

semoga membantu…

tq gan,saya da coba linknya tp lom berhasil ne…

form batch:





<?php echo $form->dropDownList($model,'id_advertiser',CHtml::listData(Advertiser::model()->findAll('deleted IS NULL or deleted <> :deleted',

		array(':deleted'=>1)), 'id', 'name'),

		array('empty'=>'--Please Choose One--'),

		array(

		'ajax' => array(

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

		'url'=>CController::createUrl('currentController/dynamiccities'), //url to call.////<----ni msdknya gmn si gan kurang gerti ni

		//Style: CController::createUrl('currentController/methodToCall')

		'update'=>'#id_product_category', //selector to update

		//'data'=>'js:javascript statement' 

		//leave out the data key to pass all form values through

		))

		);  ?>




<?php echo $form->dropDownList($model,'id_product_category','',array()); ?>//combo box ke2




saya mendapatkan error [Invalid argument supplied for foreach() ]

trus kodinganya dibawah ni saya taro di BatchController.php





public function actionDynamiccities()

{

     $data=ProductCategory::model()->findAll('parent_id=:parent_id', 

                  array(':parent_id'=>(int) $_POST['id_advertiser']));

 

    $data=CHtml::listData($data,'id','id');

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

    {

        echo CHtml::tag('option',

                   array('value'=>$value),CHtml::encode($id),true);

    }

}




mohon bantuanya lg gan

Ini gan ane modifikasi dari web ini http://yiiblog.info/blog/2011/04/ajax-control-in-yii-code-demo/

Di Controller


<?php

public function actionKategorinya()

	 {

	      $arrKategori = array(

	          '1'=>array('1'=>'Microsoft Office', '2'=>'Yii Guide CD', '3'=>'Oracle Installer'),

	          '2'=>array('1'=>'Monitor', '2'=>'Keyboard', '3'=>'Sound Card'),

	          '3'=>array('1'=>'Pensil', '2'=>'Penghapus', '3'=>'Buku Tulis'),

	      );

	      $intKategori = (int)$_POST['kategori'];

	      if (!empty($intKategori))

	          foreach ($arrKategori[$intKategori] as $key=>$macamkategori)

	              echo CHtml::tag('option',

	                              array('value'=>$key),

	                              CHtml::encode($macamkategori),

	                              true

	                              );

	 }

?>

Di View


<?php echo CHtml::beginForm();

	      echo CHtml::dropDownList('kategori',

           '',

                  array('0'=>'Pilih Satu',

	                    '1'=>'Software',

	                    '2'=>'Hardware',

	                    '3'=>'lainnya',),

	                  array(

	                      'ajax'=>array(

	                          'type'=>'POST',

	                          'url'=>Yii::app()->createUrl('controller/kategorinya'),

	                          'update'=>'#kategori_isi',

	//                              'data'=>'js:javascript statement',

	                      )));

	echo CHtml::dropDownList('kategori_isi', '', array('Pilih Lagi Macam Produk'));

	echo CHtml::endForm(); 

?>

Ane Uda coba dan jalan. Untuk selanjutnya tinggal di improve. :D

mau nanya ni code apaan mksdnya??


  'url'=>Yii::app()->createUrl('controller/kategorinya'),

manggil fungsi aja gt??





  echo CHtml::dropDownList('kategori_isi', '', array('Pilih Lagi Macam Produk'));



ni code yang bikin error kalau saya ubah jadi




  echo CHtml::dropDownList($model,'kategori_isi', array('Pilih Lagi Macam Produk'));



jalan tapi ga ke Update tuh…knp y

jalan

Hmmm…

Yii:app() , ini buat merepresentasikan infomasi apa yang kita inginkan.

misal. Untuk dapet id cukup $id=Yii::app()->user->id;

nah ini yang ane gak ngerti, kok pake $model lagi gan?. pake database ya?.

klo cuma ini jalan gak gan?




echo CHtml::dropDownList('kategori_isi', '', array('Pilih Lagi Macam Produk'));



mau nanya ni code apaan mksdnya??


  'url'=>Yii::app()->createUrl('controller/kategorinya'),

maksudenya adalah :

link nya ke Nama_controller/Action_Kategori

coba lihat di Controller, KategoriController, ada tidak Action Kategori()

manggil fungsi aja gt??

Maksudnya :

bukan memanggil fungsi tapi lebih tepatnya mengarah ke Action





  echo CHtml::dropDownList('kategori_isi', '', array('Pilih Lagi Macam Produk'));



ni code yang bikin error kalau saya ubah jadi




  echo CHtml::dropDownList($model,'kategori_isi', array('Pilih Lagi Macam Produk'));



Jawab :

yang menyebabkan Error karena ada ini "($model,"… coba hilangkan "($model," karena dropDownList itu adalah Metode dari CHTML, sehingga penulissnya harus sesuai dengan PARAMETER yang ditentukan oleh Metode Bawaan nya…

jalan tapi ga ke Update tuh…knp y

jalan

====================

semoga dapat membantu…!

Tuh,Ud dijelasin sama agan ahmadori :D

Oh iya takut lupa, cek di accessRules, siapa tau actionnya belum di masukin. ^_^

y saya pake database…

kalo




echo CHtml::dropDownList('kategori_isi', '', array('Pilih Lagi Macam Produk'));



ini malah error…

boleh liat actionControlernya kyk gimana gan?.

kalau gt brp saya BatchController/dynamiccities y…saya pasang dynamiccitiesnya di batchcontroller saya

saya pake database…kl ga pasang $model error dy…hehehe

da saya kutak katik tetep nga nongol2 ni…:blink::blink:

bener ga si begini action ny??:mellow:





	public function actionDynamiccities()

{

	$data=AdvertiserCategory::model()->findAll('id_advertiser=:parent_id', 

              	array(':parent_id'=>(int) $_POST['id_advertiser']));

 

	$data=CHtml::listData($data,'id_product_category','id_product_category');

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

	{

    	echo CHtml::tag('option',

               	array('value'=>$value),CHtml::encode($id),true);

	}

}




Coba cek lagi $_POST[‘id_advertiser’]

Biasanya Yii bacanya beda, coba bongkar pake firebug atau sejenisnya.

Dynamiccities ud di simpen di accessRules?

ketemunya

<br>&nbsp;jadi saya $_POST nya paan y<br><br>mksnydya simpan di accessRule paan y??<br>

nah ini dia dapet name="Batch[id_advertiser]

Nulis post jadi.

$_POST["Batch"]["id_advertiser"]

tetep aja ga terjadi apa2…:blink:

accessRulesnya di pasang gini kan mksdnya

.




array('allow',  // allow all users to perform 'index' and 'view' actions

				'actions'=>array('dynamiccities'),

				'users'=>array('*'),

			),




Yups betul, itu accesRule yang saya maksud :)

Hmmm…coba cek pake firebug, itu error dimana , terus yang dikirim betul apa enggak.

saya ingin membuat ketika saya memilih combo box advertiser, maka combo box product isinya akan berubah(menurut combo_box_advertiser yang terpilih).

dan textField job_id akan berubah menjadi nama dari advertiser yang terpilih

saya sudah mencoba json dan tidak berhasil

mohon pencerahanya…

my code:

Batch /_form




<div class="form">


<?php $form=$this->beginWidget('CActiveForm', array(

        'id'=>'batch-form',

        'enableAjaxValidation'=>true,

)); ?>


        <p class="note">Fields with <span class="required">*</span> are required.</p>


        <?php echo $form->errorSummary($model); ?>


                <div class="row">

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

                <?php echo $form->textField($model,'jobs_id',array('size'=>50,'maxlength'=>50)); ?>

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

        </div>

        

        <div class="row">

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

                <?php echo $form->dropDownList($model,'id_advertiser',CHtml::listData(Advertiser::model()->findAll('deleted IS NULL or deleted <> :deleted',array(':deleted'=>1)), 'id', 'name'),

                array('empty'=>'--Please Choose One--'),

                array(

                'type'=>'POST', 

                'dataType'=>'json',

                'data'=>array('id_advertiser'=>'js:$(\'#Batch_id_product_category\').val()'),//-->format ini bener ga???

                'url'=>CController::createUrl('dodo'),

                'success'=>'function(data) {

                $("#Batch_id_product_category").html(data.dropdownA);

                 $("#Batch_jobs_id").val(data.dodo);

                 

                

                }',

                ));     ?>

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

        </div>


        <div class="row">

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

                <?php echo $form->dropDownList($model,'id_product_category',array()); ?>

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

        </div>

<div class="row buttons">

                <?php echo CHtml::submitButton($model->isNewRecord ? 'Create' : 'Save'); ?>

        </div>


<?php $this->endWidget(); ?>


</div><!-- form -->




BatchController:

.




public function actionDodo()

{

        $data=AdvertiserCategory::model()->findAll('id_advertiser=:parent_id', 

        array(':parent_id'=>(int) $_POST['Batch']['id_advertiser']));

        

        $data=CHtml::listData($data,'id_product_category','id_product_category');

        

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

                   $dropDownA .= CHtml::tag('option', array('value'=>$value),CHtml::encode($id_product_category),true);

                

                        // return data (JSON formatted)

                        echo CJSON::encode(array(

                                          'dropDownA'=>$dropDownA,

                                          'dodo'=>$_POST['Batch']['id_advertiser'],

                        )); Yii::app()->end();


        

        

}       



coba pake activeDropDownList, ane baru pake activeTextField, untuk activeDropDownList ane blm nyoba. Ntar klo berhasil jgn lupa share ya gan :D


<?php CHtml::activeDropDownList($model,'role_id',CHtml::listData( Role::model()->findAll(), 'id', 'role_name' ), array('prompt'=>'Select Role...'));?>

Coba Ane minta struktur kedua tabelnya biar lebih jelan gan…

agar lebih mudah ngasih Contoh kodenya…!