En este tema les quiero mostrar como realizar búsqueda entre fechas en el GridView, en este caso voy a usar la tabla auditoria y el campo fecha_auditoria va a tener la opción para filtrar entre fechas.
Modelo Auditoria (Las modificaciones que se deben hacer en el modelo):
<?php class Auditoria extends CActiveRecord { public $date_first; //Agregar esta variable public $date_last; //Agregar esta variable //Agregar date_first, date_last en el search en la función rules() public function rules() { return array( array('fecha_auditoria', 'required'), array('usuario, modelo, accion', 'length', 'max'=>50), array('campo, camponuevovalor, campoviejovalor', 'safe'), array('date_first, date_last,id_auditoria, usuario, modelo, accion, fecha_auditoria, campo, camponuevovalor,campoviejovalor', 'safe', 'on'=>'search'), ); } //Antes del return agregar lo siguiente en el search(), cabe recalcar que fecha_auditoria es el campo que utilizo en este ejemplo public function search() { //Esto es lo que se debe agregar if((isset($this->date_first) && trim($this->date_first) != "") && (isset($this->date_last) && trim($this->date_last) != "")) $criteria->addBetweenCondition('fecha_auditoria', ''.$this->date_first.'', ''.$this->date_last.''); return new CActiveDataProvider($this, array( 'criteria'=>$criteria, )); }
Vista auditoria/admin.php (Las modificaciones que se deben hacer en la vista admin):
//Esto se debe agregar antes del código del GridView <?php // this is the date picker $dateisOn = $this->widget('zii.widgets.jui.CJuiDatePicker', array( /*'model'=>$model, 'attribute' => 'date_first',*/ 'name' => 'Auditoria[date_first]', 'value' => $model->date_first, 'language'=>'es', 'options'=>array( 'showAnim'=>'fold', 'dateFormat'=>'yy-mm-dd', 'changeMonth' => 'true', 'changeYear'=>'true', 'constrainInput' => 'false', ), 'htmlOptions'=>array( 'style'=>'height:20px;width:70px;', ), ),true) . '<br> a <br> ' . $this->widget('zii.widgets.jui.CJuiDatePicker', array( /*'model'=>$model, 'attribute' => 'date_last',*/ 'name' => 'Auditoria[date_last]', 'value' => $model->date_last, 'language'=>'es', 'options'=>array( 'showAnim'=>'fold', 'dateFormat'=>'yy-mm-dd', 'changeMonth' => 'true', 'changeYear'=>'true', 'constrainInput' => 'false', ), 'htmlOptions'=>array( 'style'=>'height:20px;width:70px', ), ),true); ?> //Esto se debe agregar en el código del GridView 'id'=>'auditoria-grid', 'type'=>'striped bordered', 'dataProvider'=>$model->search(), 'afterAjaxUpdate'=>"function() { //Esto es lo que hay que agregar jQuery('#Auditoria_date_first').datepicker(jQuery.extend({showMonthAfterYear:false}, jQuery.datepicker.regional['es'], {'showAnim':'fold','dateFormat':'yy-mm-dd','changeMonth':'true','showButtonPanel':'true','changeYear':'true','constrainInput':'false'})); jQuery('#Auditoria_date_last').datepicker(jQuery.extend({showMonthAfterYear:false}, jQuery.datepicker.regional['es'], {'showAnim':'fold','dateFormat':'yy-mm-dd','changeMonth':'true','showButtonPanel':'true','changeYear':'true','constrainInput':'false'})); }", 'filter'=>$model, //luego se debe cambiar 'fecha_auditoria', por este codigo: array( 'name'=>'fecha_auditoria', 'filter'=>$dateisOn, 'value'=>'$data->fecha_auditoria' ),
Haciendo esas modificaciones ya van a tener 100% funcional la búsqueda entre fechas, para que pueden utilizar estos códigos nada más deben de adaptarle al modelo y vista admin que deseen, básicamente lo que deben de cambiar es la fecha_auditoria por el campo que deseen, también deben de cambiar (Auditoria[date_first] , Auditoria[date_last] , #Auditoria_date_first , #Auditoria_date_last) por el nombre de su modelo, eso en la vista admin.