Проблемы с разбиением на страницы sfDoctrinePager - PullRequest
0 голосов
/ 28 февраля 2012

Я использую sfDoctrinePager в моем модуле. Я ищу таблицу по одному или нескольким критериям. Первый раз отображаемый результат верен, но после этого, если я нажму на страницу 2 или более, она снова выдаст мне весь набор результатов, и мой набор результатов поиска будет потерян.

Я впервые сталкиваюсь с этой проблемой, хотя давно использую sfDoctrinePager.

Я получаю этот массив из формы поиска

(
    [field_type] => log_type
    [field_value] => ABC
    [is_active] => on
)

Я отправляю эту переменную массива в мою модель:

$getQuery = $objMgr->getSearchQuery($request->getPostParameters());

** Запрос, который выполняется в модели:

public function getSearchQuery($arrSearchValues)
{
  $q = Doctrine_Query::create()
          ->select('u.*')
          ->from('SomsConfigValues u');
          ->where('u.deleted_at IS NULL');

  if(isset($arrSearchValues['is_active']) && $arrSearchValues['is_active'] == 'on'){
    $q->where('u.is_active = ?', 1);
  }      
  if(isset($arrSearchValues['field_type']) && $arrSearchValues['field_type'] != ""){
    $revertChg = ucwords(str_replace("_", " ", $arrSearchValues['field_type']));
    $q->andWhere('u.field_type = ?', $revertChg);
  }
  if(isset($arrSearchValues['field_value']) && $arrSearchValues['field_value'] != ''){
    $q->andWhere('u.field_type = ?', $arrSearchValues['field_value']);
  }
  return $q;
}

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

Мое действие:

public function executeIndex(sfWebRequest $request)
{
$objMgr = AdminFactory::adminObject();
$getQuerys = $objMgr->getSearchQuery($request->getPostParameters());

$this->config_values = $getQuerys;     
$this->pager = new sfDoctrinePager('configValues',     sfConfig::get('app_max_row_display'));    
$this->pager->setQuery($this->config_values);
$this->pager->setPage($request->getParameter('page', 1));
$this->pager->init();
}

Шаблон, где я использую эту нумерацию страниц:

<div class="grid_footer">
        <div style="padding:5px;">
          <?php if(count($pager->getLinks())) : ?>
          <div class="tableControl">
            <div class="pagination_inner">
              <?php if(!$pager->isFirstPage()){ ?>
                <?php echo link_to1(image_tag('/images/first.png'), 'configValues/index?page='.$pager->getFirstPage()) ?>
                <?php echo link_to1(image_tag('/images/previous.png'), 'configValues/index?page='.$pager->getPreviousPage()) ?>
              <?php } ?>
              <div class="numbers">
                <?php if ($pager->haveToPaginate()): ?>
                  <?php $links = $pager->getLinks(); foreach ($links as $page): ?>
                    <?php echo ($page == $pager->getPage()) ? $page : link_to($page, 'configValues/index?page='.$page) ?>
                  <?php endforeach ?>
                <?php endif ?>
              </div>
              <?php if(!$pager->isLastPage()){    ?>
                <?php echo link_to1(image_tag('/images/next.png'), 'configValues/index?page='.$pager->getNextPage()) ?>
                <?php echo link_to1(image_tag('/images/last.png'), 'configValues/index?page='.$pager->getLastPage()) ?>
              <?php  } ?>
            </div>
          </div>
          <?php echo $pager->getNbResults() ?> results (page <?php echo $pager->getPage(); ?>/<?php echo count($pager->getLinks()); ?>)
          <?php endif; ?>
        </div>
      </div>

1 Ответ

0 голосов
/ 27 марта 2012

У меня была точно такая же проблема. Единственный способ обойти это, как вы сказали, - сохранить запрос. Вместо использования сеанса создайте атрибут для пользователя, чтобы сохранить его.

в классе действия поместите что-то вроде ...

$this->getUser()->setAttribute('searchQuery', $getQuery);

Это значение сохраняется в течение сеанса, поэтому вы можете получить его, например, с помощью

$storedQuery = $this->getUser()->getAttribute('searchQuery');

Вы можете просматривать атрибуты пользователя через элемент конфигурации на панели инструментов dev.

...