Filtros en Rangos de Fechas CGridView

Hola a todos, e integrado correctamente este tutorial

http://www.yiiframework.com/wiki/345/how-to-filter-cgridview-with-from-date-and-to-date-datepicker/

Pero resulta que cuando uso algunos de los filtros del CGridView se pierde el rango de fechas

¿hay alguna manera de integrar este rango de fechas desde el filter en el GridView, para que funcione desde allí? y no desde otro formulario como esta en el tutorial, ¿o de que otra manera se puede resolver?.

Muchas gracias de antemano.

yo lo he hecho funcionar con yiibooster, que trae un widget que se llama dateRangePicker (que son dos datePickers juntos).

Yo de ti, antes que meter yiibooster solo para esto, intentaría hacerme un widget dateRangePicker a mano, o encontrar uno

(He visto este pero no he podido ver la demo… http://www.yiiframework.com/extension/daterangepicker/ ) que funcione.

Y después,y aquí viene la magia de yii… :D

Integras el dateRangePicker en el filtro del grid, en el array de columnas, asi:




... Otras columnas

,

// Columna RangoFechas

array('name'=>'fecha_rango',

	'header'=>'Fecha Entrada',

	'type'=>'raw',

	'value'=>'date("d/m/Y H:i:s", strtotime($data->fecha))',

	'filter'=>$this->widget('booster.widgets.TbDateRangePicker',array(

				'model'=>$productos,

				'attribute'=>'fecha_rango',

				'htmlOptions'=>array('id'=>'dateRangePicker_'.$model->id,

						'class'=>'form-control date-filter'

				),

				'options'=>Controller::$dateRangePickerOptions,

				),

			true).

		'</div>'),

... Otras columnas




Aquí lo importante es llamar a $this->widget(‘booster.widgets.TbDateRangePicker’

en la propiedad filter. (tú tendrás que llamar a tu widget,

probablemente algo como "extensions.widgets.dateRangePicker.dateRangePicker"

El ‘value’ lo dejas como lo tengas configurado ahora para ver las fechas como las tienes.

Por supuesto tener definido en tu modelo la propiedad fecha_rango


public $fecha_rango;

Ese options que tengo yo definido ahi son opciones para mi dateRangePicker, son estas, pero el tuyo puede necesitar que lo configures de otra manera (es probable):




public static $dateRangePickerOptions = array(

		'locale'=>array(

				'firstDay'=>1,

				'applyLabel'=>'Aceptar',

				'cancelLabel'=>'Cancelar',

				'fromLabel'=>'Desde',

				'toLabel'=>'Hasta',

			),

		'showDropdowns'=>true,

		'format'=>'DD/MM/YYYY',

		'autoclose'=> true,

	);



y el htmlOptions puedes ignorarlo

Por último, si todo va bien, en el modelo vas a recibir el rango de fechas en la función search()

Mi dateRangePicker hace que $fecha_rango valga "01/01/2014 - 15/01/2014"

Tendrás que asegurarte de que viene en el formato correcto,

que son dos fechas,

que son validas

construir una fecha mysql con la primera (2014-01-01) y con la segunda 2014-01-2014

y meterselas al $criteria:




if(isset($this->fecha_rango) && $this->fecha_rango != ''){

    // parsear en $fechaIni y $fechaFin las dos fechas ... que vendrán en fecha_rango de la forma "dd/mm/yyyy - dd/mm/yyyy"

    // esto te lo dejo a ti que no estoy muy orgulloso de mi funcion para parsear (es una chapuza...)...


     $criteria->addCondition("fecha >= ':fechaIni'");

     $criteria->addCondition("fecha <= ':fechaFin'");

    $criteria->params[":fechaIni"] = $fechaIni;

    $criteria->params[":fechaFin"] = $fechaFin;

}



y debería funcionar…

:D

suerte!