Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Kohana] Paginacja
Forum PHP.pl > Forum > PHP > Frameworki
wiciu010
Chcę zrobić wyszukiwarkę ofert na stronie. Próbuję zaimplementować wbudowany mechanizm paginacji.
Znajduje poprawnie wyniki, ale jak przechodzę na kolejną stronę to znajduje mi wszystkie wyniki a nie tylko wyfiltrowane.

Odpowiednie wywołanie metody (sprawdza czy przesłano formularz):

  1. if(!isset ($_POST['formularz_szukaj']))
  2. $this->_showAll();
  3. else
  4. $this->_search();


Problem tkwi w tym, że _showAll() wyszukuje wszystkie oferty, a _search() wg przesłanego formularza. Fragment tej metody:

  1. if(!empty ($_POST['nazwa_obiektu']))
  2. $sql .= 'AND nazwa_obiektu LIKE \'%'.$_POST['nazwa_obiektu'].'\'% ';
  3.  
  4. if(isset ($_POST['rodzaj']) and $_POST['rodzaj'] > 0)
  5. $sql .= 'AND type_id = '.$_POST['rodzaj'].' ';
  6.  
  7. if(!empty ($_POST['miasto']))
  8. $sql .= 'AND miasto LIKE \''.$_POST['miasto'].'\' ';
  9.  
  10. if(!empty ($_POST['wojewodztwo']) and !is_numeric($_POST['wojewodztwo']))
  11. {
  12. $woj = ORM::factory ('state')->where('state', '=', $_POST['wojewodztwo'])->limit('1')->find();
  13. $sql .= 'AND state_id = '.$woj->id.' ';
  14. }
  15. elseif(isset ($_POST['wojewodztwo']) and $_POST['wojewodztwo'] > 0)
  16. $sql .= 'AND state_id = '.$_POST['wojewodztwo'].' ';
  17.  
  18. if(!empty ($_POST['max_gosci']))
  19. $sql .= 'AND ile_gosci <= '.$_POST['max_gosci'].' ';
  20.  
  21. if(!empty ($_POST['max_noclegi']))
  22. $sql .= 'AND ile_miejsc <= '.$_POST['max_noclegi'].' ';
  23.  
  24. if(!empty ($_POST['udogodnienia_obiekt']))
  25. foreach ($_POST['udogodnienia_obiekt'] as $value)
  26. $sql .= " AND udogodnienia_obiekt LIKE '%".$value."%'";


Jak najlepiej zrobić, żeby po przejściu na kolejną stronę wyników było zapamiętane co ma być filtrowane? Za każdym razem po wysłaniu formularza zapisywać warunki do sesji? Tylko, że w takim razie klasa Pagination, wcale nie wydaje się być dużym ułatwieniem.
matino
Nie wiem czy dobrze zrozumiałem, ale jeśli dane filtrujesz przez POST a nie JS, to wystarczy zamienić POST na GET i kłopot z głowy.

Jeśli korzystasz z JS, to pozostaje AJAX i sesja. Wtedy w zapytaniu do bazy sprawdzasz czy istnieje $_SESSION['...'].
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.