From 3b7b2ec8e3a38829f667733a85cd1c4e06ba3cb2 Mon Sep 17 00:00:00 2001 From: Simon Vieille Date: Thu, 27 May 2021 21:53:59 +0200 Subject: [PATCH] add sortable navigation --- .../Site/NavigationAdminController.php | 14 +++++++++++--- core/Controller/Site/TreeAdminController.php | 6 ++++-- core/Entity/Site/Navigation.php | 19 ++++++++++++++++++- .../crud-controller/CrudController.tpl.php | 2 +- 4 files changed, 34 insertions(+), 7 deletions(-) diff --git a/core/Controller/Site/NavigationAdminController.php b/core/Controller/Site/NavigationAdminController.php index 71a9837..4054375 100644 --- a/core/Controller/Site/NavigationAdminController.php +++ b/core/Controller/Site/NavigationAdminController.php @@ -57,6 +57,14 @@ class NavigationAdminController extends CrudController return $this->doEdit($entity, $entityManager, $request); } + /** + * @Route("/admin/site/navigation/sort/{page}", name="admin_site_navigation_sort", methods={"POST"}, requirements={"page":"\d+"}) + */ + public function sort(int $page = 1, RepositoryQuery $query, EntityManager $entityManager, Request $request, Session $session): Response + { + return $this->doSort($page, $query, $entityManager, $request, $session); + } + /** * @Route("/admin/site/navigation/delete/{entity}", name="admin_site_navigation_delete", methods={"DELETE"}) */ @@ -77,6 +85,7 @@ class NavigationAdminController extends CrudController ->setPageRoute('new', 'admin_site_navigation_new') ->setPageRoute('edit', 'admin_site_navigation_edit') ->setPageRoute('show', 'admin_site_navigation_show') + ->setPageRoute('sort', 'admin_site_navigation_sort') ->setPageRoute('delete', 'admin_site_navigation_delete') ->setPageRoute('filter', 'admin_site_navigation_filter') @@ -87,21 +96,20 @@ class NavigationAdminController extends CrudController ->setView('show_entity', '@Core/site/navigation_admin/_show.html.twig') ->setView('form', '@Core/site/navigation_admin/_form.html.twig') + ->setIsSortableCollection('index', true) + ->setField('index', 'Label', Field\TextField::class, [ 'property' => 'label', 'attr' => ['class' => 'miw-200'], - 'sort' => ['label', '.label'], ]) ->setField('index', 'Domain', Field\ButtonField::class, [ 'property' => 'domain', 'button_attr' => ['class' => 'btn btn-light'], 'attr' => ['class' => 'miw-200'], - 'sort' => ['domain', '.domain'], ]) ->setField('index', 'Locale', Field\ButtonField::class, [ 'property' => 'locale', 'button_attr' => ['class' => 'btn btn-light'], - 'sort' => ['locale', '.locale'], ]) ; } diff --git a/core/Controller/Site/TreeAdminController.php b/core/Controller/Site/TreeAdminController.php index 876e4b9..fd05a93 100644 --- a/core/Controller/Site/TreeAdminController.php +++ b/core/Controller/Site/TreeAdminController.php @@ -31,7 +31,9 @@ class TreeAdminController extends AdminController } if (null === $navigation) { - $navigation = $navigationQuery->create()->findOne(); + $navigation = $navigationQuery->create() + ->orderBy('.sortOrder') + ->findOne(); } if (null === $navigation) { @@ -55,7 +57,7 @@ class TreeAdminController extends AdminController Session $session ): Response { $navigations = $navigationQuery->create() - ->orderBy('.label, .domain') + ->orderBy('.sortOrder') ->find() ; diff --git a/core/Entity/Site/Navigation.php b/core/Entity/Site/Navigation.php index 4914a84..86800fc 100644 --- a/core/Entity/Site/Navigation.php +++ b/core/Entity/Site/Navigation.php @@ -47,7 +47,7 @@ class Navigation implements EntityInterface /** * @ORM\Column(type="text", nullable=true) */ - protected $additionalDomains = []; + protected $additionalDomains = '[]'; /** * @ORM\OneToMany(targetEntity=Menu::class, mappedBy="navigation") @@ -59,6 +59,11 @@ class Navigation implements EntityInterface */ protected $locale = 'en'; + /** + * @ORM\Column(type="integer", nullable=true) + */ + private $sortOrder; + public function __construct() { $this->menus = new ArrayCollection(); @@ -186,4 +191,16 @@ class Navigation implements EntityInterface return $this; } + + public function getSortOrder(): ?int + { + return $this->sortOrder; + } + + public function setSortOrder(?int $sortOrder): self + { + $this->sortOrder = $sortOrder; + + return $this; + } } diff --git a/core/Resources/maker/crud-controller/CrudController.tpl.php b/core/Resources/maker/crud-controller/CrudController.tpl.php index eaa6b71..fc054f5 100644 --- a/core/Resources/maker/crud-controller/CrudController.tpl.php +++ b/core/Resources/maker/crud-controller/CrudController.tpl.php @@ -59,7 +59,7 @@ class extends CrudController } /** - * @Route("/admin//sort/{page}", name="admin__sort", methods={"POST"}) + * @Route("/admin//sort/{page}", name="admin__sort", methods={"POST"}, requirements={"page":"\d+"}) */ public function sort(int $page = 1, RepositoryQuery $query, EntityManager $entityManager, Request $request, Session $session): Response {