SOCORRO!!! Busca no CGridView

Senhores,

Bom dia.

Tenho o seguinte cenário:

index da minha view Projeto:




<?php

$this->pageTitle=Yii::app()->name . ' - Projetos';

$this->breadcrumbs=array('Projetos');

?>

<h2 id="current_area" class="table">Projetos</h2>

<?php	$this->widget('zii.widgets.CBreadcrumbs', array('links'=>$this->breadcrumbs)); ?>

<h3 id="current_page">Projetos</h3>

<div id="page_content">

<?php 			

$projeto = Projeto::model();

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

'id'=>'projeto-grid',

//'dataProvider'=>$dataProvider,

'dataProvider'=>$dataProvider,

'pager'=>array(

'cssFile'=>'',

'nextPageLabel'=>'Pr&oacute;xima ->',

'prevPageLabel'=>'<- Anterior',

'lastPageLabel'=>'&Uacute;ltima',

'firstPageLabel'=>'Primeira'

),

'columns'=>array(

array(

'class'=>'CLinkColumn',

'header'=>'Projeto',

'labelExpression'=>'$data->nome',

'urlExpression'=>'Yii::app()->controller->createUrl("projeto/update", array("id"=>$data->id))',

),

array('name'=>'dataInicioFormat',

'filter'=>false,

),

array(

'name'=>'dataUpdateFormat',

'filter'=>false,

),

array(

'name'=>'nomeStatus',

'filter'=>false,

),

array(

'class'=>'CButtonColumn',

'header'=>'Editar',

'template'=>'{update}',

'updateButtonImageUrl'=>Yii::app()->theme->baseUrl.'/images/edit.png',

'deleteButtonUrl'=>'Yii::app()->createUrl("update", array("id" => $data->id))',							

),				

array(

'class'=>'CButtonColumn',

'header'=>'Apagar',

'template'=>'{delete}',

'deleteButtonImageUrl'=>Yii::app()->theme->baseUrl.'/images/delete.png',

'deleteButtonUrl'=>'Yii::app()->createUrl("/projeto/delete", array("id" => $data->id))',					

),

array(

'class'=>'CButtonColumn',

'header'=>'Enviar arquivo',

'template'=>'<img src="'.Yii::app()->theme->baseUrl.'/images/enviar-arquivo.gif'.'">',

'deleteButtonImageUrl'=>Yii::app()->theme->baseUrl.'/images/enviar-arquivo.gif',

'updateButtonUrl'=>'Yii::app()->createUrl("/projeto/enviar", array("id" => $data->id))',					

)

),

'htmlOptions'=>array('class'=>''),

));

?>

<ul class="actions">

<li class="create"><a href="<?php echo Yii::app()->createUrl("/projeto/create"); ?>">Criar novo Projeto</a></li>

<li class="print"><a href="javascript:window.print();">Imprimir Lista</a></li>

</ul>

</div>



Primeiro: preciso fazer a busca desta CGridView funcionar. Ela foi adaptada da CGridView da view admin.

Segundo: essa busca precisa estar fora da tabela que é montada pela CGridView.

Estava pensando em criar um form a parte fora da CGridView, mas também não estou conseguindo

Alguem poderia me ajudar?

Eu criei um botão!


$('button[id=filtrar]').live('click', function(){

        $.fn.yiiGridView.update('table-grid', {

            url:'?filtro&m=' + $('select[id=mes] option:selected').val() + '&a=' + $('select[id=ano] option:selected').val()

        });

        return false;

    });

Ai eu adicionei 2 <select>, 1 do Mês, e outro do Ano.

Ai no meu Model(Financeiro), criei um public function index() que recebe os $_GET




public function index() {


        $criteria = new CDbCriteria;


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


        ...


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


        if (isset($_GET["filtro"])) {


            if ($_GET["m"] == '' && $_GET["a"] == '') {

                $criteria->addCondition("");

            } else if ($_GET["m"] == '' && $_GET["a"] <> '') {

                $criteria->addCondition("YEAR(dataabertura) = '{$_GET["a"]}'");

            } else if ($_GET["m"] <> '' && $_GET["a"] == '') {

                $criteria->addCondition("MONTH(dataabertura) = '{$_GET["m"]}'");

            } else if ($_GET["m"] <> '' && $_GET["a"] <> '') {

                $criteria->addCondition("MONTH(dataabertura) = '{$_GET["m"]}'");

                $criteria->addCondition("YEAR(dataabertura) = '{$_GET["a"]}'");

            }

        } else {

            $criteria->addCondition("dataabertura < '" . date('Y') . "-".(date('m')+1)."-01'");

        }




        return new CActiveDataProvider('Financeiro', array(

            'criteria' => $criteria,

            'sort' => array(

                'defaultOrder' => 'dataabertura ASC',

            ),

            'pagination' => array(

                'pageSize' => 20,

            ),

        ));

    }

E no controler, adicionei mais uma instância.




public function actionIndex() {


        $model = new Financeiro('search');

        $financeiro = new Financeiro('index');

        

        ...


        $this->render('index', array(

            'model' => $model,

            'financeiro' => $financeiro

        ));

    }



Rapaz,

Acabei fazendo o seguinte (na minha opinião bem similar à sua solução).

Espia só:

No controller (do model projeto):




(...)

public function actionIndex()

{

   if(isset($_REQUEST['Projeto'])){

      $nome = $_POST['Projeto']['nome'];

      $nome = trim($nome);

      $dataProvider = new CActiveDataProvider('Projeto',

         array('criteria'=>array(

                              'condition'=>"nome like '%$nome%'",

                              'order'=>'nome')));

   }else{

      $dataProvider = new CActiveDataProvider('Projeto');

   }

   $this->render('index',array('dataProvider'=>$dataProvider,));

}



Na View (index.php do model projeto):




(...)

<?php echo CHtml::beginForm(); ?>

   <div class="row">

      <?php echo CHtml::activeLabel($model,'nome'); ?>

      <?php echo CHtml::activeTextField($model,'nome') ?>

   </div>

   <div class="row buttons">

      <?php echo CHtml::submitButton('Procurar'); ?>

   </div>

<?php echo CHtml::endForm(); ?>

(...)

$this->widget('zii.widgets.grid.CGridView', array('id'=>'projeto-grid','dataProvider'=>$dataProvider, (...)

(...)



E, por mais inacrebilivable que pareça, funcionou!