diff --git a/bin/Controls/Independent/Items/Anchor.html b/bin/Controls/Independent/Items/Anchor.html index ae2876edf419d20a61b0408ab1e9885f3f5bc8a6..a1b1ad94158777c357fabec00598f96ab0f6cea3 100644 --- a/bin/Controls/Independent/Items/Anchor.html +++ b/bin/Controls/Independent/Items/Anchor.html @@ -70,7 +70,25 @@ <span class="field-container-item"> {{anchor}} </span> - <input class="field-container-field" type="text" name="url"/> + <input class="field-container-field" + type="text" + name="url" + data-qui="controls/lang/InputMultiLang" + /> + </label> + </td> + </tr> + <tr> + <td> + <label class="field-container"> + <span class="field-container-item"> + {{site}} + </span> + <input class="field-container-field" + type="text" + name="site" + data-qui="controls/projects/project/site/Input" + /> </label> </td> </tr> diff --git a/bin/Controls/Independent/Items/Anchor.js b/bin/Controls/Independent/Items/Anchor.js index d0f3dac733c65a98f21c97c7e6372310b0d2e58d..cd6312e929c9f00032e4cb1e29b46fbf950df830 100644 --- a/bin/Controls/Independent/Items/Anchor.js +++ b/bin/Controls/Independent/Items/Anchor.js @@ -40,6 +40,7 @@ define('package/quiqqer/menu/bin/Controls/Independent/Items/Anchor', [ status : QUILocale.get('quiqqer/quiqqer', 'status'), statusDescription: QUILocale.get(lg, 'tpl.statusDescription'), + site : QUILocale.get(lg, 'tpl.Site'), title : QUILocale.get('quiqqer/quiqqer', 'title'), linkTitle: QUILocale.get(lg, 'tpl.linkTitle'), icon : QUILocale.get(lg, 'tpl.icon'), @@ -81,6 +82,10 @@ define('package/quiqqer/menu/bin/Controls/Independent/Items/Anchor', [ this.getElm().getElement('[name="status"]').set('checked', true); } + if (typeof data.site !== 'undefined') { + this.getElm().getElement('[name="site"]').set('value', data.site); + } + IndependentHandler.getTypeName(this.getAttribute('type')).then((name) => { const TH = this.getElm().getElement('th'); @@ -128,6 +133,7 @@ define('package/quiqqer/menu/bin/Controls/Independent/Items/Anchor', [ title: this.$Title.getValue(), icon : Form.elements.icon.value, data : { + site : Form.elements.site.value, url : Form.elements.url.value, status: Form.elements.status.checked ? 1 : 0, name : this.$Name.getValue() diff --git a/src/QUI/Menu/Independent/Items/Anchor.php b/src/QUI/Menu/Independent/Items/Anchor.php index 6aafd419c0677143d7a93de715220dc50e2306d2..d150d7a0a5cd750f4d1fe6daa6dea42bb764819e 100644 --- a/src/QUI/Menu/Independent/Items/Anchor.php +++ b/src/QUI/Menu/Independent/Items/Anchor.php @@ -5,6 +5,9 @@ use QUI; use function is_array; +use function is_string; +use function json_decode; +use function trim; /** * menu item to an anchor @@ -17,14 +20,59 @@ class Anchor extends AbstractMenuItem * @return string */ public function getUrl(): string + { + $Site = $this->getSite(); + $data = $this->getCustomData(); + $current = QUI::getLocale()->getCurrent(); + + if (!isset($data['url'])) { + return ''; + } + + $url = ''; + $anchor = []; + + if ($Site) { + try { + $url .= $Site->getUrlRewritten(); + } catch (QUI\Exception $Exception) { + } + } + + if (is_string($data['url'])) { + $anchor = json_decode($data['url'], true); + } + + if (is_array($anchor) && isset($anchor[$current])) { + $url .= '#' . trim($anchor[$current], '#'); + } + + return $url; + } + + /** + * @return QUI\Projects\Site|null + */ + public function getSite(): ?QUI\Projects\Site { $data = $this->getCustomData(); - if (is_array($data) && isset($data['url'])) { - return $data['url']; + if (!is_array($data) || !isset($data['site'])) { + return null; + } + + try { + $siteUrl = $data['site']; + $Site = QUI\Projects\Site\Utils::getSiteByLink($siteUrl); + } catch (QUI\Exception $Exception) { + return null; + } + + if ($Site->getAttribute('active')) { + return $Site; } - return ''; + return null; } //endregion