protected function renderSubMenu(Zend_Navigation_Page $page) { $html = ''; $pages = $page->getPages(); foreach ($pages as $subPage) { if ($this->acl && $subPage->getResource()) { if (!$this->acl->hasPermission($subPage->getResource(), $subPage->getPrivilege())) { continue; } } if ($subPage->isActive()) { $this->activePageId = $this->getId($subPage); } if (!$subPage->isVisible(true)) { continue; } if (!$subPage->getHref()) { continue; } $html .= sprintf('<li><div class="menu-glyph" %s><a id="%s" href="%s" class="%s">%s</a></div></li>', $this->getInlineStyle($subPage->getId(), 15), 'menu-' . $this->getId($subPage), $subPage->getHref(), $subPage->getClass(), $this->view->escape($subPage->getLabel())); } return $html ? sprintf('<ul>%s</ul>', $html) : $html; }
/** * Recursively removes the given page from the parent container, including all subpages * * @param Zend_Navigation_Page $page The page to remove from the parent container and all its subpages. * @param Zend_Navigation_Container $parentContainer The parent container (by default it is this navigation) * from which to remove the page from its subpages * @param boolean $reattach Whether the subpages of the $page should be reattached to $parentContainer * @return boolean Whether the page was removed */ public function removePageRecursive(Zend_Navigation_Page $page, Zend_Navigation_Container $parentContainer = null, $reattach = false) { if ($parentContainer === null) { $parentContainer = $this; } $childPages = $page->getPages(); $removed = $parentContainer->removePage($page); if ($removed && $reattach) { // reattach the child pages to the container page foreach ($childPages as $childPage) { $pageOrder = $this->_getLastPageOrderInContainer($parentContainer) + 1; $page->setOrder($pageOrder); $this->addPageToContainer($childPage, $parentContainer); } } foreach ($parentContainer->getPages() as $subPage) { $removed = $removed || $this->removePageRecursive($page, $subPage, $reattach); } return $removed; }
/** * Returns an HTML string containing an 'a' element for the given page if * the page's href is not empty, and a 'span' element if it is empty * * Overrides {@link Zend_View_Helper_Navigation_Abstract::htmlify()}. * * @param Zend_Navigation_Page $page page to generate HTML for * @return string HTML string for the given page */ public function htmlify(Zend_Navigation_Page $page, $endOfTree = false) { // get label and title for translating $label = $page->getLabel(); $title = $page->getTitle(); // translate label and title? if ($this->getUseTranslator() && ($t = $this->getTranslator())) { if (is_string($label) && !empty($label)) { $label = $t->translate($label); } if (is_string($title) && !empty($title)) { $title = $t->translate($title); } } $hasChilds = false; if (!$endOfTree) { foreach ($page->getPages() as $child) { if ($child->isVisible()) { $hasChilds = true; break; } } } $class = $page->getClass(); $dataToggle = ''; $dropdown = false; if ($hasChilds) { if ($class != '') { $class .= ' '; } $class .= 'dropdown-toggle'; $dataToggle = ' data-toggle="dropdown"'; $dropdown = true; } // get attribs for element $attribs = array('id' => $page->getId(), 'title' => $title, 'class' => $class); // does page have a href? if ($href = $page->getHref()) { $element = 'a'; $attribs['href'] = $href; $attribs['target'] = $page->getTarget(); $attribs['accesskey'] = $page->getAccessKey(); } else { $element = 'span'; } return '<' . $element . $this->_htmlAttribs($attribs) . '' . $dataToggle . '>' . $this->view->escape($label) . ($dropdown ? ' <b class="caret"></b>' : '') . '</' . $element . '>'; }
/** * Returns an HTML string containing an 'a' element for the given page if * the page's href is not empty, and a 'span' element if it is empty * * Overrides {@link Zend_View_Helper_Navigation_Abstract::htmlify()}. * * @param Zend_Navigation_Page $page page to generate HTML for * @return string HTML string for the given page */ public function htmlify(Zend_Navigation_Page $page, $endOfTree = false) { // get label and title for translating $label = $page->getLabel(); $title = $page->getTitle(); // translate label and title? if ($this->getUseTranslator() && ($t = $this->getTranslator())) { if (is_string($label) && !empty($label)) { $label = $t->translate($label); } if (is_string($title) && !empty($title)) { $title = $t->translate($title); } } $hasChilds = false; if (!$endOfTree) { foreach ($page->getPages() as $child) { if ($child->isVisible()) { $hasChilds = true; break; } } } $class = $page->getClass(); // get attribs for element $attribs = array('id' => $page->getId(), 'title' => $title, 'class' => $class); // does page have a href? if ($href = $page->getHref()) { $element = 'a'; $attribs['href'] = $href; $attribs['target'] = $page->getTarget(); $attribs['accesskey'] = $page->getAccessKey(); } else { $element = 'span'; } if ($page->icon !== null) { if ($page->isActive()) { $page->icon = 'icon-white ' . $page->icon; } } return '<' . $element . $this->_htmlAttribs($attribs) . '>' . ($page->icon !== null ? '<i class="' . $page->icon . '"></i> ' : '') . $this->view->escape($label) . '</' . $element . '>'; }