Автор Тема: Zend Pagination. Некорректный переход на следующую страницу  (Прочитано 1084 раз)

0 Пользователей и 1 Гость смотрят эту тему.

Оффлайн AnastasiaK

  • Участник форума
  • Сообщений: 6
  • Карма: 0
Всем здравствуйте!
Создала на zf2 сайт : http://upload.meteo.ru/
Сразу на главной странице выводится результат выборки всех элементов из базы данных. Данные разделяются на страницы, и при перелистывании не происходит никаких ошибок. Но когда произведен поиск, то при попытке перейти на следующую страницу с выбранными по поиску элементами сбрасывается поиск и переходит на выборку всех элементов. Очень надеюсь, что понятно объяснила. Подскажите куда копать и в чем проблема, я пыталась создавать сессии, но при запуске почему-то вообще тогда ошибка 500 появляется. Вот код:
Код контроллера:

    
public function indexAction()
    {
          
         
$view = new ViewModel();
         
$form $this->getServiceLocator()->get('MyForm');
         
$filterObj = new ViewModel(array('form'=>$form));
         
$filterObj->setTemplate('index/filter');
         
         
$searchList = array();
         if (isset(
$_POST["submit"]))
         {
         if((isset(
$_POST["section"]))) { $searchList["section"] = $_POST["section"];}
         if((isset(
$_POST["view_presentation"]))) { $searchList["view_presentation"] = $_POST["view_presentation"];}
         if((isset(
$_POST["access"]))) { $searchList["access"] = $_POST["access"];}}

         
$paginator $this->getBookTable()->getBooksearch(true,$searchList);

         
$paginator->setCurrentPageNumber((int) $this->params()->fromQuery('page'1));
         
$paginator->setItemCountPerPage(8);

         
         
$outputObj = new ViewModel(array(
         
'paginator' => $paginator,
         
'form'=>$form,
         ));
         
$outputObj->setTemplate('index/output');
         
         
$view->addChild($filterObj'filter');
         
$view->addChild($outputObj'output');

            return 
$view;
      

    }


Содержимое файла pagination.html

<?php if ($this->pageCount): ?>
   <div>
   <ul class="pagination">
   <!-- Previous page link -->
   <?php if (isset($this->previous)): ?>
   <li>
   <a href="<?php echo $this->url($this->route); ?>?page=<?php echo $this->previous?> ">
   <<
   </a>
   </li>
   <?php else: ?>
   <li class="disabled">
   <a href="#">
   <<
   </a>
   </li>
   <?php endif; ?>

   <!-- Numbered page links -->
   <?php foreach ($this->pagesInRange as $page): ?>
   <?php if ($page != $this->current): ?>
   <li>
   <a href="<?php echo $this->url($this->route);?>?page=<?php echo $page?>">
   <?php echo $page?>
   </a>
   </li>
   <?php else: ?>
   <li class="active">
   <a href="#"><?php echo $page?></a>
   </li>
   <?php endif; ?>
   <?php endforeach; ?>
   <!-- Next page link -->
   <?php if (isset($this->next)): ?>
   <li>
   <a href="<?php echo $this->url($this->route); ?>?page=<?php echo $this->next?>">
   >>
   </a>
   </li>
   <?php else: ?>
   <li class="disabled">
   <a href="#">
   >>
   </a>
   </li>
   <?php endif; ?>
   </ul>
   </div>
<?php endif; ?>

Оффлайн S.Voytovich

  • Литературная
  • Герой
  • *
  • Сообщений: 2992
  • Карма: 135
  • Любитель ZF-кубиков.
Можно увидеть ещё и как у вас создаётся Постраничник:
$paginator $this->getBookTable()->getBooksearch(true,$searchList);

Очень интересен код метода getBooksearch(true,$searchList)
РНР и ZF - это моё хобби, а не основная работа ;o)
Начал играть в кубики от Zend.

ZF-быстростарт

Оффлайн AnastasiaK

  • Участник форума
  • Сообщений: 6
  • Карма: 0
