Yii фильтрация в CGridView при помощи CJuiDatePicker

June 3, 2015

основную идею вынес отсюда1.первоначальный вид столбца меняем с


array(
'name' => 'f_timestamp',
'type' => 'raw',
'value' => '($data->f_timestamp)',
'headerHtmlOptions' => array('style' => 'text-align:center'),
),

на


array(
'name' => 'f_timestamp',
'filter' => $this->widget('zii.widgets.jui.CJuiDatePicker', array(
'model' => $model,
'attribute' => 'f_timestamp',
'language' => 'ru',
'options' => array(
'showAnim' => 'fold',
'dateFormat' => 'yy-mm-dd',
'changeMonth' => 'true',
'changeYear' => 'true',
'showButtonPanel' => 'true',
),
), true),
),

2.дописываем


$this->widget('bootstrap.widgets.TbGridView', array(
'id' => 'level-view-grid',
'dataProvider' => $model->search(),
'filter' => $model,
'afterAjaxUpdate' => "function() {
jQuery('#LevelView_f_timestamp').datepicker(jQuery.extend(jQuery.datepicker.regional['ru'],{'showAnim':'fold','dateFormat':'yy-mm-dd','changeMonth':'true','showButtonPanel':'true','changeYear':'true'}));
}",

где


LevelView_f_timestamp

id фильтра (узнать можно при помощи firebug)


3.в модели изменяем правило поиска на


if ($this->f_timestamp) $criteria->addCondition ("f_timestamp::date = '$this->f_timestamp'" );

Это ключевой момент 
Стандартное $criteria->compare будет искать как LIKE а нам нужно 
WHERE f_timestamp::date = '2015-05-28'

4.после чего можем еще добавить кнопку на очистку фильтра


$this->widget('bootstrap.widgets.TbButton', array(
'buttonType' => 'button',
'label' => 'сбросить время',
'htmlOptions' => array('onclick' => "document.getElementById('LevelView_f_timestamp').value=null;location.reload(); "),
));

или даже так


array(
'class' => 'bootstrap.widgets.TbButtonColumn',
'header' => CHtml::link('сбросить время', '', array(
'onclick'=>"document.getElementById('LevelView_f_timestamp').value=null;location.reload();",
)
) ,

или так


array(
'class' => 'bootstrap.widgets.TbButtonColumn',
'header' => CHtml::image(Yii::app()->baseUrl . '/images/icons/mydel.png', '', array(
'onclick'=>"document.getElementById('LevelView_f_timestamp').value=null;location.reload();",
)
) ,



Source: des1roer.blogspot.com

Комментарии

comments powered by Disqus