Открыть определенную страницу сетки по идентификатору записи в yii1

Я работаю с yii1,

У меня есть многостраничный список записей, который отображается с помощью CGridViewотсортировано определенным образом.

я имею id записи. И я хочу открыть страницу, на которой отображается эта запись с этим точным идентификатором.

Грубо говоря, ссылка /list?too=123 открывает 12-ю страницу сетки, и среди всех записей на этой странице есть запись с id 123.

Какой самый простой способ сделать это?

2 ответа

Вы можете расширить 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;
        }
    }
}}

Мой способ сделать это

  • Введите код, чтобы получить номер страницы из идентификатора элемента. В этом случае действие контроллера вычислит, какую страницу нужно загрузить, используя существующий / отдельный поиск.
  • Передайте этот номер страницы в файле представления, куда загружается сетка.
  • Если этот специальный номер страницы пропущен, просто загрузите эту страницу при прохождении $model->search() к CGridView,

Надеюсь, поможет.

Другие вопросы по тегам