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

основную идею вынес отсюда

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();",      
                    )
                ) ,



Комментарии

Популярные сообщения из этого блога

Пишем логи на C# (.NET). Легкий способ.

Учебник yii2