Marnei,
Vou postar uma solução rápida que sempre uso.
Javascript:
Yii::app()->clientScript->registerScript("admin","
$('a#filtro').live('click', function(){
$.fn.yiiGridView.update('table-grid', {
url:'?Filtro[tipo]=vencimento&Filtro[vencimento]=' + $('select[id=vencimento] option:selected').val()
});
return false;
});
");
Filtro:
<select class="input" name="vencimento" id="vencimento">
<option value="" selected>Todos</option>
<option value="aberto">Fatura em aberto</option>
<option value="pagas">Fatura paga</option>
</select>
<a class="btn" id="filtro"><i class="icon-search"></i> Buscar</a>
TbGridView (Colocar ID):
$this->widget('bootstrap.widgets.TbGridView', array(
'id' => 'table-grid',
'type'=>'striped bordered condensed',
'dataProvider'=>$model->search(),
'filter'=>$model,
'template'=>"{items}",
'columns'=>array(
array('name'=>'id_fatura', 'header'=>'ID'),
array('name'=>'descricao', 'header'=>'Descrição'),
array('name'=>'valor', 'header'=>'Valor'),
array('name'=>'vencimento', 'header'=>'Vencimento'),
array('name'=>'status', 'header'=>'Status'),
array(
'class'=>'bootstrap.widgets.TbButtonColumn',
'htmlOptions'=>array('style'=>'width: 50px'),
),
),
));
function search(){}:
class Fatura extends CActiveRecord {
[...]
public function search()
{
// Warning: Please modify the following code to remove attributes that
// should not be searched.
$criteria=new CDbCriteria;
$criteria->compare('id_fatura',$this->id_fatura);
$criteria->compare('fk_cliente',$this->fk_cliente);
$criteria->compare('fk_servico_contratado',$this->fk_servico_contratado);
$criteria->compare('valor',$this->valor,true);
$criteria->compare('descricao',$this->descricao,true);
$criteria->compare('vencimento',$this->vencimento,true);
$criteria->compare('status',$this->status,true);
if (isset($_GET["Filtro"])) {
if (!empty($_GET['Filtro']['tipo']) && $_GET['Filtro']['tipo'] == 'vencimento') {
if ($_GET['Filtro']["vencimento"] == "aberto") {
$criteria->addCondition("vencimento > :vencimento");
$criteria->params = array(':vencimento' => date('Y-m-d'));
} else if ($_GET['Filtro']["vencimento"] == "pagas") {
$criteria->addCondition("vencimento <= :vencimento");
$criteria->params = array(':vencimento' => date('Y-m-d'));
}
}
}
return new CActiveDataProvider($this, array(
'criteria'=>$criteria,
));
}
}
O modo que fiz, não vai afetar o filtro padrão do framework que é usando na listagem, assim você pode usar o filtro com <select> se quizer pode colocar até um TbDatePicker no Filtro da coluna vencimento.