Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [CakePHP]problem z paginacją
Forum PHP.pl > Forum > PHP > Frameworki
Zeppelin
Hej,
Jak w temacie.. wszystko szło ładnie, pięknie, aż tu nagle pach! w adresie /jakis-kontroler/jakas-akcja/page:2, a danych brak.. na 100% te dane są do wyswietlenia, bo jak zwiększam limit to te rekordy pokazuja sie na pierwszej stronie :/ Spotkał się ktoś z Was z takim zjawiskiem?

Znalazlem byc moze powod, choc nadal nie wiem jak to "naprawic". Otoz jesli wylacze conditions z paginacji to wyswietla mi dobrze wszystkie strony, nie tylko pierwszą.. tylko bardzo dziwne jest to, ze warunki powinny byc dobre skoro dzialały wcześniej (np. przy zmniejszeniu lub wylaczeniu limitu)... Siedze nad tym i brak mi pomysłu, a jutro trzeba rano wstać :/

Z gory dzieki za pomoc
woj_tas
Kod by się przydał.
Zeppelin
No tak, oczywiscie sciana.gif

  1. $conditions = array();
  2.  
  3. $asc = $this->data['Ascendent']['asc'];
  4. $conditions['asc_id'] = $asc;
  5.  
  6. $sun = $this->data['Ascendent']['sun'];
  7. if ($sun == 1) {
  8. //1 = 'wszystkie'
  9. $conditions['NOT']['sun_id'] = $sun;
  10. } else
  11. //wybrany konkretny znak
  12. { $conditions['sun_id'] = $sun; }
  13.  
  14. $moon = $this->data['Ascendent']['moon'];
  15. if ($moon == 1) {
  16. $conditions['NOT']['moon_id'] = $moon;
  17. } else
  18. { $conditions['moon_id'] = $moon; }
  19.  
  20. $this->paginate = array(
  21. 'conditions' => $conditions,
  22. 'limit' => 2
  23. );
  24.  
  25. $bazapag = $this->paginate('Ascendent');
  26.  
  27. $this->set(compact('bazapag'));




Kurcze, siedzialem nad kupe godzin, przerabialem rozne tutoriale zagraniczne o paginacji i dupa, ciagle to samo.. Za kazdym razem jakby gubił warunki z tablicy $conditions dla strony 2, bo jak zrobilem debuga to wyswietla pusta tablice $conditions:
dla strony 1:
  1. (
  2. [asc_id] => 6
  3. [NOT] => Array
  4. (
  5. [sun_id] => 1
  6. [moon_id] => 1
  7. )
  8.  
  9. )
  10.  


i dla strony kolejnej:

  1. (
  2. [asc_id] =>
  3. [sun_id] =>
  4. [moon_id] =>
  5. )
  6.  


---------
edit:

Porobiłem bardzo dokładne testy i wniosek jest następujący:
Dane z formularza przekazywane sa do kontrolera, a z tamtad do widoku, ale TYLKO dla strony pierwszej, dla /kontroler/akcja/, natomiast dla /kontroler/akcja/page:2 (oraz pozostałych stron) NIE SĄ PRZEKAZYWANE i nie mam pojęcia dlaczego sciana.gif

jakieś sugestie? worriedsmiley.gif
woj_tas
hmm, to takie oczywiste, że aż nie wiem czy wszystko zrozumiałem blinksmiley.gif

Po kliknięciu w paginator gubisz warunki bo są one przekazywane tylko przez formularz.

$thi->data to dane wysłane postem, nie są one "zapamiętywane". Jeżeli chcesz je później "odtworzyć" na drugiej stronie musisz je przekazać do paginatora i pobierać je z geta a nie $this->data
Zeppelin
Cytat(woj_tas @ 5.08.2010, 10:30:19 ) *
hmm, to takie oczywiste, że aż nie wiem czy wszystko zrozumiałem blinksmiley.gif

Po kliknięciu w paginator gubisz warunki bo są one przekazywane tylko przez formularz.

$thi->data to dane wysłane postem, nie są one "zapamiętywane". Jeżeli chcesz je później "odtworzyć" na drugiej stronie musisz je przekazać do paginatora i pobierać je z geta a nie $this->data


Wow! To nie wystarczy przeslac danych z formularza do kontrolera? Strasznie dziwne, ze on to gubi.. Fajnie, ze napisałeś, tęskniłem za Twoimi radami smile.gif

Mimo wszystko nie rozumiem co powinienem zrobić..

Co to znaczy
Cytat
przekazać dane do paginatora

?

oraz:

Cytat
i pobierać je z geta a nie $this->data

Powinienem zmienic typ formularza na get i to wszystko? Nie wiem czy dobrze rozumiem.

------------
edit:
Skoro mam pobierac dane nie z $this->data to jak mam pobrac dane z formularza, do ktorych ma sie dostep poprzez $this->data ? Wybacz jesli pytanie jest lamerskie, przyznaje, ze nie jestem zaawansowany w te klocki kejkowe jeszcze..

Dzięki!
woj_tas
Cytat(Zeppelin @ 5.08.2010, 10:32:44 ) *
Wow! To nie wystarczy przeslac danych z formularza do kontrolera? Strasznie dziwne, ze on to gubi..


On "tego" nie gubi. Dane wysłane formularzem nie są widoczne po przejsciu na inną stronę. Kurde, ale to podstawy php, a nie cakephp.

$this->data to nic innego jak $_POST['data'];

Po wysłaniu formularza dane te odbierasz w $this->data. Po kliknięciu jednak w link .../page:2 tablica $_POST (this->data) jest pusta.

Masz dwie możliwości:

- Formularz wysłać metodą get i parametry odbierać w $this->params,
- formularz wysłać metodą POST, jednak zadziala ona tylko w przypadku pierwszej strony. W kolejnych stronach musisz i tak zastosowac pkt. 1

Zeppelin
Cytat(woj_tas @ 5.08.2010, 12:18:53 ) *
On "tego" nie gubi. Dane wysłane formularzem nie są widoczne po przejsciu na inną stronę. Kurde, ale to podstawy php, a nie cakephp.

$this->data to nic innego jak $_POST['data'];

Po wysłaniu formularza dane te odbierasz w $this->data. Po kliknięciu jednak w link .../page:2 tablica $_POST (this->data) jest pusta.

Masz dwie możliwości:

- Formularz wysłać metodą get i parametry odbierać w $this->params,
- formularz wysłać metodą POST, jednak zadziala ona tylko w przypadku pierwszej strony. W kolejnych stronach musisz i tak zastosowac pkt. 1


Znam roznice miedzy get i post, natomiast faktem jest, ze w "normalnym" php nie robilem nigdy paginacji i ogolnie dosc szybko przeszedlem z czystego php do cake'a.. W kazdym razie dzieki za wskazowki, "pomielę" temat w praktyce, przynajmniej mam juz jakis kierunek.
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.