Yii2.0分页问题第二页不起作用

时间:2015-03-17 04:17:07

标签: yii2

如何进行分页?我有一个搜索表单和一个在日期范围内传递的搜索按钮。第一页工作成功,但是当我点击第二页时,它会显示所有内容。如何将日期范围传递到我的分页中?

修改 以下是我的ReportSearch.php(模型)

    $dataProvider = new ActiveDataProvider([
        'query' => $query,
        'pagination' => [
            'pageSize' => 5,
            //'params' => array('search' => 'true', 'from_dt'=>$stockmovement_summary_from_sales_date, 'to_dt'=> $stockmovement_summary_to_sales_date),
        ],
    ]);

    $dataProvider->setSort([
        'defaultOrder' => [
            'd_item.desc_e_tx' => SORT_ASC,
        ],
        'attributes' => [
            'd_item.desc_e_tx'
        ]
    ]);

    return $dataProvider;
}

以下是我的控制器:

$searchModel = new ReportSearch();
            $dataProvider = $searchModel->searchStockMovementSummary($stockmovement_summary_from_sales_date, $stockmovement_summary_to_sales_date);
            return $this->render('stockmovementreportsummary', [
                        'search' => 'true',
                        'dataProvider' => $dataProvider,
                        'from_dt' => $stockmovement_summary_from_sales_date,
                        'to_dt' => $stockmovement_summary_to_sales_date,
                        'model' => $searchModel,
            ]);

下面是我的index.php

$reports = $dataProvider->getModels();
    $i=1;

    echo "<table class='table table-striped table-bordered'>";
    echo "<tr><th>#</th><th>Item</th><th>Total Summary Usage Qty</th><th>Current Stock On Hand</th><th>Measurement</th></tr>";
    foreach ($reports as $report) {
        $item_key = $report['report_item_key'];
        $item_model = Item::find()->where(['item_key' =>$item_key])->one();
        $item_e_desc_tx = $item_model->desc_e_tx;
        $item_c_desc_tx = $item_model->desc_c_tx;
        $item_qty_no = $item_model->qty_no;
        $item_measurement_tx = $item_model->measurement;
        echo "<tr>";
        echo "<td>" . $i++ . "</td>";
        echo "<td>" . Html::a($item_key, array('stockmovementreportdetailbyitem', 'item_key' => $item_key, 'search' => 'true', 'from_dt' => $from_dt, 'to_dt'=>$to_dt)) . "<br>" . $item_e_desc_tx . "<br>" . $item_c_desc_tx ."</td>";
        echo "<td>" . $report['total_summary_usage_qty'] . "</td>";
        echo "<td>" . $item_qty_no . "</td>";
        echo "<td>" . $item_measurement_tx . "</td>";
        echo "</tr>";
    }
    echo "</table>";
    echo \yii\widgets\LinkPager::widget([
        'pagination'=>$dataProvider->pagination,     
    ]);

2 个答案:

答案 0 :(得分:0)

应该使用GridView,但我认为它不会有所帮助。您是否有机会使用POST而不是GET来过滤结果?如果您在createUrl函数中查看https://github.com/yiisoft/yii2/blob/master/framework/data/Pagination.php#L257,您将看到它使用getQueryParams http://www.yiiframework.com/doc-2.0/yii-web-request.html#getQueryParams()来创建查询字符串。如果你使用POST,那么这个函数将不会正确地获取params,因此下一页的分页将失败。

好的,因为你实际上使用的是POST,所以你必须创建自己的分页功能,并将其考虑在内。或者只是使用GET。您没有对DB执行任何操作,您可以安全地使用GET。这对每个人都有好处。

答案 1 :(得分:0)

您必须编辑动作中的代码。 阅读this documentation

并修改$dataProvider->pagination