Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [CakePHP] Modyfikacja odnośnika w paginatorze
Forum PHP.pl > Forum > PHP > Frameworki
php22
W jaki sposób zmodyfikować linki generowane przez paginator?
Myślę ż można by to zrobić w pliku /cake/libs/view/helpers/paginaor.php ale moje próby nie przynoszą rezultatu..
Jak dodać do linku o postaci cokolwiek żeby wyglądał tak:
oryginalny link (wygenerowany):
mojastrona.pl/costam/layout/100/page:5
po modyfikcji:
(tutaj zmiana).pl/(lub tutaj zmiana)/layout/100/page:5

erix
Z tego, co wiem, to łatwo się tego nie da, niestety, zrobić...

Paginacja w Cake'u, to jeden z wrzodów na tyłku, jeśli chodzi o dostosowywanie wg własnych potrzeb (jeśli chodzi o schemat linków). IMO pozostaje tylko ob_start przed wysłaniem paginacji do widoku i zamiana parametrów we własnej klasie routingu.
kicaj
  1. Router::connect('/:language/'. __('wydarzenia', true) .'/:year', array(
  2. 'controller' => 'events',
  3. 'action' => 'index'), array(
  4. 'language' => '[a-z]{2}',
  5. 'year' => '[1-2]{1}[0-9]{3}'));

Może powyższy kod pomoże.
Możesz używać dowolnych zmiennych, jednakże musisz je zdeklarować (chociażby wyrażeniem regularnym jak wyżej) w trzecim argumencie metody.
kleus
Paginacja w caku nie lezy i nie kwiczy i mozna ladne url szybko zrobic
  1. //Router.php
  2. Router::connect('/admin/:controller/:sort,:direction',
  3. 'controller' => 'pages',
  4. 'action' => 'index',
  5. 'admin' => true,
  6. 'prefix' => 'admin',
  7. 'plugin' => false
  8. ),
  9. 'pass' => array(
  10. 'sort',
  11. 'direction'
  12. ),
  13. 'sort',
  14. 'direction'
  15. )
  16. );
  17.  
  18. //Controller
  19. public function beforeFilter(){
  20. if(isset($this->params['prefix']) && $this->params['prefix'] === 'admin'){
  21. $this->helpers[] = 'Tinymce';
  22. }
  23. $this->__paginateParams();
  24. }
  25. protected function __paginateParams(){
  26. if(isset($this->request->params['pass']['page'])){
  27. $this->request->params['named']['page'] = $this->request->params['page'];
  28. }
  29. if(isset($this->request->params['sort'])){
  30. $this->request->params['named']['sort'] = $this->request->params['sort'];
  31. }
  32. if(isset($this->request->params['direction'])){
  33. $this->request->params['named']['direction'] = $this->request->params['direction'];
  34. }
  35. if(isset($this->request->params['pass']['limit'])){
  36. $this->request->params['named']['limit'] = $this->request->params['limit'];
  37. }
  38. }
  39. /// VIEW moze byc wygenerowany przez CakePHP
  40.  
  41.  
erix
Cytat
Paginacja w caku nie lezy i nie kwiczy i mozna ladne url szybko zrobic

Jeśli to nazywasz "szybko zrobić", to cóż. tongue.gif

Poza tym, nie widzę tu nigdzie, abyś zmienił schemat generowania linków przez PaginatorHelper.
kleus
Tak nazywam to szybko.
z podanego przykładu wrzucasz funkcje do AppController.php i reszta controllerów też zaczyna z tego korzystać.
To samo tyczy się Routingu, każdy controller bedzie korzystał z niego.
erix
Ja wiem, że do AppController, ale w jaki sposób chcesz zmusić PaginatorHelper do generowania linków wg nowego schematu?
kleus
Cytat(php22 @ 18.09.2012, 08:10:21 ) *
W jaki sposób zmodyfikować linki generowane przez paginator?
Myślę ż można by to zrobić w pliku /cake/libs/view/helpers/paginaor.php ale moje próby nie przynoszą rezultatu..
Jak dodać do linku o postaci cokolwiek żeby wyglądał tak:
oryginalny link (wygenerowany):
mojastrona.pl/costam/layout/100/page:5
po modyfikcji:
(tutaj zmiana).pl/(lub tutaj zmiana)/layout/100/page:5


Jeżeli chcesz już modyfikować domyślny Helper to radze napisać własny Helper dziedziczący po tym Helperze dla przykładu podaje link do zmodyfikowanego Helpera
https://github.com/slywalker/TwitterBootstr...natorHelper.php

Dodatkowo jeżeli chcesz wstawić po nazwie domeny jakiś parametr przed paginacją myśle, że można to zrobic przez
  1. $this->Paginator->options()
lub
  1. $this->Paginator->params()


Cytat(erix @ 19.09.2012, 14:17:29 ) *
Ja wiem, że do AppController, ale w jaki sposób chcesz zmusić PaginatorHelper do generowania linków wg nowego schematu?


Można do routera dodać parametr
  1. Router::connect('/:param/:controller/:sort,:direction',
  2. 'controller' => 'pages',
  3. 'action' => 'index',
  4. 'plugin' => false
  5. ),
  6. 'pass' => array(
  7. 'sort',
  8. 'direction',
  9. 'param'
  10. ),
  11. 'sort',
  12. 'direction'
  13. )
  14. );
erix
Tak, ja to rozumiem, tylko czy wtedy PaginatorHelper również generuje odpowiednie linki w widoku?
kleus
no nie zrobi tego faktycznie, ale gdzieś kiedyś widziałem rozwiązanie tego... jak dalej potrzebne to moge poszukac...

tak w pluginie i18n napisanem przez cakedc jest cos takiego
  1. class AppHelper extends Helper {
  2.  
  3. public function url($url = null, $full = false) {
  4. if (is_array($url) && !array_key_exists('lang', $url)) {
  5. $url['lang'] = Configure::read('Config.language');
  6. }
  7. return parent::url($url, $full);
  8. }
  9. }

można pzerobić i po sprawie
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.