Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [ZF]Konflikt routerów z nawigacją
IceManSpy
post
Post #1





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

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


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?


--------------------
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
pawv
post
Post #2





Grupa: Zarejestrowani
Postów: 25
Pomógł: 5
Dołączył: 9.02.2011
Skąd: warszawa

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


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

Ten post edytował pawv 12.06.2011, 16:04:15
Go to the top of the page
+Quote Post
IceManSpy
post
Post #3





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

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


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).


--------------------
Go to the top of the page
+Quote Post
pawv
post
Post #4





Grupa: Zarejestrowani
Postów: 25
Pomógł: 5
Dołączył: 9.02.2011
Skąd: warszawa

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


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





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

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


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.


--------------------
Go to the top of the page
+Quote Post
pawv
post
Post #6





Grupa: Zarejestrowani
Postów: 25
Pomógł: 5
Dołączył: 9.02.2011
Skąd: warszawa

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


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





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




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.


--------------------
I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features.
Go to the top of the page
+Quote Post
IceManSpy
post
Post #8





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

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


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.

Ten post edytował IceManSpy 13.06.2011, 10:51:44


--------------------
Go to the top of the page
+Quote Post
batman
post
Post #9





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




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.


--------------------
I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features.
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 Aktualny czas: 21.08.2025 - 12:42