From 9f06c6d6f1219a35a4049c5eba0dfbbf284d1813 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Fastr=C3=A9?= Date: Fri, 4 May 2018 14:15:56 +0200 Subject: [PATCH] adding ordering to menu --- Routing/MenuComposer.php | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/Routing/MenuComposer.php b/Routing/MenuComposer.php index 6cc73b4f2..8effccc85 100644 --- a/Routing/MenuComposer.php +++ b/Routing/MenuComposer.php @@ -5,6 +5,7 @@ namespace Chill\MainBundle\Routing; use Symfony\Component\Routing\RouteCollection; use Symfony\Component\Routing\RouterInterface; use Knp\Menu\FactoryInterface; +use Knp\Menu\ItemInterface; /** @@ -117,6 +118,8 @@ class MenuComposer } } + $this->reorderMenu($menu); + return $menu; } @@ -129,7 +132,8 @@ class MenuComposer * @param int $order * @return int */ - private function resolveOrder($routes, $order){ + private function resolveOrder($routes, $order) + { if (isset($routes[$order])) { return $this->resolveOrder($routes, $order + 1); } 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) { $this->localMenuBuilders[$menuId][] = $menuBuilder;