通过yii1中记录的id打开一个特定的网格页面

时间:2017-04-10 16:31:34

标签: php yii cgridview

我与yii1合作。

我有一个多页记录列表,使用CGridView显示,以某种方式排序。

我有id的记录。我想打开显示具有此确切ID的记录的页面。

粗略地说,链接/list?too=123打开网格的第12页,在此页面的所有记录中都有一个id 123的条目。

最简单的方法是什么?

2 个答案:

答案 0 :(得分:1)

您可以扩展CGridView并将自己的方法编写到搜索页面。

<强> MyGridView.php

<?php
Yii::import('zii.widgets.grid.CGridView');
class MyGridView extends CGridView {

public function init()
{
    if (!isset($_GET[$this->dataProvider->getPagination()->pageVar]) && isset($_GET['too']))
        $this->searchPage();
    parent::init();
}

public function searchPage(){
    $baseCriteria=$this->dataProvider->getCriteria();
    $criteria=clone $this->dataProvider->getCriteria();

    if(($sort=$this->dataProvider->getSort())!==false)
    {
        // set model criteria so that CSort can use its table alias setting
        if($baseCriteria!==null)
        {
            $c=clone $baseCriteria;
            $c->mergeWith($criteria);
            $this->dataProvider->model->setDbCriteria($c);
        }
        else
            $this->dataProvider->model->setDbCriteria($criteria);
        $sort->applyOrder($criteria);
    }

    $this->dataProvider->model->setDbCriteria($baseCriteria!==null ? clone $baseCriteria : null);
    $data=$this->dataProvider->model->findAll($criteria);

    $position = 0;
    foreach($data as $model) {
        $position++;
        if ($model->uid == $_GET['too']) {
            $curPage = ceil($position /  $this->dataProvider->getPagination()->pageSize);
            $_GET[$this->dataProvider->getPagination()->pageVar] = $curPage;
        }
    }
}}

答案 1 :(得分:0)

我这样做 -

  • 编写代码以从项目ID中获取页码。在这种情况下,控制器操作将使用现有/单独搜索来计算需要加载的页面。
  • 在视图文件中传递此页码,网格将被加载。
  • 如果传递此特殊页码,则只需在将$model->search()传递给CGridView时加载该页面。

希望它有所帮助。