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()));
 }
예제 #2
0
 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);
 }
예제 #4
0
 /**
  * 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;
 }
예제 #5
0
 /**
  * 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;
 }
예제 #6
0
 /**
  * Get the children
  *
  * @return array
  */
 public function getChildren()
 {
     if ($this->children instanceof \Doctrine\Common\Collections\Collection) {
         return $this->children->toArray();
     }
     return parent::getChildren();
 }
예제 #7
0
 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;
 }
예제 #8
0
 /**
  * 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);
     }
 }