Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZF]Konflikt routerów z nawigacją
Forum PHP.pl > Forum > PHP > Frameworki
IceManSpy
Witam

Zrobiłem proste menu (bez okruszków chleba smile.gif ) z bloga Batman'a:
http://blog.wilgucki.pl/2009/10/zendnaviga...ymy-menu-i.html
Tylko trochę prostsze:
  1. <?php
  2. return array(
  3. 'label' => 'Lista artykułów',
  4. 'module' => 'admin',
  5. 'controller' => 'article',
  6. 'action' => 'index'
  7. ),
  8. 'label' => 'Dodaj artykuł',
  9. 'module' => 'admin',
  10. 'controller' => 'article',
  11. 'action' => 'add'
  12. ),
  13. 'label' => 'Edytuj artykuł',
  14. 'module' => 'admin',
  15. 'controller' => 'article',
  16. 'action' => 'edit'
  17. ),
  18. 'label' => 'Usuń artykuł',
  19. 'module' => 'admin',
  20. 'controller' => 'article',
  21. 'action' => 'delete'
  22. ),
  23. 'label' => 'Wyloguj się',
  24. 'module' => 'admin',
  25. 'controller' => 'index',
  26. 'action' => 'logout'
  27. )
  28. );
  29. ?>

Dodałem odpowiednie dane do boostrapa i layout'u. Wszystko działa super. Czas na naukę routerów biggrin.gif
Więc w boostrapie dopisałem takie coś:
  1. public function _initRoutes()
  2. {
  3. $router = Zend_Controller_Front::getInstance()->getRouter();
  4. $router->addRoute('lista',new Zend_Controller_Router_Route
  5. ('admin/lista',
  6. array('action'=>'index','controller'=>'article','module'=>'admin')));
  7. return $router;
  8. }

Router działa, ja wpiszę się w adresie admin/lista , tylko że zastępuje on wszystkie linki w menu. Czyli wszystkie mają w sobie admin/lista . Jak i gdzie to naprawić? sad.gif

P.S. Menu lepiej trzymać w pliku php, czy XML? Czy to bez różnicy?
pawv
Pewnie używasz url helpera, proponuje wiec skorzystać z drugiego parametru tej moetody, który odpowiada za router.

  1. $this->url(array('' => '', '' => '', '' => ''),'default', true);


w tym przypadku ma korzystać z adresu w routerze podstawowym 'default'

problem w połączeniu z zend_navigation moasz opisany tutaj

http://framework.zend.com/issues/browse/ZF-6486
IceManSpy
Nie za bardzo rozumiem o co chodzi :/
Nawet jak stworzę taki link:
  1. <a href="<?php echo $this->url(array('' => '', '' => '', '' => ''),'lista', true); ?>">Testowe</a>

bo lista to mój router i kliknę na niego to przechodzi na router (/admin/lista), ale dalej menu jest zasłonięte przez router (czyli wracam do pkt wyjścia).
pawv
Chodziło mi o to że jeżeli link ma prowadzić w miejsce, które nie ma ustawionego routingu, wtedy w url helperze dajesz default, natomiast jeżeli ma prowadzić do Twojego panelu dajesz nazwę tego routingu
IceManSpy
Ale u mnie linki w menu są tworzone za pomocą pliku, który jest w pierwszym listingu. Potem w boostrapie mam takie coś:
  1. protected function _initNavigation()
  2. {
  3. $this->bootstrap('layout');
  4. $layout = $this->getResource('layout');
  5. $view = $layout->getView();
  6.  
  7. $config = require APPLICATION_PATH. '/configs/menu_admin.php';
  8. $navigation = new Zend_Navigation($config);
  9. $view->navigation($navigation);
  10. }

I ładnie generuje menu.
A potem ustawiłem w boostrapie ten jeden router dla zabawy, aby sprawdzić jak to działa.
A jak wpisze ten jeden router, to potem nawigacja nie działa. Musiałbym ręcznie w layoutcie ustawiać adresy.
pawv
  1. <?php
  2. return array(
  3. 'label' => 'Lista artykułów',
  4. 'module' => 'admin',
  5. 'controller' => 'article',
  6. 'action' => 'index',
  7. 'route' => 'default'
  8. ),
  9. 'label' => 'Dodaj artykuł',
  10. 'module' => 'admin',
  11. 'controller' => 'article',
  12. 'action' => 'add',
  13. 'route' => 'default'
  14. ),
  15. 'label' => 'Edytuj artykuł',
  16. 'module' => 'admin',
  17. 'controller' => 'article',
  18. 'action' => 'edit',
  19. 'route' => 'default'
  20. ),
  21. 'label' => 'Usuń artykuł',
  22. 'module' => 'admin',
  23. 'controller' => 'article',
  24. 'action' => 'delete',
  25. 'route' => 'default'
  26. ),
  27. 'label' => 'Wyloguj się',
  28. 'module' => 'admin',
  29. 'controller' => 'index',
  30. 'action' => 'logout',
  31. 'route' => 'default'
  32. )
  33. );
  34. ?>


natomiast jeżeli chciałbyś mieć ustawiony link w menu do strony która ma ustawiony routing musisz wpisać nazwę tego routingu zamiast 'default'

  1. 'label' => 'Wyloguj się',
  2. 'module' => 'admin',
  3. 'controller' => 'index',
  4. 'action' => 'list',
  5. 'route' => 'list'
  6. )
batman
W przypadku tras/ścieżek wystarczy w konfiguracji nawigacji podać samą nazwę trasy. Nie trzeba podawać modułu, kontrolera ani akcji.

Odnośnie przechowywania konfiguracji nawigacji, to nie ma to większego znaczenia. PHP będzie szybsze, ale tylko w przypadku rozbudowanych nawigacji. Dla kilkunastu elementów menu, różnica w wydajności jest pomijalna. Po za tym zawsze można skorzystać z cache'u.
IceManSpy
Dziękuję bardzo pawv za pomoc smile.gif

Cytat(batman @ 13.06.2011, 09:18:49 ) *
W przypadku tras/ścieżek wystarczy w konfiguracji nawigacji podać samą nazwę trasy. Nie trzeba podawać modułu, kontrolera ani akcji.

Tylko jeśli ustawiłem w nawigacji jakiś link bez modułu, akcji i kontrolera, to wtedy nie działało ustawianie da tego linku klasy active. Działa tylko, jeśli zadeklarowane są powyższe wartości.
batman
Cytat(IceManSpy @ 13.06.2011, 11:23:03 ) *
Tylko jeśli ustawiłem w nawigacji jakiś link bez modułu, akcji i kontrolera, to wtedy nie działało ustawianie da tego linku klasy active. Działa tylko, jeśli zadeklarowane są powyższe wartości.

Jeśli tak, to masz rację. Trzeba podać brakujące składowe adresu.
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.