Symfony: нумерация страниц + сортировка? - PullRequest
1 голос
/ 28 июля 2011

Нумерация страниц в Symfony довольно проста и довольно хороша. Однако я ищу лучшее направление для добавления в сортировку к таблице.

Я думаю, что столбец сортировки, направление и номер текущей страницы определены в URI, например:

http://www.mysite.com/backend_dev.php/articles/author/asc/3/

И затем на каждой странице Symfony использует uri для определения текущего столбца сортировки, направления и страницы, а затем манипулирует всеми ссылками на нумерацию страниц, чтобы учесть эти вещи, чтобы при нажатии на ссылку изменить страницы или отсортировать по другой столбец, который доставит вас в нужное место.

У кого-нибудь есть другие направления, по которым я мог бы пойти с этим? Я знаю о простоте плагина jSuery для TableSorter, но он отстой, когда есть более 1000 записей, потому что вам нужно загрузить их все сразу, чтобы этот плагин работал.

1 Ответ

0 голосов
/ 29 июля 2011

Администратор генератора имеет интересный подход.Он получает сортировку по URI, как показано ниже.

/backend_dev.php/pedidos?sort=status&sort_direction=asc

Чтобы не переносить эти параметры получения по ссылкам (это сложно сделать), он хранится в сеансе пользователя.Давайте посмотрим на пример.В действии у вас будет

  public function executeIndex(sfWebRequest $request)
  {
    // sorting
    if ($request->getParameter('sort') && $this->isValidSortColumn($request->getParameter('sort')))
    {
      $this->setSort(array($request->getParameter('sort'), $request->getParameter('sort_type')));
    }

    // pager
    if ($request->getParameter('page'))
    {
      $this->setPage($request->getParameter('page'));
    }

    $this->pager = $this->getPager();
    $this->sort = $this->getSort();
  }    

//// more code


  protected function setPage($page)
  {
    $this->getUser()->setAttribute('ef3Pedido.page', $page, 'admin_module');
  }

  protected function getPage()
  {
    return $this->getUser()->getAttribute('ef3Pedido.page', 1, 'admin_module');
  }

  protected function getSort()
  {
    if (null !== $sort = $this->getUser()->getAttribute('ef3Pedido.sort', null, 'admin_module'))
    {
      return $sort;
    }

    $this->setSort($this->configuration->getDefaultSort());

    return $this->getUser()->getAttribute('ef3Pedido.sort', null, 'admin_module');
  }

  protected function setSort(array $sort)
  {
    if (null !== $sort[0] && null === $sort[1])
    {
      $sort[1] = 'asc';
    }

    $this->getUser()->setAttribute('ef3Pedido.sort', $sort, 'admin_module');
  }

  protected function isValidSortColumn($column)
  {
    return Doctrine::getTable('Pedido')->hasColumn($column);
  }

Это хороший подход как для конечного пользователя, так и для разработчика.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...