Вопрос

Я настроил страницу, на которой отображаются журналы сервера, и добавил форму фильтра, чтобы можно было фильтровать журналы по конкретным действиям, датам и т. д.Кажется, я не могу понять, как использовать 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;
}

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

Это было полезно?

Решение

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

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

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

РЕДАКТИРОВАТЬ

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top