Retrieve page URL
You can programmatically retrieve the URL of a specific page using a number of methods.
You can get the URL of a page by calling the GetUrl method of the page node. To do so, perform the following:
- Get an instance of the page manager class.
- Find the page node using the page node ID.
- Call the
GetUrlmethod of the page node.
When calling theGetUrlmethod, you specify the culture. - The absolute URL is resolved by calling the
ResolveUrlmethod of theUrlPathclass.
using System;
using System.Linq;
using Telerik.Sitefinity.Modules.Pages;
using Telerik.Sitefinity.Services;
using Telerik.Sitefinity.Web;
namespace Telerik.Sitefinity.Documentation.CodeSnippets.DevGuide.SitefinityEssentials.Pages
{
public partial class PagesSnippets
{
public string GetUrlByPageNodeId(Guid pageNodeId, string targetCulture, bool resolveAsAbsolutUrl)
{
var manager = PageManager.GetManager();
// Get the pageNode
var pageNode = manager
.GetPageNodes()
.FirstOrDefault(x => x.Id == pageNodeId);
var culture = SystemManager.CurrentContext.AppSettings.GetCultureByName(targetCulture);
var url = String.Empty;
if (pageNode != null)
{
// Get the URL of the pageNode
url = pageNode.GetUrl(culture);
if (resolveAsAbsolutUrl)
{
// Get the absolute URL of the pageNode
url = UrlPath.ResolveUrl(url, true, true);
}
}
return url;
}
}
}
Alternatively, you can get the URL of a page by its ID using the sitemap node. To do so, perform the following:
- Get an instance of the current sitemap provider.
- Find the sitemap node using the page node ID.
- Cast the sitemap node to the
PageSiteNodeclass. - Call the
GetUrlmethod of thePageSiteNodeclass.
When calling theGetUrlmethod, you specify the culture and set the fallback behavior. - The absolute URL is resolved by calling the
ResolveUrlmethod of theUrlPathclass.
using System;
using Telerik.Sitefinity.Services;
using Telerik.Sitefinity.Web;
namespace Telerik.Sitefinity.Documentation.CodeSnippets.DevGuide.SitefinityEssentials.Pages
{
public partial class PagesSnippets
{
private string GetUrlByPageNodeIdAlternative(Guid pageNodeId, string targetCulture, bool resolveAsAbsolutUrl)
{
var siteMap = SiteMapBase.GetCurrentProvider();
// Get the siteMapNode
var siteMapNode = siteMap.FindSiteMapNodeFromKey(pageNodeId.ToString()) as PageSiteNode;
var culture = SystemManager.CurrentContext.AppSettings.GetCultureByName(targetCulture);
var url = String.Empty;
if (siteMapNode != null)
{
// Get the URL of the siteMapNode
url = siteMapNode.GetUrl(culture, false);
if (resolveAsAbsolutUrl)
{
// Get the absolute URL of the pageNode
url = UrlPath.ResolveUrl(url, true, true);
}
}
return url;
}
}
}
Retrieve the page edit mode URL
In addition to resolving the page browsing URL, some use case scenarios might require that you resolve programmatically the page edit mode URL. Each Sitefinity standard page can be edited directly by typing its edit mode URL in the browser. Most commonly this URL follows the pattern of PageLiveURL + /action/edit. Some complexity is added in the picture if you have additional page URLs, some customization in the way you are resolving them, or are working in multisite mode. While going to the Sitefinity backend UI and editing the desired page form the Pages menu is the most conventional approach, if you want to automate the task, or need to retrieve the page edit mode URL through code, refer to the below sample:
using System;
using Telerik.Sitefinity.Services;
using Telerik.Sitefinity.Web;
namespace Telerik.Sitefinity.Documentation.CodeSnippets.DevGuide.SitefinityEssentials.Pages
{
public partial class PagesSnippets
{
/// <summary>
/// Resolves the page edit mode URL
/// </summary>
/// <param name="pageNodeId"></param>
/// <param name="targetCulture"></param>
/// <param name="resolveAsAbsolutUrl"></param>
/// <returns>By default returns an aboslute URL, wich opens a the provided page in edit mode</returns>
private string GetEditUrlByPageNodeId(Guid pageNodeId, string targetCulture, bool resolveAsAbsolutUrl = true)
{
var url = String.Empty;
var siteMap = SiteMapBase.GetCurrentProvider();
// Get the siteMapNode
var siteMapNode = siteMap.FindSiteMapNodeFromKey(pageNodeId.ToString()) as PageSiteNode;
if (siteMapNode != null)
{
var culture = SystemManager.CurrentContext.AppSettings.GetCultureByName(targetCulture);
// Get the edit url for the page site node
url = siteMapNode.GetPageEditBackendUrl(culture);
if (resolveAsAbsolutUrl)
{
// Get the absolute edit URL of the page site node
url = UrlPath.ResolveUrl(url, true, true);
}
}
return url;
}
}
}