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;
}