Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZF] Paginator a przyjazne linki
Forum PHP.pl > Forum > PHP > Frameworki
CzarnyGsm
Witam,

Od wielu dni męczę się z paginatorem. Stworzyłem do swojego serwisu system tagów a do niego przyjazne linki przykładowo: http://localhost/tag/nokia . W związku z tym, że pod dany tag możesz być przypisanych duża liczba artykułów postanowiłem dołączyć paginator. Niestety, ale przy przełączaniu strony na kolejną wyświetla się zawartość pierwszej strony.


  1. /* plik Bootstrap.php */
  2. $routeTag = new Zend_Controller_Router_Route_Regex(
  3. 'tag/(.+)',
  4. 'module' => 'default',
  5. 'controller' => 'tags',
  6. 'action' => 'index',
  7. 'page' => 1),
  8. 1 => 'tag',
  9. 2 => 'page'
  10. ),
  11. 'tag/%s/page/%s'
  12. );
  13.  
  14. $router-> ->addRoute('tag', $routeTag);

Jeżeli zmienię wyrażenie 'tag/(.+)' na 'tag/(.+)/page/(.+)' przechodzenie między stronami działa ok, ale niestety wymusza to aby linki wyglądały już w ten sposób: http://localhost/tag/nokia/page/1

Ma ktoś rozwiązanie na ten problem? Z góry dziękuję za pomoc.
IceManSpy
Nie jestem pewien, ale chyba w pasku adresu musi być numer strony, bo stamtąd jest pobierany offset. Chyba, ze coś pokombinujesz z AJAXem.
Psajkus
Jak nie podajesz numeru strony to domyślnie masz strone 1 (ustawiles to w 8 linijce);
CzarnyGsm
Gdy jestem przykładowo na stronie http://localhost/tag/nokia i klikam w odnośnik paginatora z następną stroną to paginator dobrze generuje link; http://localhost/tag/nokia/page/2 ). Niestety, ale mimo wszystko wyświetla się zawartość http://localhost/tag/nokia , chociaż odnośnik wskazuje na drugą podstronę wyników. W jaki sposób mogę ustawić roter, tak aby pierwsza strona zawsze wyświetlała się w formie http://localhost/tag/nokia , a każda następna http://localhost/tag/nokia/page/numer-strony i wskazywał naturalnie poprawną treść? Tak jak napisałem w pierwszym poście wszystko działa poprawnie gdy zmienię wyrażenie w linijce na 'tag/(.+)/page/(.+)', ale wtedy pod adresem http://localhost/tag/nazwa wskazuje błąd z naturalnych przyczyn. Z góry dziękuję za pomoc.
snapshot
Zobacz jakie dostajesz parametry przez $this->_getAllParams()
Sturmovik
CzarnyGsm, pokażę Ci przykład na bazie konfiguracji ini, ponieważ na co dzień tak pracuję. Myślę, że nie będzie problemu z utworzeniem tego w "tradycyjny sposób" smile.gif

Spróbuj tak:
application/configs/routes.ini
  1. r_index.type = "Zend_Controller_Router_Route_Regex"
  2. r_index.route = "tag/(\w+)[/page/]{0,}(\d+){0,}"
  3. r_index.defaults.module = "index"
  4. r_index.defaults.controller = "index"
  5. r_index.defaults.action = "index"
  6. r_index.defaults.page = 1
  7. r_index.map.1 = "tag"
  8. r_index.map.2 = "page"
  9. r_index.reverse = "tag/%s/page/%d"

Dla formalności:
application/Bootstrap.php
  1. protected function _initRouter()
  2. {
  3. $this->bootstrap('frontController');
  4. $router = $this->getResource('frontController')->getRouter();
  5.  
  6. if(APPLICATION_ENV == 'production')
  7. {
  8. $router->removeDefaultRoutes();
  9. }
  10.  
  11. $router->addConfig(new Zend_Config_Ini(APPLICATION_PATH . '/configs/routes.ini'));
  12. }

Taki router dla linku tag/nokia daje:
  1. 'tag' => 'nokia',
  2. 'module' => 'index',
  3. 'controller' => 'index',
  4. 'action' => 'index',
  5. 'page' => '1',
  6. )

Natomiast dla tag/nokia/page/23:
  1. 'tag' => 'nokia',
  2. 'page' => '23',
  3. 'module' => 'index',
  4. 'controller' => 'index',
  5. 'action' => 'index',
  6. )


Mam nadzieję, że to pomoże.

Pozdrawiam.
CzarnyGsm
~Sturmovik dzięki za pomoc. Twoje rozwiązanie działa jak należy. Pozdrawiam.
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.