Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [ZF] Paginator a przyjazne linki
CzarnyGsm
post
Post #1





Grupa: Zarejestrowani
Postów: 84
Pomógł: 2
Dołączył: 16.04.2007

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
IceManSpy
post
Post #2





Grupa: Zarejestrowani
Postów: 1 006
Pomógł: 111
Dołączył: 23.07.2010
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Nie jestem pewien, ale chyba w pasku adresu musi być numer strony, bo stamtąd jest pobierany offset. Chyba, ze coś pokombinujesz z AJAXem.
Go to the top of the page
+Quote Post
Psajkus
post
Post #3





Grupa: Zarejestrowani
Postów: 45
Pomógł: 5
Dołączył: 26.06.2011

Ostrzeżenie: (0%)
-----


Jak nie podajesz numeru strony to domyślnie masz strone 1 (ustawiles to w 8 linijce);
Go to the top of the page
+Quote Post
CzarnyGsm
post
Post #4





Grupa: Zarejestrowani
Postów: 84
Pomógł: 2
Dołączył: 16.04.2007

Ostrzeżenie: (0%)
-----


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.

Ten post edytował CzarnyGsm 19.11.2011, 22:24:39
Go to the top of the page
+Quote Post
snapshot
post
Post #5





Grupa: Zarejestrowani
Postów: 96
Pomógł: 6
Dołączył: 22.08.2007
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Zobacz jakie dostajesz parametry przez $this->_getAllParams()
Go to the top of the page
+Quote Post
Sturmovik
post
Post #6





Grupa: Zarejestrowani
Postów: 1
Pomógł: 1
Dołączył: 18.08.2011

Ostrzeżenie: (0%)
-----


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" (IMG:style_emoticons/default/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.
Go to the top of the page
+Quote Post
CzarnyGsm
post
Post #7





Grupa: Zarejestrowani
Postów: 84
Pomógł: 2
Dołączył: 16.04.2007

Ostrzeżenie: (0%)
-----


~Sturmovik dzięki za pomoc. Twoje rozwiązanie działa jak należy. Pozdrawiam.


Ten post edytował CzarnyGsm 23.11.2011, 20:34:16
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.12.2025 - 18:55