Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZF] Ustawienie linku seo na router typu regrex
Forum PHP.pl > Forum > PHP > Frameworki
CzarnyGsm
Witam,

Czy ktoś z forumowiczów orientuje się jak można ustawić statycznie link SEO http://localhost/Nokia na adres typu Regrex np. http://localhost/marka/Nokia .
W .htaccess taka sytuacja wyglądałaby tak:
  1. RewriteRule ^marka/(.+)$ phones/view-brand/name_brand/$1
  2. RewriteRule ^Nokia$ marka/Nokia


Sprawa nie byłaby taka skomplikowana, ale gdy mam ustawiony Router w ten sposób:
  1. brand.type = "Zend_Controller_Router_Route_Regex"
  2. brand.route = "(\w+)[/page/]{0,}(\d+){0,}"
  3. brand.defaults.module = "default"
  4. brand.defaults.controller = "phones"
  5. brand.defaults.action = "view-brand"
  6. brand.defaults.page = 1
  7. brand.map.1 = "name_brand"
  8. brand.map.2 = "page"
  9. brand.reverse = "%s/page/%d"

adresy producentów działają ok np. http://localhost/Nokia, ale wtedy przykładowo nie działają mi inne działy (z przyczyn wiadomych) np. http://localhost/aktualnosci
  1. archive.type = "Zend_Controller_Router_Route_Regex"
  2. archive.route = "aktualnosci/[/page/]{0,}(\d+){0,}"
  3. archive.defaults.module = "default"
  4. archive.defaults.controller = "articles"
  5. archive.defaults.action = "view-archive-articles"
  6. archive.defaults.page = 1
  7. archive.map.1 = "page"
  8. archive.reverse = "aktualnosci/page/%d"

Wyrzuca parametry:
  1. 'name_brand' => 'aktualnosci',
  2. 'module' => 'default',
  3. 'controller' => 'phones',
  4. 'action' => 'view-brand',
  5. 'page' => '1',
  6. )


Byłbym bardzo wdzięczny za pomoc. W dokumentacji http://framework.zend.com/manual/en/zend.c...ler.router.html nie znalazłem rozwiązania.
Pilsener
Bo link /aktualnosci pasuje do wzoru /Nokia /Siemens etc.

Musisz zmienić kolejność routerów (zamieniając je miejscami w pliku .ini jeśli tam je definiujesz) tak, aby najpierw szukał dopasowania do "aktualności" a potem reszty. Podobnie zresztą robi się w .htaccess - kolejność reguł ma podstawowe znaczenie.
CzarnyGsm
Dzięki za wskazówkę. Akurat miałem kolejność taką jak napisałeś. Odwróciłem je, że najpierw robi linki do marek, a następnie aktualności.

Bootstrap.php
  1. public function _initRoutes()
  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.  
  13. }

W pliku rutes.ini:
  1. brand.type = "Zend_Controller_Router_Route_Regex"
  2. brand.route = "(\w+)[/page/]{0,}(\d+){0,}"
  3. brand.defaults.module = "default"
  4. brand.defaults.controller = "phones"
  5. brand.defaults.action = "view-brand"
  6. brand.defaults.page = 1
  7. brand.map.1 = "name_brand"
  8. brand.map.2 = "page"
  9. brand.reverse = "%s/page/%d"
  10. archive.type = "Zend_Controller_Router_Route_Regex"
  11. archive.route = "aktualnosci[/page/]{0,}(\d+){0,}"
  12. archive.defaults.module = "default"
  13. archive.defaults.controller = "articles"
  14. archive.defaults.action = "view-archive-articles"
  15. archive.defaults.page = 1
  16. archive.map.1 = "page"
  17. archive.reverse = "aktualnosci/page/%d"
  18. ...


Wynika z tego, że Zend_Config_Ini wczytuje plik w odwrotnej kolejności, chociaż przeglądając zawartość pliku nie zauważyłem tego.
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.