Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZendFramework] Zend_Navigation
Forum PHP.pl > Forum > PHP > Frameworki
CzarnyGsm
Witam,
Znalazłem w internecie ciekawy tutorial odnośnie Zend_Navigaton -> http://www.zendcasts.com/zend_navigation-d...crumbs/2009/06/ .
Z tego tytułu też mam pytania, czy aby zaprezentowane kod na tej stronie jest aktualny (artykuł pochodzi z 2009 roku)? Chciałbym wiedzieć, aby później nie błądzić. Drugie z moich pytań to z czego mogę skorzystać, aby odnośniki nie były układane po nazwie kontrolera, akcji i samemu je 'składać' np. aby adres http://localhost/uzytkownicy/rejestracja mógł wyświetlać się pod adresem http://localhost/rejestracja. Z góry dziękuję za pomoc.

W pliku application/layouts/scripts/layout.phtml
  1. [..]<?php echo $this->navigation()->menu(); ?>[..]


W pliku Boostrap.php umieszczam:
  1. protected function _initNavigation()
  2. {
  3. $this->bootstrap('view');
  4. $view = $this->getResource('view');
  5. $config = new Zend_Config_Xml(APPLICATION_PATH . '/configs/navigation.xml', 'nav');
  6. $navigation = new Zend_Navigation($config);
  7. $view->navigation($navigation);
  8. }


Plik XML :
application/configs/navigation.xml
  1. <?xml version="1.0"?>
  2. <zend-config xmlns:zf="http://framework.zend.com/xml/zend-config-xml/1.0/">
  3. <nav>
  4. <home>
  5. <label>Home</label>
  6. <uri>/</uri>
  7.  
  8. <pages>
  9. <lista-uzytkownikow>
  10. <label>Lista uzytkownikow</label>
  11. <uri>/uzytkownicy/lista-uzytkownikow</uri>
  12. </lista-uzytkownikow>
  13. <rejestracja>
  14. <label>Rejestracja</label>
  15. <uri>/uzytkownicy/rejestracja</uri>
  16. </rejestracja>
  17. </pages>
  18.  
  19. </home>
  20. </nav>
  21. </zend-config>
grOm
Hej,
musisz inaczej napisac ten plik xml umieszczac cos w stylu :
  1. <home>
  2. <label>Home</label>
  3. <module>default</module>
  4. <controller>index</controller>
  5. <action>index</action>
  6. <route>default</route>
  7. </home>
  8. <shop>
  9. <label>Shop</label>
  10. <module>shop</module>
  11. <controller>index</controller>
  12. <action>index</action>
  13. <route>default</route>
  14. </shop>


czyli zamiast <uri> podawac kontroler i akcje, a jak chcesz 'skladac po swojemu' musisz ustawiać routery czyli dajmy na to :
  1. resources.router.routes.homepage.route = "homepage.html"
  2. resources.router.routes.homepage.defaults.module = "default"
  3. resources.router.routes.homepage.defaults.controller = "index"
  4. resources.router.routes.homepage.defaults.action = "index"

w apllication.ini, a w xmlu ustawiasz router na "homepage" czyli
  1. <home>
  2. <label>Home</label>
  3. <module>default</module>
  4. <controller>index</controller>
  5. <action>index</action>
  6. <route>homepage</route>
  7. </home>

wtedy Ci się wygeneruje link homepage.html
CzarnyGsm
Dziękuje bardzo za rozwiązanie. Działa jak należy. Już dałem plusik:) Mam jeszcze pytanie o te trasy. Do pliku application.ini dodałem dwie trasy: (od razu tutaj pytanie, czy nie da się tego inaczej zrobić bo przy dużej stronie sporo tych tras wyjdzie)
Kod
[..]
resources.router.routes.rejestracja.route = "rejestracja.html"
resources.router.routes.rejestracja.defaults.module = "default"
resources.router.routes.rejestracja.defaults.controller = "uzytkownicy"
resources.router.routes.rejestracja.defaults.action = "rejestracja"
resources.router.routes.lista.route = "lista.html"
resources.router.routes.lista.defaults.module = "default"
resources.router.routes.lista.defaults.controller = "uzytkownicy"
resources.router.routes.lista.defaults.action = "listaUzytkownikow"
[..]

Do pliku .xml dodałem zaś
  1. [..]
  2. <home>
  3. <label>Home</label>
  4. <uri>/</uri>
  5.  
  6. <pages>
  7. <rejestracja>
  8. <label>Rejestracja</label>
  9. <controller>uzytkownicy</controller>
  10. <action>rejestracja</action>
  11. <route>rejestracja</route>
  12. </rejestracja>
  13. <lista>
  14. <label>Lista użytkowników</label>
  15. <controller>uzytkownicy</controller>
  16. <action>listaUzytkownikow</action>
  17. <route>lista</route>
  18. </lista>
  19. </pages>
  20.  
  21. </home>
  22. [..]


Odnośnik rejestracja.html działa jak należy, ale z kolei na stronie lista.html wyświetla mi komunikat, że akcja "listauzytkownikow" nie istnieje. Może problem jest w tym, że nazwa akcji jest dwuczłonowa tzn. składającą się z dwóch słów i w nazwie listaUzytkownikow zamienia wielką literę U na małą?
Informacja o błędzie:
Kod
Exception information:

Message: Action "listauzytkownikow" does not exist and was not trapped in __call()
Stack trace:

#0 C:\xampp\php\PEAR\Zend\Controller\Action.php(518): Zend_Controller_Action->__call('listauzytkownik...', Array)
#1 C:\xampp\php\PEAR\Zend\Controller\Dispatcher\Standard.php(295): Zend_Controller_Action->dispatch('listauzytkownik...')
#2 C:\xampp\php\PEAR\Zend\Controller\Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))
#3 C:\xampp\php\PEAR\Zend\Application\Bootstrap\Bootstrap.php(97): Zend_Controller_Front->dispatch()
#4 C:\xampp\php\PEAR\Zend\Application.php(366): Zend_Application_Bootstrap_Bootstrap->run()
#5 C:\xampp\htdocs\SiteZend\public\index.php(26): Zend_Application->run()
#6 {main}  

Request Parameters:

array (
  'module' => 'default',
  'controller' => 'uzytkownicy',
  'action' => 'listaUzytkownikow',
)



---EDIT---
Wydaje mi się, że jest to błąd Zend'a, w kontrolerze jak zamienię nazwę akcji na wszystkie małe litery to działa prawidłowo.
zend
1)It's not a bug, it's a feature!
resources.router.routes.lista.defaults.action = "lista-uzytkownikow"
2)Jeśli będziesz w stanie wymyśleć bardziej ogólne trasy to będzie ich mniej wink.gif
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.