2

特定の間隔で更新される 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 分後にフィルター ボックスに検索キーワードを再度入力する必要があります。

これは、グリッドを介してデータを閲覧する人にとって大きな障害となります。

誰かがこれの修正を知っていますか? 正しく機能させるにはどうすればよいか教えてください。試行錯誤で修正しようとしていますが、どこにも行きません。

前もって感謝します、

マックス

4

1 に答える 1