Как включить CJuiAutoComplete в фильтр CGridView? - PullRequest
0 голосов
/ 01 апреля 2011

У меня есть сетка, которая отображает содержимое таблицы, таблица имеет столбец author_id.

Теперь я отображаю имена пользователей, используя синтаксис столбца имени отношения author.username.

Можно ли разрешить пользователю вводить имя пользователя в фильтре столбцов, с поддержкой CJuiAutoComplete, некоторые примеры подсказок?

Мой пример кода:

<?php $this->widget('zii.widgets.grid.CGridView', array(
    'dataProvider'=>$model->with('author')->search(),
    'filter'=>$model,
    'columns'=>array(
        // ...
        array(
            'name'=>'author.username',
            'filter'=> // ?
        ),
        // ...
    ),
));

1 Ответ

3 голосов
/ 06 апреля 2011

Виджет имеет третий параметр, который может быть установлен в значение true, что означает, что он будет возвращать строку и не будет отображать виджет CJuiAutoComplete.

widget('zii.widgets.grid.CGridView', array(
    'dataProvider'=>$model->with('author')->search(),
    'filter'=>$model,
    'columns'=>array(
        // ...
        array(
            'name'=>'author.username',
            'filter'=> $this->widget('zii.widgets.jui.CJuiAutoComplete', $array_params, true),

        ),
        // ...
    ),
));

и $ array_params можно заменить на аналогичные, например, как:


          array(
            'name'=>'author_username',
            //'model'=>$model,
            'attribute'=>'city_eve',
            'sourceUrl'=>"/controller/action/",
            'options'=>array(
                'minLength'=>'2',
            ),
            'htmlOptions'=>array(
                'size'=>'36'
            ),
        )

а также вы должны ввести в метод поиска модели несколько проверок:


if($request->getQuery("author_username")){
            $criteria->addCondition(author.username=:author_username");
            $criteria->params[':author_username'] = $request->getQuery("author_username");
        }

...