From e1e0f34ea3dc70d293d9a5d9eacb86174d13a04d Mon Sep 17 00:00:00 2001 From: Dawid Czaja Date: Thu, 24 Aug 2023 09:36:57 +0200 Subject: [PATCH 1/2] #102193 Allow template folder to be set during menu declaration in xml file --- Block/Menu.php | 12 +++++++++++- Block/NodeType/AbstractNode.php | 2 +- Model/TemplateResolver.php | 16 ++++++++-------- 3 files changed, 20 insertions(+), 10 deletions(-) diff --git a/Block/Menu.php b/Block/Menu.php index 07a0853e..0a4e7a2d 100644 --- a/Block/Menu.php +++ b/Block/Menu.php @@ -128,6 +128,15 @@ public function getIdentities() ]; } + private function getMenuTemplateDir(): string + { + if (!$this->getData('menu_template_dir')) { + return $this->getData('menu'); + } + + return $this->getData('menu_template_dir'); + } + protected function getCacheLifetime() { return 60*60*24*365; @@ -400,6 +409,7 @@ private function getMenuNodeBlock($node) ->setNodeClasses($node->getClasses()) ->setMenuClass($this->getMenu()->getCssClass()) ->setMenuCode($this->getData('menu')) + ->setMenuTemplateDir($this->getMenuTemplateDir()) ->setTarget($node->getTarget()) ->setImage($node->getImage()) ->setImageUrl($node->getImage() ? $this->imageFile->getUrl($node->getImage()) : null) @@ -481,7 +491,7 @@ private function getMenuTemplate($template) { return $this->templateResolver->getMenuTemplate( $this, - $this->getData('menu'), + $this->getMenuTemplateDir(), $template ); } diff --git a/Block/NodeType/AbstractNode.php b/Block/NodeType/AbstractNode.php index 50179c3d..9e5d836a 100644 --- a/Block/NodeType/AbstractNode.php +++ b/Block/NodeType/AbstractNode.php @@ -157,7 +157,7 @@ protected function _toHtml() { $template = $this->templateResolver->getMenuTemplate( $this, - $this->getMenuCode(), + $this->getMenuTemplateDir(), $this->defaultTemplate, $this->getId() ); diff --git a/Model/TemplateResolver.php b/Model/TemplateResolver.php index 1493f8aa..ef1f2bd0 100755 --- a/Model/TemplateResolver.php +++ b/Model/TemplateResolver.php @@ -83,36 +83,36 @@ public function __construct( /** * @param Template $block - * @param string $menuId + * @param string $menuTemplateDir * @param string $template * @param int|null $nodeId * @return string */ - public function getMenuTemplate($block, $menuId, $template, $nodeId = null) + public function getMenuTemplate($block, $menuTemplateDir, $template, $nodeId = null) { - $mapId = $menuId . '-' . ($nodeId ? $nodeId . '-' : '') . $template; + $mapId = $menuTemplateDir . '-' . ($nodeId ? $nodeId . '-' : '') . $template; if (isset($this->templateMap[$mapId])) { return $this->templateMap[$mapId]; } $templateArr = explode('::', $template); if ($block->getCustomTemplate()) { - $newTemplate = $menuId + $newTemplate = $menuTemplateDir . DIRECTORY_SEPARATOR . $block->getCustomTemplateFolder() . $block->getCustomTemplate() . '.phtml'; } elseif (isset($templateArr[1])) { - $newTemplate = $templateArr[0] . '::' . $menuId . DIRECTORY_SEPARATOR . $templateArr[1]; + $newTemplate = $templateArr[0] . '::' . $menuTemplateDir . DIRECTORY_SEPARATOR . $templateArr[1]; } else { - $newTemplate = $menuId . DIRECTORY_SEPARATOR . $template; + $newTemplate = $menuTemplateDir . DIRECTORY_SEPARATOR . $template; } if (!$this->validator->isValid($block->getTemplateFile($newTemplate))) { - return $this->setTemplateMap($menuId, $template, $template, $nodeId); + return $this->setTemplateMap($menuTemplateDir, $template, $template, $nodeId); } - return $this->setTemplateMap($menuId, $newTemplate, $template, $nodeId); + return $this->setTemplateMap($menuTemplateDir, $newTemplate, $template, $nodeId); } /** From dd5ddbd3fc176a959ef6192c3753746eab730ea9 Mon Sep 17 00:00:00 2001 From: Dawid Czaja Date: Thu, 31 Aug 2023 14:03:17 +0200 Subject: [PATCH 2/2] #102193 Update custom template dir in submenu route --- Block/Menu.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Block/Menu.php b/Block/Menu.php index 0a4e7a2d..85db9ba6 100644 --- a/Block/Menu.php +++ b/Block/Menu.php @@ -432,7 +432,7 @@ private function getSubmenuBlock($nodes, $parentNode, $level = 0) $block = clone $this; $submenuTemplate = $parentNode->getSubmenuTemplate(); $submenuTemplate = $submenuTemplate - ? 'Snowdog_Menu::' . $this->getMenu()->getIdentifier() . "/menu/custom/sub_menu/{$submenuTemplate}.phtml" + ? 'Snowdog_Menu::' . $this->getMenuTemplateDir() . "/menu/custom/sub_menu/{$submenuTemplate}.phtml" : $this->submenuTemplate; $block->setSubmenuNodes($nodes)