Yii Framework Forum: Ajax Grid - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Ajax Grid Con un dropdownlist de categoria cargar un Grid de las subcategorias Rate Topic: -----

#1 User is offline   Andres 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 16
  • Joined: 18-July 11

Posted 06 September 2011 - 12:27 PM

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.
0

#2 User is offline   Andres 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 16
  • Joined: 18-July 11

Posted 13 September 2011 - 04:21 PM

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
0

#3 Guest_Mahindra_*

  • Group: Guests

Posted 06 October 2011 - 06:35 AM

I have used ajax to display the list of products after selecting catergory. It displays nicely; but when I click in Submit button, the value of product doesnot pass to the action page where I have fetched the posted value. I have used PHP.
Can any one help me?
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users