у меня есть CGridview, который обновляется с определенным интервалом. Сортировка, фильтрация и нумерация страниц выполняются с помощью ajax и отлично работают. Проблема в том, что $.fn.yiiGridView.update обновляет сетку с определенным интервалом, из-за чего свойства filter, sort, pagination сбрасываются до нуля, и сетка отображает 1-ю страницу при каждом обновлении.
Это рассматриваемое представление, _productDataGrid.php
<?php
$this->widget('bootstrap.widgets.TbGridView', array(
'id' => 'realtime-gridAMZ',
'itemsCssClass' => 'table table-dark table-striped ',
'htmlOptions' => array(
'class' => 'product-datagrid',
),
'dataProvider' => $model->search(),
'filter' => $model,
'ajaxUpdate' => 'realtime-gridAMZ',
'ajaxUrl' => Yii::app()->createUrl('realTime/AjaxUpdate'),
'pager' => array(
'header' => '',
'cssFile' => false,
'maxButtonCount' => 10,
'selectedPageCssClass' => 'active',
'hiddenPageCssClass' => 'disabled',
'firstPageCssClass' => 'previous',
'lastPageCssClass' => 'next',
'firstPageLabel' => '<<',
'lastPageLabel' => '>>',
'prevPageLabel' => '<',
'nextPageLabel' => '>',
),
'summaryCssClass' => 'label label-warning',
'columns' => array(
'id',
'name',
'category',
'price'
'rating'
),
));
?>
Вот основное представление index.php, которое изначально отображает сетку при загрузке страницы.
<div class="box span12" onTablet="span6" onDesktop="span12">
<div class="box-header">
<h2><i class="icon-list"></i><span class="break"></span>AMZ</h2>
<div class="box-icon">
<a href="#" class="btn-minimize"><i class="icon-chevron-up"></i></a>
<a href="#" class="btn-close"><i class="icon-remove"></i></a>
</div>
</div>
<div class="box-content">
<?php
$this->renderPartial('//realTime/_productDataGrid', array(
'model' => new RealTime(),
));
?>
</div>
</div><!--/span-->
</div>
<?php
$baseUrl = Yii::app()->baseUrl;
$cs = Yii::app()->getClientScript();
$cs->registerScriptFile($baseUrl . '/js/ajaxProductDataUpdate.js');
?>
Это файл jquery, который устанавливает таймер и вызывает функцию обновления сетки. ajaxProductDataUpdate.js
function updateAMZGrid() {
$.fn.yiiGridView.update('realtime-gridAMZ', {
data: $(this).serialize()
});
return false;
}
$(document).ready(function() {
setInterval(updateAMZGrid, 60000);
});
И, наконец, это actionAjaxUpdate в RealTimeController, отвечающий за рендеринг ajax.
public function actionAjaxUpdate() {
$dataProvider = new RealTime();
$dataProvider->unsetAttributes();
if (isset($_GET['RealTime']))
$dataProvider->attributes = $_GET['RealTime'];
$this->renderPartial('_producDataGrid', array(
'model' => $dataProvider,
));
}
Теперь, как я уже упоминал выше, все функции работают как надо. Но свойство filter, sort, paging сбрасывается при каждом вызове yiiGridViewUpdate. Так, например, если пользователь в данный момент просматривает 24-ю страницу таблицы, через 1 минуту сетка будет обновлена, и он будет перенаправлен на первую страницу таблицы или страницу 1.
То же самое с фильтром, предположим, что пользователь вводит ключевое слово для поиска и просматривает результат, снова через 1 минуту он увидит первую страницу или страницу 1 таблицы, а результат фильтра исчезнет. Таким образом, ему снова придется вводить ключевое слово для поиска в поле фильтра через 1 мин.
Теперь это большое препятствие для любого, кто просматривает данные через сетку.
Кто-нибудь знает, как исправить это? Подскажите, пожалуйста, что мне сделать, чтобы все работало правильно. Я пытаюсь исправить это методом проб и ошибок, но у меня ничего не получается.
Заранее спасибо,
Макс