From 632bf7712c07c085c8c71c76ead795d58e8265b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20K=C3=B6rner?= Date: Tue, 7 Feb 2023 09:37:04 +0100 Subject: [PATCH 1/3] fixed exceptions when pageModel request attribute is of type int --- src/Menu/MenuBuilder.php | 6 ++++++ src/Menu/NavigationModuleProvider.php | 5 +++++ 2 files changed, 11 insertions(+) diff --git a/src/Menu/MenuBuilder.php b/src/Menu/MenuBuilder.php index ecd2dc8..69dc1e7 100644 --- a/src/Menu/MenuBuilder.php +++ b/src/Menu/MenuBuilder.php @@ -54,10 +54,16 @@ public function getMenu(ItemInterface $root, int $pid, $level = 1, $host = null, return $root; } + $pageAdapter = $this->framework->getAdapter(PageModel::class); + $groups = []; $request = $this->requestStack->getCurrentRequest(); $requestPage = $request->attributes->get('pageModel'); + if (is_int($requestPage)) { + $requestPage = $pageAdapter->findByPk($requestPage); + } + /** @var FrontendUser $user */ $user = $this->framework->createInstance(FrontendUser::class); if ($user->id) { diff --git a/src/Menu/NavigationModuleProvider.php b/src/Menu/NavigationModuleProvider.php index b4a303a..5db79d9 100644 --- a/src/Menu/NavigationModuleProvider.php +++ b/src/Menu/NavigationModuleProvider.php @@ -42,6 +42,7 @@ public function get($name, array $options = []): ItemInterface { $request = $this->requestStack->getCurrentRequest(); $moduleAdapter = $this->framework->getAdapter(ModuleModel::class); + $pageAdapter = $this->framework->getAdapter(PageModel::class); /** @var ModuleModel $module */ if (null === $module = $moduleAdapter->findBy('menuAlias', $name)) { @@ -50,6 +51,10 @@ public function get($name, array $options = []): ItemInterface $currentPage = null !== $request ? $request->attributes->get('pageModel') : null; + if (is_int($currentPage)) { + $currentPage = $pageAdapter->findByPk($currentPage); + } + $menu = $this->factory->createItem('root'); $options = array_merge($module->row(), $options); From 0202ef8d7679c12722dbcb98edb7bd8a3e280df3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20K=C3=B6rner?= Date: Tue, 7 Feb 2023 10:28:44 +0100 Subject: [PATCH 2/3] changed evaluation to is_numeric as page id could also be of type string --- src/Menu/MenuBuilder.php | 2 +- src/Menu/NavigationModuleProvider.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Menu/MenuBuilder.php b/src/Menu/MenuBuilder.php index 69dc1e7..71c9df5 100644 --- a/src/Menu/MenuBuilder.php +++ b/src/Menu/MenuBuilder.php @@ -60,7 +60,7 @@ public function getMenu(ItemInterface $root, int $pid, $level = 1, $host = null, $request = $this->requestStack->getCurrentRequest(); $requestPage = $request->attributes->get('pageModel'); - if (is_int($requestPage)) { + if (is_numeric($requestPage)) { $requestPage = $pageAdapter->findByPk($requestPage); } diff --git a/src/Menu/NavigationModuleProvider.php b/src/Menu/NavigationModuleProvider.php index 5db79d9..ee019e0 100644 --- a/src/Menu/NavigationModuleProvider.php +++ b/src/Menu/NavigationModuleProvider.php @@ -51,7 +51,7 @@ public function get($name, array $options = []): ItemInterface $currentPage = null !== $request ? $request->attributes->get('pageModel') : null; - if (is_int($currentPage)) { + if (is_numeric($currentPage)) { $currentPage = $pageAdapter->findByPk($currentPage); } From b4016bee554e482a93cbfb1c4cb23a82754f60a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20K=C3=B6rner?= Date: Tue, 7 Feb 2023 15:02:27 +0100 Subject: [PATCH 3/3] fixed sub item handling --- src/Menu/MenuBuilder.php | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/Menu/MenuBuilder.php b/src/Menu/MenuBuilder.php index 71c9df5..f574e04 100644 --- a/src/Menu/MenuBuilder.php +++ b/src/Menu/MenuBuilder.php @@ -86,15 +86,17 @@ public function getMenu(ItemInterface $root, int $pid, $level = 1, $host = null, // Check whether there will be subpages if ($page->subpages > 0) { - $this->getMenu($item, (int) $page->id, $level++, $host, $options); + $level++; $childRecords = Database::getInstance()->getChildRecords($page->id, 'tl_page'); - if (!$options['showLevel'] - || $options['showLevel'] >= $level - || (!$options['hardLimit'] - && ((null !== $requestPage && $requestPage->id === $page->id) || \in_array($requestPage->id, $childRecords, true)))) { - $item->setDisplayChildren(false); + + $item->setDisplayChildren(false); + if (!$options['showLevel'] || $options['showLevel'] >= $level || ( + !$options['hardLimit'] && ($requestPage->id == $page->id || \in_array($requestPage->id, $childRecords)))) { + $item->setDisplayChildren(true); } + + $this->getMenu($item, (int) $page->id, $level, $host, $options); } switch ($page->type) {