/** * Adiciona um item ao menu. * @param string $name Texto que será exibido ao usuário * @param string $link Link do item do menu * @return MenuItem O item do menu recém adicionado */ public function addItem($name, $link) { $menuItem = new MenuItem(); $anchor = $menuItem->addChild(new Anchor($link)); $anchor->addChild(new Text($name)); $this->addChild($menuItem); return $menuItem; }
/** * Create a menu item from a NodeInterface * * @param NodeInterface $node * @return MenuItem */ public function createFromNode(NodeInterface $node) { $item = new MenuItem($node->getName(), $this->getUriFromNode($node), $node->getAttributes()); $item->setLabel($node->getLabel()); foreach ($node->getChildren() as $childNode) { $item->addChild($this->createFromNode($childNode)); } return $item; }
/** * Recursively creates a tree from the pages array * * @param MenuItem parent MenuItem object under which the tree is build * @param array pageIdx indices of pages for this tree */ private function buildTree(MenuItem &$parent, $pageIdx) { foreach ($pageIdx as $i) { if ($this->pages[$i]->parent == $parent->get('id')) { $child = $parent->addChild($this->pages[$i]); $this->buildTree($child, array_diff($pageIdx, array($i))); if ($this->pid == $this->pages[$i]->id) { $parent->getRoot()->setCurrentItem($child); } } } }
/** * @param MenuItem $menu * @param Array $menudata * @param String $menuItemDecorator * */ public function setupMenuItem($menu, $menudata, $menuItemDecorator) { $menuItemCounter = 0; foreach ($menudata as $menuItem) { $menuType = $menuItem->getMenuType(); $getPageFunction = 'get' . $menuType; $menuItemCounter++; if ($menuItem->getPublishstate() != '0') { $urlParams = $menuItem->getMenuUrlExtras(); if (!empty($urlParams)) { $urlParams = '/' . urlencode($urlParams); } switch ($menuType) { case 'http': $targetURL = $menuItem->getExternalUrl(); if ($targetURL === null) { $targetURL = '#'; } $menu->addChild($menuItem->getTitle(), array('uri' => $targetURL)); $menu[$menuItem->getTitle()]->setLinkAttribute('target', '_blank'); $menu[$menuItem->getTitle()]->setLinkAttribute('rel', 'nofollow'); break; case 'url': $targetURL = $menuItem->getExternalUrl(); if ($targetURL === null) { $targetURL = '#'; } $menu->addChild($menuItem->getTitle(), array('uri' => $targetURL)); break; case 'seperator': $menu->addChild($menuItem->getTitle()); $menu[$menuItem->getTitle()]->setLabelAttribute('class', 'divider'); break; case 'Page': $pageFunction = $menuItem->{$getPageFunction}(); // If Link Action is not selected point to homepage else to alias or page id based route if ($pageFunction !== null) { $alias = $this->getPageAlias($pageFunction, $menuType); if (null === $alias) { $menu->addChild($menuItem->getTitle(), array('uri' => '/' . $menuItem->getRoute() . '/' . $pageFunction . $urlParams)); } elseif ('index' === $alias) { $menu->addChild($menuItem->getTitle(), array('uri' => '/')); } else { $menu->addChild($menuItem->getTitle(), array('uri' => '/' . $alias . $urlParams)); } } else { $menu->addChild($menuItem->getTitle(), array('uri' => '/')); } break; case 'Blog': $pageFunction = $menuItem->{$getPageFunction}(); // If Link Action is not selected point to homepage else to alias or page id based route if ($pageFunction !== null) { $alias = $this->getPageAlias($pageFunction, $menuType); if (null === $alias) { $menu->addChild($menuItem->getTitle(), array('uri' => '/' . strtolower($menuType) . '/' . $menuItem->getRoute() . '/' . $menuItem->{$getPageFunction}() . $urlParams)); } else { $menu->addChild($menuItem->getTitle(), array('uri' => '/' . strtolower($menuType) . '/' . $alias . $urlParams)); } } else { $menu->addChild($menuItem->getTitle(), array('uri' => '/')); } break; default: $menu->addChild($menuItem->getTitle()); $menu[$menuItem->getTitle()]->setLabelAttribute('class', 'divider'); } $menu[$menuItem->getTitle()]->setAttribute('class', 'item' . $menuItemCounter . ' level' . $this->menuItemlevel); $menu[$menuItem->getTitle()]->setLinkAttribute('class', 'item' . $menuItemCounter . ' level' . $this->menuItemlevel); $menu[$menuItem->getTitle()]->setLinkAttribute('title', $menuItem->getTitle()); if ($menuItemDecorator == 'main') { if ($menuItem->getMenuImage() !== null) { $menu[$menuItem->getTitle()]->setLabelAttribute('style', 'background-image:url("' . $menuItem->getMenuImage() . '");'); } if ($menuItem->children !== null) { $menu[$menuItem->getTitle()]->setAttribute('class', 'item' . $menuItemCounter . ' level' . $this->menuItemlevel . ' has-dropdown not-click'); $this->menuItemlevel = $this->menuItemlevel + 1; //$menu[$menuItem->getTitle()]->setAttribute('flyout-toggle', true); $menu[$menuItem->getTitle()]->setChildrenAttribute('class', 'dropdown level' . $this->menuItemlevel); $this->setupMenuItem($menu[$menuItem->getTitle()], $menuItem->children, $menuItemDecorator); $this->menuItemlevel = $this->menuItemlevel - 1; } } else { if ($menuItem->children !== null) { $this->menuItemlevel = $this->menuItemlevel + 1; $menu[$menuItem->getTitle()]->setAttribute('class', 'item' . $menuItemCounter . ' level' . $this->menuItemlevel); $this->setupMenuItem($menu[$menuItem->getTitle()], $menuItem->children, $menuItemDecorator); $this->menuItemlevel = $this->menuItemlevel - 1; } } } } }