Как отобразить вид сетки на основе радиокнопок

Я использую два радиокнопки в форме расширенного поиска, они проверяются и не проверяются. Когда я нажимаю на просмотренный, он должен фильтровать несколько окон поиска в Gridview и отображать результат. Также есть три других поля: «Дата обновления», «Дата проверки» и «Дата создания». Предположим, я нажимаю на проверенную кнопку. Он должен проверять, что время обновления условия больше, чем дата создания, а дата проверки является значением по умолчанию (0000-00-00 00:00:00) и отображать результаты в представлении сетки.

SQL query-Select * from test where (updateddate>createddate)and(revieweddate=='0000-00-00 00:00:00');  

Точно так же, когда я нажимаю «Не проверено», он должен проверять наличие updateddate=createddate и revieweddate=NULL.

   SQL query-Select * from test where (updateddate=createddate)and(revieweddate IS NULL);   

Ниже приведен код, который я пробовал, но я не получаю должных результатов. Как я могу выполнить правильные результаты.

    $criteria->compare('ReviewedDate',$this->ReviewedDate,true);
             if($this->ReviewedDate != '') {
    $criteria->addCondition(
        'ReviewedDate ' . ($this->ReviewedDate=='1' ? 'IS NOT NULL' : 'IS NULL'));

}
else {
    $criteria->addCondition('ReviewedDate IS NULL');
}

person user2770039    schedule 25.09.2013    source источник


Ответы (1)


вы можете использовать фильтр клиентов в представлении сетки, например раскрывающийся список, и получить значение этих полей и реализовать там свою логику, например:

на ваш взгляд:

$this->widget('zii.grid.GridView' , array(
'id' => 'urGrid',
'dataProvider' => $model->search,
'columns' => array(
        array(
           'name' => 'ReviewedDate',
           'filter' => CHtml::dropDownList('customeField' , $_GET['customeField'] , array(0=>'not reviewed' , 1=>'reviewed' , 2=>'some other thing'))
        ),
         .
         .
         .
    ),
));

и в вашей функции поиска поймайте это значение поля custome:

public function search() {
    $criteria = new CDbCriteria;

    //$criteria->compare('col1', $this->col1);
    $criteria->compare('col2', $this->col2);
    .
    .
    .
    if(isset($_GET['customeField'])){  // implement your logic in here
        if($_GET['customeField'] == 1){
              $criteria->addCondition('t.updateddate > t.createddate);  //add your logic
              $criteria->compare('revieweddate' ,'0000-00-00 00:00:00'); //check for exact thing
         }
         else{ anothe thing ..}
    }

ваше здоровье

person Developerium    schedule 25.09.2013