2016-07-07 7 views
2

Я пытаюсь отобразить виджет CGridView с Yii и, несмотря на правильность таблицы, он не включает вход фильтра.Yii CGridView не отображает фильтры по умолчанию

Мой код виджета в представлении заключается в следующем:

<?php 
$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'awesomeGrid', 
'dataProvider'=>$model->search(), 
'enableSorting'=>true, 
'filter'=>$model, 
'columns'=>array(
    /*array('name'=>'Check', 
     'value'=>'CHtml::checkBox("name",true)', 
     'type'=>'raw', 
     'htmlOptions'=>array('width'=>5), 
),*/ 
    array(
     'header'=>'Prueba_Columna', 
     'name'=>'OBJECT_TYPE', 
     'value'=>'$data->OBJECT_TYPE', 
     'filter'=>$model->getFilter(), 
     'type' => 'raw'), 

) 
)); 
?> 

Моя модель:

public function search(){ 
    $criteria=new CDbCriteria; 
    $criteria->select='OBJECT_TYPE'; 
    return new CActiveDataProvider($this,array(
      'criteria'=>$criteria, 
     'pagination'=>array('pageSize'=>20) 
    )); 



} 
public function getFilter(){ 
    $criteria=new CDbCriteria; 
    $criteria->compare('OBJECT_TYPE',$this->OBJECT_TYPE,true); 
    return new CActiveDataProvider($this,array(
      'criteria'=>$criteria, 
    )); 



} 

И мой контроллер:

public function actionIndex() 
{ 
    $appUsersModel = new AppUsers(); //Instance the model object 
    $objectsListModel = new ObjectsList('search'); 
    $objectsUserModel = new ObjectUser(); 

    $appsArray  = $this->getApps($appUsersModel); 
    $projectsArray = $this->getProjects($objectsListModel); 
    $usersArray = array(array()); 
    $typesArray = array(array()); 
    $objectsArray = array(array()); 

    // renders the view file 'protected/views/security/index.php' 
    // using the default layout 'protected/views/layouts/main.php' 
    $this->render('index', 
     array('appsArray' => $appsArray, 
     'usersArray' => $usersArray, 
     'projectsArray' => $projectsArray, 
     'typesArray' => $typesArray, 
     'objectsArray' => $objectsArray, 
     'appUsersModel' => $appUsersModel, 
     'objectsUserModel' => $objectsUserModel, 
     'model'=>$objectsListModel, 
     ) 
    ); 
} 

Когда я иду к инструментам разработчиков на firefox и проверить правильность HTML. Я вижу следующее:

<div id="awesomeGrid" class="grid-view"> 
<div class="summary">Displaying 1-20 of 2432 results.</div> 
<table class="items"> 
<thead> 
<tr> 
<th id="awesomeGrid_c0"><a class="sort-link" href="/apps/project_name/web/index.php/security/index?ObjectsList_sort=OBJECT_TYPE">Prueba_Columna</a></th></tr> 
    <tr class="filters"> 
    <td></td></tr> 
    </thead> 
    <tbody> 
    <tr class="odd"> 
    <td>VIEW</td></tr> 
    <tr class="even"> 
    <td>VIEW</td></tr> 
    </table> 
    </div> 

Как вы можете видеть, есть отметка <tr class="filters"><td></td></tr>, но не существует входной метки внутри фильтра. Тогда я думаю, что виджет настроен правильно, но, возможно, есть некоторая ошибка, из-за чего вход не отображается.

Может ли кто-нибудь мне помочь?

спасибо.

ответ

0

Фильтр должен быть array. Вы проверили свой результат getFilter(). Кажется, он не возвращает array. Вот почему вы не получаете фильтр. Попробуйте просмотреть выходные данные вашего function

+0

Спасибо за ваш ответ. Выход: CActiveDataProvider Объект. Какие значения должны иметь массив? Спасибо – Maik

+0

что вам нужно в этом поле означает, что выбрать поле ?? преобразовать объект в желаемый массив? или, пожалуйста, обновите свой вопрос с помощью функции вывода и требуемого выпадающего экрана фильтра – user1234

0

Наконец-то я получил решение, поскольку я сказал вам, что я использую Yii, но я не создал модель с Gii, поэтому функция правил была пуста.

Я определил возвращаемый массив для этой функции, что делает поле удобным для поиска.

Код:

public function rules() 
    { 
     // NOTE: you should only define rules for those attributes that 
     // will receive user inputs. 
     return array(

       // The following rule is used by search(). 
       // Please remove those attributes that should not be searched. 
       array('OBJECT_TYPE', 'safe', 'on'=>'search'), 
     ); 

    } 

Спасибо всем за ваши ответы.