public function testMoveToPosition() { $menu = new MenuItem('root', new MenuFactory()); $menu->addChild('c1'); $menu->addChild('c2'); $menu->addChild('c3'); $menu->addChild('c4'); $manipulator = new MenuManipulator(); $manipulator->moveToPosition($menu['c1'], 2); $this->assertEquals(array('c2', 'c3', 'c1', 'c4'), array_keys($menu->getChildren())); }
public function testUpdateChildAfterRename() { $this->pt1->setName('Temp name'); $this->assertSame($this->pt1, $this->menu->getChild('Temp name')); $this->assertEquals(array('Temp name', 'Parent 2'), array_keys($this->menu->getChildren())); $this->assertNull($this->menu->getChild('Parent 1')); }
public function testReordering() { $factory = new MenuFactory(); $menu = new MenuItem('root', $factory); $menu->addChild('c1'); $menu->addChild('c2'); $menu->addChild('c3'); $menu->addChild('c4'); $menu->reorderChildren(array('c4', 'c3', 'c2', 'c1')); $arr = array_keys($menu->getChildren()); $this->assertEquals(array('c4', 'c3', 'c2', 'c1'), $arr); }
/** * Customize menu * * @param MenuItem $menu * * @return MenuItem */ protected function customizeMenu(MenuItem $menu) { $menu->setChildrenAttribute('class', 'sidebar_content'); foreach ($menu->getChildren() as $child) { $child->setAttribute('class', 'sidebar_item ' . $child->getAttribute('class')); $child->setLinkAttribute('class', 'sidebar_link'); if ($child->hasChildren()) { foreach ($child->getChildren() as $subChild) { $subChild->setAttribute('class', 'sidebar_submenu_item ' . $subChild->getAttribute('class')); $subChild->setLinkAttribute('class', 'sidebar_submenu_link'); } /*$child->setAttribute('class', 'toggle open '. $child->getAttribute('class'));*/ $child->setChildrenAttribute('class', 'sidebar_submenu'); $child->setExtra('safe_label', true); $child->setLabel($child->getLabel() . ' <span class="arrow"></span>'); } } return $menu; }
/** * Find an item in the menu based on its URI * * @param MenuItem $menuItem * @param $uri * @return MenuItem|null */ private function findItemBasedOnUri(MenuItem $menuItem, $uri) { if ($uri === $menuItem->getUri()) { return $menuItem; } if (!$menuItem->hasChildren()) { return null; } foreach ($menuItem->getChildren() as $child) { $item = $this->findItemBasedOnUri($child, $uri); if ($item !== null) { return $item; } } return null; }
/** * Get the children * * @return array */ public function getChildren() { if ($this->children instanceof \Doctrine\Common\Collections\Collection) { return $this->children->toArray(); } return parent::getChildren(); }
public function getChildren() { $children = parent::getChildren(); if (!is_array($children)) { $data = []; try { foreach ($children as $name => $child) { $data[$name] = $child; } } catch (Exception $exc) { } $children = $data; } uasort($children, function (MenuInterface $a, MenuInterface $b) { if ($a->getWeight() == $b->getWeight()) { return 0; } return $a->getWeight() < $b->getWeight() ? 1 : -1; }); return $children; }
/** * Customize menu * * @param MenuItem $menu * * @return MenuItem */ protected function customizeMenu(MenuItem $menu) { $menu->setChildrenAttribute('class', 'sidebar_content'); $request = $this->get('core.request.current'); foreach ($menu->getChildren() as $child) { $child->setAttribute('class', 'sidebar_item ' . $child->getAttribute('class')); $uri = $request->getUri(); $itemUri = $child->getUri(); $linkClass = $uri == $itemUri || stripos($uri, $itemUri) !== false ? ' active' : ''; $child->setLinkAttribute('class', 'sidebar_link' . $linkClass); if ($child->hasChildren()) { foreach ($child->getChildren() as $subChild) { $subChild->setAttribute('class', 'sidebar_submenu_item ' . $subChild->getAttribute('class')); $subLinkClass = $request->getUri() == $subChild->getUri() ? ' active' : ''; $subChild->setLinkAttribute('class', 'sidebar_submenu_link' . $subLinkClass); } $openClass = stripos($uri, $itemUri) === false ? '' : 'active'; $child->setChildrenAttribute('class', 'sidebar_submenu ' . $openClass); $child->setExtra('safe_label', true); $child->setLabel($child->getLabel() . ' <span class="arrow"></span>'); } } return $menu; }
protected function traverse(MenuItem $menu) { foreach ($menu->getChildren() as $child) { $this->visitMenu($child); } }