Zend Framework view helper for generating menus
<?php /** * ---------------------------------------------------------------- * Copyright (C) 2008 Agencja Interaktywna Blue Paprica * Maciej Pałubicki. All rights reserved. * ---------------------------------------------------------------- * * /framework/application/Modules/Admin/views/helpers/Menu.php * * @author Łukasz Kazimierz Bandzarewicz <lukasz.bandzarewicz@bluepaprica.com> * @copyright Copyright (C) 2008 Agencja Interaktywna Blue Paprica * Maciej Pałubicki. All rights reserved. */ class Zend_View_Helper_Menu { protected function _prepareMenu() { return array( array( 'title' => 'Strona główna', 'controller' => 'index' ) , array( 'title' => 'Użytkownicy systemu', 'controller' => 'users', ) , array( 'title' => 'System Punktów', 'controller' => 'point_categories', ) , array( 'title' => 'Produkty', 'controller' => 'store_products', 'submenu' => array( array( 'title' => 'Lista produktów', 'action' => 'list' ), array( 'title' => 'Dodaj produkt', 'action' => 'create' ) ) ) , array( 'title' => 'Kupony', 'controller' => 'store_coupons', 'submenu' => array( array( 'title' => 'Lista kuponów', 'action' => 'list' ), array( 'title' => 'Dodaj kupon', 'action' => 'create' ) ) ) , array( 'title' => 'Kategorie produktów', 'controller' => 'store_categories', 'submenu' => array( array( 'title' => 'Lista kategorii', 'action' => 'list' ), array( 'title' => 'Dodaj kategorię', 'action' => 'create' ) ) ) , array( 'title' => 'Dostawcy', 'controller' => 'store_suppliers', 'submenu' => array( array( 'title' => 'Lista producentów', 'action' => 'list' ), array( 'title' => 'Dodaj producenta', 'action' => 'create' ) ) ) , array( 'title' => 'Producenci', 'controller' => 'store_manufacturers', 'submenu' => array( array( 'title' => 'Lista producentów', 'action' => 'list' ), array( 'title' => 'Dodaj producenta', 'action' => 'create', 'params' => '/type/' ) ) ) , array( 'title' => 'Aktualności', 'controller' => 'static_news', 'action' => 'list', 'submenu' => array( array( 'title' => 'Lista aktualności', 'action' => 'list' ), array( 'title' => 'Dodaj aktualność', 'action' => 'create' ) ) ) , array( 'title' => 'Strony statyczne', 'controller' => 'static_pages', 'action' => 'list' ) , array( 'title' => 'Logi', 'controller' => 'maintenance_logs', ) ); } /** * @var Zend_View_Interface */ public $view; public function setView(Zend_View_Interface $view) { $this->view = $view; } public function menu() { $menu = $this->_prepareMenu(); $ctrl = Zend_Controller_Front::getInstance(); $controller = $ctrl->getRequest()->getControllerName(); $action = $ctrl->getRequest()->getActionName(); ?> <script type="text/javascript"> <!-- var timeoutID; function displaySubmenu(submenu_id) { // hide all elements $('ul[id*=bp_submenu_]').each(function(e) { $(this).hide(); }); // show the chosen one $(submenu_id).show(); } $(document).ready(function () { // for each main menu elements $('a[@id*=bp_menu_]').each(function(e) { var controller = this.id.substring('bp_menu_'.length); var submenu_id = '#bp_submenu_' + controller; var menu_id = '#bp_menu_' + controller; $(menu_id).mouseover(function() { timeoutID = setTimeout(function() { displaySubmenu(submenu_id); }, 1000); }); $(menu_id).mouseout(function() { if (timeoutID) { clearTimeout(timeoutID); } }); $(menu_id).click(function() { if ($(submenu_id).is(':hidden')) { displaySubmenu(submenu_id); return false; } }); }); }); //--> </script> <div id="bp_menu_1"> <ul id="bp_menu"> <? foreach ($menu as $main_menu_item) : ?> <li> <a id="bp_menu_<?= $main_menu_item['controller'] ?>" href="<?= $ctrl->getBaseUrl() ?>/admin/<?= $main_menu_item['controller'] ?><? if (isset($main_menu_item['action'])) : ?>/<?= $main_menu_item['action'] ?><? endif; ?>" <?php if ($controller == $main_menu_item['controller']) : ?>class="active"<? endif; ?>> <?= $this->view->escape($main_menu_item['title']) ?> <? if (isset($main_menu_item['submenu'])) : ?>»<? endif; ?> </a> </li> <? endforeach; ?> </ul> </div> <div id="bp_menu_2"> <? foreach ($menu as $main_menu_item) : ?> <? if (isset($main_menu_item['submenu']) && is_array($main_menu_item['submenu'])) : ?> <ul id="bp_submenu_<?= $main_menu_item['controller'] ?>" <? if ($controller != $main_menu_item['controller']) :?>style="display: none;"<? endif; ?>> <? foreach ($main_menu_item['submenu'] as $sub_main_menu_item) : ?> <li> <a href="<?= $ctrl->getBaseUrl() ?>/admin/<?= $main_menu_item['controller'] ?>/<?= $sub_main_menu_item['action'] ?>" <? if ($controller == $main_menu_item['controller'] && $action == $sub_main_menu_item['action']) :?>class="active"<? endif; ?>> <?= $this->view->escape($sub_main_menu_item['title']) ?> </a> <span></span> </li> <? endforeach; ?> </ul> <? endif; ?> <? endforeach; ?> </div> <?php } }