Ajax Grid

Buenas, una vez mas solicito su ayuda…

Mi problema es el siguiente:

En una seccion de mi form cargo un dropdownlist con el id y el nombre de categoria.

En funcion al id de la categoria que se escoja tiene que cargar un grid con la informacion respectiva de la subcategoria.

Para que tengan una idea mas clara aca esta el codigo:

En el form se tiene los siguiente:




<div class="row">

		<?php echo $form->labelEx(Category::model(),'Categoria'); ?>

                <?php 

                    $model_category=Category::model()->findAll('1=1');

                    $list_category=CHtml::listData($model_category, 'id_category', 'name');

                ?>

                <?php echo $form->dropdownlist(Category::model(),'id_category',$list_category, array('prompt'=>'Seleccione',

                    'ajax' => array(

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

                    'url'=>CController::createUrl('Service/DinamicServiceGrid'), //url to call.

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

                    ),

                    

                    ));

                ?>

	</div>


        

        <div id="ServiceGrid"> </div>



y en el controlador de mi subcategoria he creado un action




public function actionDinamicServiceGrid($category='')

        {

            if(empty($category))

                $category=$_POST['Category']['id_category'];

            $dataProvider=new CActiveDataProvider('Service', array(

                'criteria'=>array(

                    'condition'=>'id_category='.$category,

                ),

                'pagination'=>5

            ));

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

            'id'=>'service-grid',

            'dataProvider'=>$dataProvider,

            'filter'=>$model,

            'columns'=>array(

                    'id_service',

                    'id_category',

                    'name',

                    'description',

                    'cost',

                    'currency',

                    /*

                    'date_created',

                    'created_by_id',

                    'date_modified',

                    'modified_by_id',

                    */

                    array(

                            //'class'=>'CButtonColumn',

                    ),

            ),

        ));

            

        }



Gracias por la ayuda, un saludo.

Me respondo a mi mismo, encontre una forma mas simple de hacer esto (descubriendo las potencialidades de este framework), lo mas facil es realizar un dropdownlist en uno de los filtros del grid.

A continuacion el codigo, primero del modelo:




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(

			'coments' => array(self::HAS_MANY, 'Coment', 'id_service'),

			'payments' => array(self::HAS_MANY, 'Payment', 'id_service'),

			'quoteServices' => array(self::HAS_MANY, 'QuoteService', 'id_service'),

			'idCategory' => array(self::BELONGS_TO, 'Category', 'id_category'),

			'tasks' => array(self::HAS_MANY, 'Task', 'id_service'),

		);

	}


public function search()

	{

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

		// should not be searched.


		$criteria=new CDbCriteria;

                

               

                $criteria->with = array('idCategory');

		$criteria->compare('t.id_service',$this->id_service,true);

                $criteria->addSearchCondition('idCategory.id_category',$this->id_category);

		$criteria->compare('t.name',$this->name,true);

		$criteria->compare('t.description',$this->description,true);

		$criteria->compare('t.cost',(double)$this->cost,true);

		$criteria->compare('t.currency',$this->currency,true);

		

                


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

			'criteria'=>$criteria,

                        'pagination'=>array(

                            'pageSize'=>3,

                    ),

		));

	}



luego el codigo del form:




<?php

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

            'id'=>'service-grid',

            'dataProvider'=>$model()->search(),

            'filter'=>  $model,

            'columns'=>array(

                    'id_service',

                    array(

                        'name'=>'id_category',

                        'filter'=>CHtml::listData(Category::model()->findAll(), 'id_category', 'name'), 

                        

                        'value'=>'$data->idCategory->name',

                        'type'=>'text',

                    ),

                    

                    //'id_category',

                    'name',

                    'description',

                    'cost',

                    'currency',

                    /*

                    'date_created',

                    'created_by_id',

                    'date_modified',

                    'modified_by_id',

                    */

                    array( 'class'=>'CCheckBoxColumn',

                                'value'=>'$data->id_service',

                                'selectableRows'=>10,

                                'checked'=>'$data->cost>500'

                           

                        ),

                    

            ),

        ));

            ?>



por si alguien lo necesita…

Ahora la duda es la siguiente (disculpen si no he creado otro post), en esta seccion:




<?php

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

            'id'=>'service-grid',

            'dataProvider'=>Service::model()->search(),

            'filter'=>  Service::model(),

            'columns'=>array(

            .....



como ven en el dataProvider estoy llamando a la funcion search de Service, esto es porque estoy introduciendo el grid de service en otro form que no le corresponde a la respectiva vista, mi conflicto es en el filter cuando llamo a Service::model(), no me funciona para nada el filtro como puedo solucionar esto…

Gracias por la ayuda