Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [ZF] Zend_Controller_Router_... do przetworzenia zmiennej GET, ?_escaped_fragment_=
MattY
post 2.07.2012, 21:02:54
Post #1





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

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


Witam

Zaczynam i próbuję coś sobie pisać w ZF, mam kawałek aplikacji, w której dostęp do galerii następuje poprzez kliknięcie linków z #hashem - jQuery.
Aby strony galerii mogły być zaindeksowane przez googlebota potrzebne jest stworzenie statycznego kontrolera do ich wyświetlania. Linki w formacie base/#!gallery-1-13 stają się dla bota base/?_escaped_fragment_=gallery-1-13 - https://developers.google.com/webmasters/aj...tarted?hl=pl-PL

No i tu moje pytanie jak napisać regułę Routera która spowoduje wywołanie odpowiedniego kontrolera i akcji, czyli w moim przypadku:
Kod
?_escaped_fragment_=gallery-(\d+)-(\d+)

controller: gallery
action: foto
param1: 1
param2: 2

Proszę o wskazówki. Szukałem pod hasłami zend router GET ale ciężko coś znaleźć bo w angielskim mamy GET i get niestety tongue.gif

up

Ten post edytował MattY 30.06.2012, 21:14:30
Go to the top of the page
+Quote Post
irmidjusz
post 4.07.2012, 00:47:41
Post #2





Grupa: Zarejestrowani
Postów: 279
Pomógł: 60
Dołączył: 25.02.2012

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


Kolego, nie wiem, czy aby na pewno rozumiem o co Ci chodzi z tym routingiem, ale jeśli chcesz, aby adres:

www.mojastrona.pl/?_escaped_fragment_=gallery-1-13

był rozpoznawany jako wywołanie takie, jak przy standardowym routingu: /gallery/foto/param1/1/param2/13,
to można to zrobić w taki sposób:

w folderze library/App/Controller/Router/Route utwórz plik Googlebot.php i umieść w nim kod:

  1. /**
  2.  * Rozpoznaje urle googlebota do indeksowania stron ajaxowych.
  3.  */
  4. class App_Controller_Router_Route_Googlebot extends Zend_Controller_Router_Route_Regex
  5. {
  6. /**
  7. * @param Zend_Config $config
  8. * @return App_Controller_Router_Route_Googlebot
  9. */
  10. public static function getInstance(Zend_Config $config)
  11. {
  12. $defs = ($config->defaults instanceof Zend_Config) ? $config->defaults->toArray() : array();
  13. $map = ($config->map instanceof Zend_Config) ? $config->map->toArray() : array();
  14. $reverse = (isset($config->reverse)) ? $config->reverse : null;
  15. return new self($config->route, $defs, $map, $reverse);
  16. }
  17.  
  18. /**
  19. * @see Zend_Controller_Router_Route_Regex::match()
  20. * @param Zend_Controller_Request_Abstract $request
  21. * @return array|false
  22. */
  23. public function match($request)
  24. {
  25. if (!$request instanceof Zend_Controller_Request_Abstract) {
  26. return false;
  27. }
  28.  
  29. $path = $request->getParam('_escaped_fragment_');
  30. if (empty($path)) {
  31. return false;
  32. }
  33.  
  34. return parent::match($path);
  35. }
  36.  
  37. /**
  38. * @see Zend_Controller_Router_Route_Regex::getVersion()
  39. * @return integer
  40. */
  41. public function getVersion()
  42. {
  43. //musi być zwracane 2 aby do metody match() jako parametr przekazywało obiekt request
  44. return 2;
  45. }
  46. }


następnie do pliku konfiguracyjnego (standardowo application/configs/application.ini) dodaj:

Kod
resources.router.routes.foto.type = "App_Controller_Router_Route_Googlebot"
resources.router.routes.foto.route = "gallery-(\d+)-(\d+)"
resources.router.routes.foto.defaults.controller = "gallery"
resources.router.routes.foto.defaults.action = "foto"
resources.router.routes.foto.map.1 = "param1"
resources.router.routes.foto.map.2 = "param2"


Żeby ładowało automatycznie klasę App_Controller_Router_Route_Googlebot, dodaj też:

Kod
autoloadernamespaces[] = "App"


W każdym razie u mnie działa (sprawdziłem na szybko na projekcie, który mam na warsztacie), więc u Ciebie też powinno wink.gif


--------------------
there is much to be learned
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 23.07.2025 - 01:52