Можно увидеть ещё и как у вас создаётся Постраничник:
$paginator $this->getBookTable()->getBooksearch(true,$searchList);

Очень интересен код метода getBooksearch(true,$searchList)

Вот пожалуйста код

public function getBooksearch($paginated=false,$searchList)
     {
   
	
   if (
$paginated) {
	
	
 
$select = new Select('books');
	
	
 
$resultSetPrototype = new ResultSet();
	
	
 
$resultSetPrototype->setArrayObjectPrototype(new Book());
	
	
 
$paginatorAdapter = new DbSelect(
	
	
 
$select->where($searchList)->order('iid ASC'),
	
	
 
$this->tableGateway->getAdapter(),
	
	
 
$resultSetPrototype
	
	
 );
	
	
 
$paginator = new Paginator($paginatorAdapter);
	
	
 return 
$paginator;}
         
$rowset $this->tableGateway->select();
         return 
$rowset;
     }

Оффлайн S.Voytovich

  • Литературная
  • Герой
  • *
  • Сообщений: 2992
  • Карма: 135
  • Любитель ZF-кубиков.
Смею предположить что вся "магия" несопоставления страницы и запроса выборки осуществляется по проверке -
if (isset($_POST["submit"]))
Если я прав, то в Постарничник обязательно каждый раз передавать параметры запроса из адресной строки (GET), в которой нужно ОБЯЗАТЕЛЬНО указывать параметры отбора, сделанных первый раз по форме.

Как-то так.
РНР и ZF - это моё хобби, а не основная работа ;o)
Начал играть в кубики от Zend.

ZF-быстростарт

Оффлайн AnastasiaK

  • Участник форума
  • Сообщений: 6
  • Карма: 0
Смею предположить что вся "магия" несопоставления страницы и запроса выборки осуществляется по проверке -
if (isset($_POST["submit"]))
Если я прав, то в Постарничник обязательно каждый раз передавать параметры запроса из адресной строки (GET), в которой нужно ОБЯЗАТЕЛЬНО указывать параметры отбора, сделанных первый раз по форме.

Как-то так.

Ну я тоже так подозревала.
То есть вместо POST запроса использовать GET, правильно понимаю?
Я пробовала сохранять переменные в сессии, но безуспешно. При запуске сессии сайт вообще не работает.

Оффлайн S.Voytovich

  • Литературная
  • Герой
  • *
  • Сообщений: 2992
  • Карма: 135
  • Любитель ZF-кубиков.
вопрос не в том что POST или GET, вопрос в том, что Постраничник не передаёт в адресную строку параметры поиска и вышеуказанное действие не воспринимает такой запрос.
к тому же в переменной $searchList отсутствует параметр страницы, количества данных на старницу и так далее, то есть для SQL-параметра LIMIT
РНР и ZF - это моё хобби, а не основная работа ;o)
Начал играть в кубики от Zend.

ZF-быстростарт

Оффлайн Symeton

  • Участник форума
  • Сообщений: 4
  • Карма: 0
Смею предположить что вся "магия" несопоставления страницы и запроса выборки осуществляется по проверке -
if (isset($_POST["submit"]))
Если я прав, то в Постарничник обязательно каждый раз передавать параметры запроса из адресной строки (GET), в которой нужно ОБЯЗАТЕЛЬНО указывать параметры отбора, сделанных первый раз по форме.

Как-то так.

Ну я тоже так подозревала.
То есть вместо POST запроса использовать GET, правильно понимаю?
Я пробовала сохранять переменные в сессии, но безуспешно. При запуске сессии сайт вообще не работает.

Для начала да, стоит выбранные данные фильтров http://joxi.ru/gmv7ObnFxP1Bl2 записывать в адресную строку (использовать GET, а не POST), получится что-то вроде этого http://joxi.ru/YmENY9JuZOM9N2 . Только в значения(value) инпутов впишите их айди.
А дальше уже будете использовать эти GET параметры, подкорректируете/допишите пару методов и будет гуд =)