2010-08-31 3 views
0

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

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

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

$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

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

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

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

EDIT

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

+0

К сожалению, я застрял с использованием 1.0 (я начал проект несколько месяцев назад). Насколько я могу судить, CGridView нова к 1.1. Я думаю, что переопределить onBeginRequest() - мой лучший выбор. Где я должен разместить свой производный класс и как настроить конфигурационный файл, а не обычный класс приложения? –

+0

добавил пару ссылок на форум, которые должны помочь – thaddeusmt

+0

Наконец, вернемся к этому. Переопределение onBeginRequest() было безумно легким. Спасибо, что указал мне на ссылки. –

Смежные вопросы