Сочетание формы и CPagination в Yii - PullRequest
0 голосов
/ 01 сентября 2010

Я настроил страницу, которая отображает журналы сервера, и добавил форму фильтра, чтобы я мог фильтровать журналы по определенным действиям, датам и т. Д. Я не могу понять, как использовать CPagination для разделениярезультаты на страницах, однако.Если я добавлю виджет CPagination, когда из виджета будет выбрана страница, форма фильтра не будет отправлена ​​повторно, и результаты моего фильтра будут утеряны.

Я не могу найти простое решение для поддержкимои данные формы фильтра с виджетом CPagination.Любые предложения были бы хорошими.

Обновление
У меня есть эта функция, но я должен был установить состояние сеанса, чтобы сохранить данные формы.

$filter=false;
$form=new LogFilterForm;
if(isset($_POST['LogFilterForm'])){
    $form->attributes=$_POST['LogFilterForm'];
    Yii::app()->user->setState('filter',$form);
    $filter=true;
}
else if(Yii::app()->user->hasState('filter')){
    $form=Yii::app()->user->getState('filter');
    $filter=true;
}

Есть идеи, как очистить состояние сеанса при переходе на другую страницу?

1 Ответ

1 голос
/ 01 сентября 2010

Если бы вы использовали CGridView , было бы легко добавить фильтры с подкачкой - он встроен. Просто посмотрите на представление admin.php, отображаемое инструментом Gii crud (или, возможно, демо-версию блога) , Возможно, вы не хотите отображать журналы в виде таблицы.

Вместо установки переменных сеанса вы можете сделать форму с сохранением состояния и сохранить предыдущее состояние с помощью setPageState (). Я не знаю, отправляет ли пагинация форму, хотя ... возможно, вам придется привязать событие jQuery, чтобы отправить форму при нажатии на ссылки пагинации. Это было бы ужасно, если бы тебе пришлось это сделать.

Что касается очистки переменных состояния сеанса, моя единственная идея сейчас состоит в том, чтобы переопределить onBeginRequest () или что-то, чтобы проверить, находится ли пользователь на странице поиска, и если они не , тогда очистите переменная сеанса. Вы также можете просто оставить его - установить короткий срок годности и забыть об этом. Или сохранить его в своей базе данных вместо сеанса? : P

EDIT

Если вы идете по пути переопределения onBeginRequest (), это выглядит так же просто, как объявление обратного вызова в файле конфигурации. Больше информации здесь на форумах Yii , и здесь тоже . Хотя я никогда не делал это сам. Удачи!

...