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\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;