From 8eb27b194fcc4c3eae593c61fdbf800f673f81a8 Mon Sep 17 00:00:00 2001 From: Harald Bamberger Date: Fri, 18 Sep 2026 17:12:30 +0200 Subject: [PATCH] add target attribute to redirect content menu entries, use entry target attribute if set when rendering cis4 menu --- .../controllers/api/frontend/v1/CisMenu.php | 15 +++++++++++++++ public/js/components/Cis/Menu/Entry.js | 16 +++------------- 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/application/controllers/api/frontend/v1/CisMenu.php b/application/controllers/api/frontend/v1/CisMenu.php index 163c337ae..439f52df6 100644 --- a/application/controllers/api/frontend/v1/CisMenu.php +++ b/application/controllers/api/frontend/v1/CisMenu.php @@ -91,6 +91,8 @@ class CisMenu extends FHCAPI_Controller $doc->loadXML($menuItem->content); $urlElem = $doc->getElementsByTagName('url')->item(0); + $this->menuItemUrlTargetHelper($menuItem, $doc); + if (!$urlElem) { return ''; } @@ -122,5 +124,18 @@ class CisMenu extends FHCAPI_Controller return $url; } + private function menuItemUrlTargetHelper($menuItem, $xmldoc) + { + if($menuItem->template_kurzbz === 'redirect') + { + $targetElem = $xmldoc->getElementsByTagName('target')->item(0); + $target = ($targetElem) ? $targetElem->textContent : ''; + if(!in_array($target, array('_self', '_top', '_blank'))) + { + $target = '_self'; + } + $menuItem->target = $target; + } + } } diff --git a/public/js/components/Cis/Menu/Entry.js b/public/js/components/Cis/Menu/Entry.js index a48173d8d..b8268fbc1 100644 --- a/public/js/components/Cis/Menu/Entry.js +++ b/public/js/components/Cis/Menu/Entry.js @@ -72,20 +72,10 @@ export default { return this.entry.url.startsWith(FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router) }, target() { - if (this.entry.template_kurzbz == 'redirect') { - if (!this.entry.content) - return ''; - let xmlDoc = (new DOMParser()).parseFromString(this.entry.content,"text/xml"); - let target = xmlDoc.getElementsByTagName('target')[0]; - if (!target) - return ''; - - target = target.childNodes[0].nodeValue + ""; - if (target == 'content' || target == '_self') - target = ""; - return target; + if (this.entry?.target) { + return this.entry.target; } - return '' + return '_self'; }, hasChilds() { return this.entry.childs && this.entry.childs.length !== 0;