Merge pull request #4097 from sbwalker/dev
fix SiteMap so that it supports page Urls
This commit is contained in:
commit
ba38853406
|
@ -47,14 +47,23 @@ namespace Oqtane.Pages
|
||||||
var sitemap = new List<Sitemap>();
|
var sitemap = new List<Sitemap>();
|
||||||
|
|
||||||
// build site map
|
// build site map
|
||||||
|
var rooturl = _alias.Protocol + (string.IsNullOrEmpty(_alias.Path) ? _alias.Name : _alias.Name.Substring(0, _alias.Name.IndexOf("/")));
|
||||||
var moduleDefinitions = _moduleDefinitions.GetModuleDefinitions(_alias.SiteId).ToList();
|
var moduleDefinitions = _moduleDefinitions.GetModuleDefinitions(_alias.SiteId).ToList();
|
||||||
var pageModules = _pageModules.GetPageModules(_alias.SiteId);
|
var pageModules = _pageModules.GetPageModules(_alias.SiteId);
|
||||||
foreach (var page in _pages.GetPages(_alias.SiteId))
|
foreach (var page in _pages.GetPages(_alias.SiteId))
|
||||||
{
|
{
|
||||||
if (_userPermissions.IsAuthorized(null, PermissionNames.View, page.PermissionList) && page.IsNavigation)
|
if (_userPermissions.IsAuthorized(null, PermissionNames.View, page.PermissionList) && page.IsNavigation)
|
||||||
{
|
{
|
||||||
var rooturl = _alias.Protocol + (string.IsNullOrEmpty(_alias.Path) ? _alias.Name : _alias.Name.Substring(0, _alias.Name.IndexOf("/")));
|
var pageurl = rooturl;
|
||||||
sitemap.Add(new Sitemap { Url = rooturl + Utilities.NavigateUrl(_alias.Path, page.Path, ""), ModifiedOn = DateTime.UtcNow });
|
if (string.IsNullOrEmpty(page.Url))
|
||||||
|
{
|
||||||
|
pageurl += Utilities.NavigateUrl(_alias.Path, page.Path, "");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
pageurl += (page.Url.StartsWith("/") ? "" : "/") + page.Url;
|
||||||
|
}
|
||||||
|
sitemap.Add(new Sitemap { Url = rooturl + pageurl, ModifiedOn = DateTime.UtcNow });
|
||||||
|
|
||||||
foreach (var pageModule in pageModules.Where(item => item.PageId == page.PageId))
|
foreach (var pageModule in pageModules.Where(item => item.PageId == page.PageId))
|
||||||
{
|
{
|
||||||
|
|
|
@ -21,86 +21,50 @@ namespace Oqtane.Shared
|
||||||
return $"{type.Namespace}, {assemblyName}";
|
return $"{type.Namespace}, {assemblyName}";
|
||||||
}
|
}
|
||||||
|
|
||||||
public static (string UrlParameters, string Querystring, string Fragment) ParseParameters(string url)
|
public static (string UrlParameters, string Querystring, string Fragment) ParseParameters(string parameters)
|
||||||
{
|
{
|
||||||
// /path/urlparameters
|
|
||||||
// /urlparameters /urlparameters?Id=1 /urlparameters#5 /urlparameters?Id=1#5 /urlparameters?reload#5
|
// /urlparameters /urlparameters?Id=1 /urlparameters#5 /urlparameters?Id=1#5 /urlparameters?reload#5
|
||||||
// Id=1 Id=1#5 reload#5 reload
|
// Id=1 Id=1#5 reload#5 reload
|
||||||
// #5
|
// #5
|
||||||
|
|
||||||
if (!url.Contains("://"))
|
// create absolute url to convert to Uri
|
||||||
{
|
parameters = (!parameters.StartsWith("/") && !parameters.StartsWith("#") ? "?" : "") + parameters;
|
||||||
if (!url.StartsWith("/")) // urlparameters always start with "/"
|
parameters = Constants.PackageRegistryUrl + parameters;
|
||||||
{
|
var uri = new Uri(parameters);
|
||||||
url = ((!url.StartsWith("#")) ? "?" : "/") + url;
|
|
||||||
}
|
|
||||||
url = Constants.PackageRegistryUrl + url; // create absolute url
|
|
||||||
}
|
|
||||||
|
|
||||||
var uri = new Uri(url);
|
|
||||||
var querystring = uri.Query.Replace("?", "");
|
var querystring = uri.Query.Replace("?", "");
|
||||||
var fragment = uri.Fragment.Replace("#", "");
|
var fragment = uri.Fragment.Replace("#", "");
|
||||||
var urlparameters = uri.LocalPath;
|
var urlparameters = uri.LocalPath;
|
||||||
urlparameters = (urlparameters == "/") ? "" : urlparameters;
|
urlparameters = (urlparameters == "/") ? "" : urlparameters;
|
||||||
|
|
||||||
if (urlparameters.Contains(Constants.UrlParametersDelimiter))
|
|
||||||
{
|
|
||||||
urlparameters = urlparameters.Substring(urlparameters.IndexOf(Constants.UrlParametersDelimiter) + 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
return (urlparameters, querystring, fragment);
|
return (urlparameters, querystring, fragment);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static (string Path, string Parameters) ParsePath(string url)
|
|
||||||
{
|
|
||||||
url = ((!url.StartsWith("/") && !url.Contains("://")) ? "/" : "") + url;
|
|
||||||
|
|
||||||
(string path, string querystring, string fragment) = ParseParameters(url);
|
|
||||||
|
|
||||||
var uriBuilder = new UriBuilder
|
|
||||||
{
|
|
||||||
Path = path,
|
|
||||||
Query = querystring,
|
|
||||||
Fragment = fragment
|
|
||||||
};
|
|
||||||
|
|
||||||
return (uriBuilder.Path, uriBuilder.Uri.Query + uriBuilder.Uri.Fragment);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static string NavigateUrl(string alias, string path, string parameters)
|
public static string NavigateUrl(string alias, string path, string parameters)
|
||||||
{
|
{
|
||||||
|
string querystring = "";
|
||||||
|
string fragment = "";
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(parameters))
|
if (!string.IsNullOrEmpty(parameters))
|
||||||
{
|
{
|
||||||
// parse path
|
|
||||||
(path, _) = ParsePath(path);
|
|
||||||
|
|
||||||
// parse parameters
|
// parse parameters
|
||||||
(string urlparameters, string querystring, string fragment) = ParseParameters(parameters);
|
(string urlparameters, querystring, fragment) = ParseParameters(parameters);
|
||||||
|
|
||||||
// add urlparameters to path
|
|
||||||
if (!string.IsNullOrEmpty(urlparameters))
|
if (!string.IsNullOrEmpty(urlparameters))
|
||||||
{
|
{
|
||||||
if (urlparameters.StartsWith("/")) urlparameters = urlparameters.Substring(1);
|
path += (path.EndsWith("/") ? "" : "/") + $"{Constants.UrlParametersDelimiter}/{urlparameters.Substring(1)}";
|
||||||
path += (path.EndsWith("/") ? "" : "/") + $"{Constants.UrlParametersDelimiter}/{urlparameters}";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// build url
|
|
||||||
var uriBuilder = new UriBuilder
|
|
||||||
{
|
|
||||||
Path = !string.IsNullOrEmpty(alias)
|
|
||||||
? (!string.IsNullOrEmpty(path)) ? $"{alias}{path}": $"{alias}"
|
|
||||||
: $"{path}",
|
|
||||||
Query = querystring,
|
|
||||||
Fragment = fragment
|
|
||||||
};
|
|
||||||
path = uriBuilder.Uri.PathAndQuery;
|
|
||||||
}
|
}
|
||||||
else
|
|
||||||
|
// build url
|
||||||
|
var uriBuilder = new UriBuilder
|
||||||
{
|
{
|
||||||
path = ((!string.IsNullOrEmpty(alias)) ? alias + (!path.StartsWith("/") ? "/" : "") : "") + path;
|
Path = !string.IsNullOrEmpty(alias)
|
||||||
}
|
? (!string.IsNullOrEmpty(path)) ? $"{alias}{path}": $"{alias}"
|
||||||
|
: $"{path}",
|
||||||
|
Query = querystring,
|
||||||
|
Fragment = fragment
|
||||||
|
};
|
||||||
|
|
||||||
return path;
|
return uriBuilder.Uri.PathAndQuery;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static string EditUrl(string alias, string path, int moduleid, string action, string parameters)
|
public static string EditUrl(string alias, string path, int moduleid, string action, string parameters)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user