2016-04-06 2 views
1

J'essaie de faire une catégorie/menu dynamique pour mettre à jour les liens et tout depuis le panneau d'administration. J'ai essayé d'implémenter Tree à partir de gedmo mais je n'ai pas pu obtenir les enfants même après avoir passé des heures à regarder la documentation. Aussi je veux utiliser le paquet de menu knp. Quelqu'un peut-il m'aider à l'implémenter et m'expliquer ce qui est avec lft, rgt, root, niveau d'arbre et pourquoi devrais-je utiliser quand devrais-je les utiliser?Gedmo Tree n'a pas réussi à l'implémenter

Voici ma méthode:

public function createAdminMenu(array $options) 
{ 
    $menu_item = $this->em->getRepository('AppBundle:MenuItem'); 
    $menu = $this->factoryInterface->createItem('root'); 

    $rootNodes = $menu_item->getRootNodes(); 

    //var_dump($rootNodes); 
    $node = $menu_item->findOneByName('User'); 
    var_dump($menu_item->getChildren()); 
    foreach($rootNodes as $node) { 
     if($node->getDisplay()) 
     { 
      $menu->addChild($node->getName(), array('uri' => $node->getUri())); 

      $child_node = $node->getChildren($node); 
      //var_dump($child_node); 
      foreach($child_node as $child) 
      { 
       //$menu[$node->getName()] = $menu->addChild($child->getName()); 
      } 
     } 
    } 


    return $menu; 
} 

Répondre

1

a résolu le problème comme celui-ci:

$repo = $this->em->getRepository('AppBundle:MenuItem'); 

    $nodes = $repo->findByRootNodes($menuId); 

    foreach ($nodes as $node) { 
     if ($node->getDisplay()) { 
      $menu->addChild($node->getName(), ['uri' => $node->getRoute()]) 
       ->setAttribute('dropdown', $node->getDropDown()); 
      if ($node->getDisplayChildren()) { 
       $children = $repo->children($node); 
       if($children) 
       { 
        foreach ($children as $child) 
        { 
         if ($child->getDisplay()) 
         { 
          $menu[$node->getName()]->addChild($child->getName(), ['uri' => $child->getRoute()]) 
           ->setAttribute('divider_prepend', $child->getDividerPrepend()) 
           ->setAttribute('divider_append', $child->getDividerAppend()); 
         } 
        } 
       } 
      } 
     } 
    } 
    return $menu;