特定の間隔で更新される CGridview があります。並べ替え、フィルタリング、ページネーションはすべて ajax によって行われ、うまく機能しています。問題は、$.fn.yiiGridView.update が特定の間隔でグリッドを更新していることです。これにより、フィルター、並べ替え、ページネーション プロパティが null にリセットされ、グリッドは更新のたびに最初のページを表示します。
これが問題のビュー、_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);
});
そして最後に、ajax レンダリングを担当する RealTimeController の actionAjaxUpdate です。
public function actionAjaxUpdate() {
$dataProvider = new RealTime();
$dataProvider->unsetAttributes();
if (isset($_GET['RealTime']))
$dataProvider->attributes = $_GET['RealTime'];
$this->renderPartial('_producDataGrid', array(
'model' => $dataProvider,
));
}
さて、上記のように、すべての機能が希望どおりに機能しています。しかし、フィルタ、ソート、ページング プロパティは、yiiGridViewUpdate を呼び出すたびにリセットされます。たとえば、ユーザーが現在テーブルの 24 ページを表示している場合、1 分後にグリッドが更新され、テーブルのフロント ページまたはページ 1 にリダイレクトされます。
フィルターについても同じことが言えます。ユーザーが検索キーワードを入力し、結果を表示しているとします。1 分後、表の最初のページまたはページ 1 が表示され、フィルター結果が表示されなくなります。したがって、1 分後にフィルター ボックスに検索キーワードを再度入力する必要があります。
これは、グリッドを介してデータを閲覧する人にとって大きな障害となります。
誰かがこれの修正を知っていますか? 正しく機能させるにはどうすればよいか教えてください。試行錯誤で修正しようとしていますが、どこにも行きません。
前もって感謝します、
マックス