diff --git a/core/Entity/Site/Node.php b/core/Entity/Site/Node.php index 10bd792..6e530ef 100644 --- a/core/Entity/Site/Node.php +++ b/core/Entity/Site/Node.php @@ -334,6 +334,19 @@ class Node implements EntityInterface return $string->startsWith('http://') || $string->startsWith('https://'); } + public function hasAppUrl(): bool + { + $string = u($this->getUrl()); + + foreach (['tel:', 'fax:', 'mailto:'] as $prefix) { + if ($string->startsWith($prefix)) { + return true; + } + } + + return false; + } + public function getIsVisible(): ?bool { return $this->isVisible; diff --git a/core/EventSuscriber/Site/NodeEventSubscriber.php b/core/EventSuscriber/Site/NodeEventSubscriber.php index 8291623..9b57909 100644 --- a/core/EventSuscriber/Site/NodeEventSubscriber.php +++ b/core/EventSuscriber/Site/NodeEventSubscriber.php @@ -133,7 +133,13 @@ class NodeEventSubscriber extends EntityManagerEventSubscriber $generatedUrl = $generatedUrl.'-'.$number; } - if (!u($generatedUrl)->startsWith('https://') && !u($generatedUrl)->startsWith('http://')) { + if ( + !u($generatedUrl)->startsWith('https://') + && !u($generatedUrl)->startsWith('http://') + && !u($generatedUrl)->startsWith('tel:') + && !u($generatedUrl)->startsWith('mailto:') + && !u($generatedUrl)->startsWith('fax:') + ) { $generatedUrl = '/'.$generatedUrl; $generatedUrl = preg_replace('#/{2,}#', '/', $generatedUrl); } diff --git a/core/Resources/views/site/tree_admin/navigation.html.twig b/core/Resources/views/site/tree_admin/navigation.html.twig index a308f92..b077da6 100644 --- a/core/Resources/views/site/tree_admin/navigation.html.twig +++ b/core/Resources/views/site/tree_admin/navigation.html.twig @@ -87,6 +87,10 @@ + {% elseif node.hasAppUrl %} + + + {% else %} {% if not node.disableUrl %} {% if node.parameters|length %} diff --git a/core/Router/SiteRouteLoader.php b/core/Router/SiteRouteLoader.php index 8397d87..6452cee 100644 --- a/core/Router/SiteRouteLoader.php +++ b/core/Router/SiteRouteLoader.php @@ -57,6 +57,10 @@ class SiteRouteLoader extends Loader continue; } + if ($node->hasAppUrl()) { + continue; + } + if (null !== $node->getAliasNode()) { continue; }