[ask] filter CGridview yang menggunakan CArrayDataProvider

halo kawan-kawan…

wah dah lama aku tak posting disini…

saya mau nanya nih…

gimana caranya mengaktifkan filter bila kita menggunakan CArrayDataProvider sebagai dataProvidernya?

filter attribute di CGridview memang harus CModel.

untuk itu pasti kita perlu Membuat CModel.

saya sudah membuatnya dan filter nya udah muncul berupa textbox,tapi tetap ga bisa memfilternya.

ada yang tahu caranya?

udah nyari2 belum ketemu caranya nih… T_T

bantu ya…

NB: saya tidak bisa menggunakan CActiveDataProvider karena datanya harus dipanggil melalui stored procedure…

ternyata TS nanya di thread di bawah ini juga toh :D

http://www.yiiframework.com/forum/index.php?/topic/16435-cgridview-filters-with-carraydataprovider/

ntar kalo udah berhasil disharing2 yah :P

hahahhaa tahu aja… :lol:

jadi malu nih hahahah…

setelah beberapa percobaan bisa sih,hehe

nanti deh di share kalo sempet, lagi banyak kerjaan…

ane baru tahu adan CArrayDataprovider…

sharing sharing dong gan ini tentang apa dan baiknya kapan dipake…

CArrayDataProvider itu data provider yang berupa array,

ini digunakan kalo keadaannya ga memungkinkan untuk agan menggunakan CActiveDataProvider karena 1 dan lain hal,

contohnya agan datanya cuma bisa diambil lewat stored procedure…

nah CGridView dianjurkan menggunakan CActiveDataProvider karena lebih mudah melakukan filternya.

sebenernya data input user itu diproses di search() yang kita miliki didalam CActiveRecord kita, kemudian dikembalikanlah CActiveDataProvider baru yang kemudian ditampilkan lagi.




public function search()

	{

		// Warning: Please modify the following code to remove attributes that

		// should not be searched.


		$criteria=new CDbCriteria;


		$criteria->compare('id',$this->id);

		$criteria->compare('serial_number',$this->serial_number,true);

		$criteria->compare('chasis_number',$this->chasis_number,true);

		

		$criteria->compare('cust_loc_id',$this->cust_loc_id);

		$criteria->compare('prodel_detail_id',$this->prodel_detail_id);


		return new CActiveDataProvider(get_class($this), array(

			'criteria'=>$criteria,

		));

	}



setelah melakukan beberapa eksperimen akhirnya saya menemukan bahwa CGridView itu akan merequest action yang sama setiapkali dilakukan input pada filter, dapat dicek dengan isset($_GET["ajax"])…

jadi apabila kita menggunakan CArrayDataProvider, kita cukup mencocokkan inputnya dengan array kita,membuat array baru kemudian mengirimkan array baru tersebut dalam bentuk CArrayDataProvider dengan renderPartial halaman yang terdapat CGridview kita.

yah mudah-mudahan ngerti,kalo kurang jelas nanti saya jawab lagi beserta contoh kodenya

[filter]->[controller(lewat ajax/not)]->[model]->[jadi CativedataProvider]->[view]

kalo yang Array tadih gimana gan…

nah kalo yang array, caranya kita buat CFormModel,taro atribut-atributnya yang ada diarray kita tersebut…

nah waktu membuat gridview : “‘filter’=>$model”

sehingga nanti muncul textboxnya…

terus kita bisa ambil input usernya dicontroller lewat $_GET

nah dari $_GET tersebut saya langsung compare dengan isi arraynya

misal : kamu isi textbox x, nah saya compare array[x] dengan isi $_GET[x] menggunakan strpos

kalo cocok simpan seluruh nilai array tersebut ke array baru…

sesudah itu kita kirim CArrayDataProvider dengan array baru hasil compare tersebut trus renderPartial…

jadi deh…

Maaf gan, saya boleh tanya tidak, agak berbeda tapi masih berkaitan dengan CArrayDataProvider,

saya ingin menampilkan CgridView dari data json yang saya dapat, kira2 apa langkah yang perlu saya lakukan?

mohon pencerahannya gan, thanks a lot