Zend

Zend Framework tvorba pluginů a menu

28. Ledna 2010

Dnes bych se chtěl podívat na tvorbu menu pro vaši aplikaci. Způsobů je mnoho a každý se hodí pro jinou situaci. Řekněme že potřebujete statické menu ale pro každý modul nebo controller jiné. V tomto tutoriálu využijeme pluginů a třídy Zend_Navigation. Pokud hledáte způsob, jak vhodně vyřešit menu pro vaši aplikaci, nebo se chcete seznámit s třídou Zend_Navigation, tak je tento článek určen právě vám.Nejdříve je potřeba zaregistrovat plugin, náš plugin nepotřebuje žádné parametry pro konstruktor, tudíž nám stačí plugin zaregistrovat přes konfigurační soubor(pokud máte pluginy registrované v bootstrap.php, tak ho samozřejmě můžete zaregistrovat tam).

  1. resources.frontController.plugins.menu = "XXXXX_Plugin_Menu"

nebo tedy v boostrapu

  1. // Ukazka funkce pro bootstrap na registrovani pluginu
  2. protected function _initFront()
  3. {
  4.  
  5. //Slozka pro pluginy /application/plugins/
  6. $front = Zend_Controller_Front::getInstance();
  7. $front->registerPlugin(new XXXX_Plugin_Menu());
  8.  
  9. return $front;
  10.  
  11. }

Musíme se rozhodnout, pro nějaký modul, controller, nebo akci chceme menu změnit. Pro vybrané moduly, controllery a akce můžeme změnit i celý layout.

  1. if(getControllerName() == "produkty") {
  2. $structure = array(array(
  3.  
  4. 'label' => "Ceny prodůktů",
  5. 'controller' => 'products',
  6. 'action' => 'prizes',
  7. 'module' => 'default',
  8.  
  9. ),
  10. array(
  11. 'label' => 'Nejnovější produkty',
  12. 'controller' => 'products',
  13. 'action' => 'latest',
  14. 'module' => 'default'
  15.  
  16. ),
  17. );
  18. }
  19.  
  20. if ($request->getModuleName () == "administrace") {
  21.  
  22. if($request->getControllerName() == "login") {
  23. $layout = Zend_Layout::getMvcInstance ();
  24. $layout->setLayout( "login" );
  25. return ;
  26. }
  27.  
  28. $layout = Zend_Layout::getMvcInstance ();
  29. $layout->setLayout( "l" );
  30.  
  31. if($request->getControllerName() == "users") {
  32. $structure = array(array(
  33.  
  34. 'label' => "Nový uživatel",
  35. 'controller' => 'users',
  36. 'action' => 'new',
  37. 'module' => 'administrace',
  38.  
  39. ),
  40. array(
  41. 'label' => 'Seznam uživatelů',
  42. 'controller' => 'users',
  43. 'action' => 'list',
  44. 'module' => 'administrace'
  45.  
  46. ),
  47. );
  48. }
  49.  
  50. }
  51. if(isset($structure)) {
  52. $cont = new Zend_Navigation ($structure);
  53. $layout->getView()->navigation($cont);
  54.  
  55. $uri = $this->_request->getPathInfo ();
  56. $activeNav = $layout->getView ()->navigation()->findByUri($uri);
  57. $activeNav->active = true;
  58. $activeNav->class = "active";
  59.  
  60. }
  61. }
  62. }

Nadefinujeme pole obsahující atributy odkazů a poté vytvoříme instanci třídy Zend_Navigation, které předáme jako parametr strukturu menu. Nakonec zjistíme aktivní položku a nastavíme jí příslušnou css třídu. A teď již stačí obsah jen vygenerovat ve vašem layout scriptu.

  1. echo $this->navigation()->breadcrumbs();
  2. // a nebo klasické menu
  3. echo $this->navigation()->menu();
  4. ?>
  5.  

A to je celé. To byl celý příklad toho jak napsat jednoduchý plugin a jedna z možností, jak vytvořit menu pro svou aplikaci

Ohodnoť článek
Ohodnoťte článek.
zend

Přidat příspěvěk

captcha
zend

Diskuze

xolotl 15. Května 16:32

diky za clanek, kdyztak oprav getControllerName() == "produkty") { na if ($request->getControllerName() == "produkty") {

Dominoo 27. Května 03:18 EmailWeb

Ahoj, díky nevšiml jsem si že to tam chybí, už jsem to opravil :)

Copyright © 2011 Dominik Veselý & CodingWalrus | Designed by Tryst

Kategorie

Hledat