adding ordering to menu

This commit is contained in:
Julien Fastré 2018-05-04 14:15:56 +02:00
parent 5cef93abd0
commit 9f06c6d6f1

View File

@ -5,6 +5,7 @@ namespace Chill\MainBundle\Routing;
use Symfony\Component\Routing\RouteCollection; use Symfony\Component\Routing\RouteCollection;
use Symfony\Component\Routing\RouterInterface; use Symfony\Component\Routing\RouterInterface;
use Knp\Menu\FactoryInterface; use Knp\Menu\FactoryInterface;
use Knp\Menu\ItemInterface;
/** /**
@ -117,6 +118,8 @@ class MenuComposer
} }
} }
$this->reorderMenu($menu);
return $menu; return $menu;
} }
@ -129,7 +132,8 @@ class MenuComposer
* @param int $order * @param int $order
* @return int * @return int
*/ */
private function resolveOrder($routes, $order){ private function resolveOrder($routes, $order)
{
if (isset($routes[$order])) { if (isset($routes[$order])) {
return $this->resolveOrder($routes, $order + 1); return $this->resolveOrder($routes, $order + 1);
} else { } else {
@ -137,6 +141,29 @@ class MenuComposer
} }
} }
private function reorderMenu(ItemInterface $menu)
{
$ordered = [];
$unordered = [];
foreach ($menu->getChildren() as $name => $item) {
$order = $item->getExtra('order');
if ($order !== null) {
$ordered[$this->resolveOrder($ordered, $order)] = $name;
} else {
$unordered = $name;
}
}
ksort($ordered);
$menus = \array_merge(\array_values($ordered), $unordered);
dump($menus);
$menu->reorderChildren($menus);
}
public function addLocalMenuBuilder(LocalMenuBuilderInterface $menuBuilder, $menuId) public function addLocalMenuBuilder(LocalMenuBuilderInterface $menuBuilder, $menuId)
{ {
$this->localMenuBuilders[$menuId][] = $menuBuilder; $this->localMenuBuilders[$menuId][] = $menuBuilder;