Retrieve the Friendly URL of a Publishing Page
One of my first projects with SharePoint 2013 is building a SharePoint website. For the website we had to build a functionality that display’s the URL of specific pages.
For the website we are using Managed Navigation. Displaying URLs meant we wanted to display the friendly URLS. After searching for a while with ILSpy and looking at some MSDN articles:
I found out that the friendly URL can be retrieved by first getting a list of NavigationTerm items from a SharePoint list item. When you have a NavigationTerm you can retrieve the display URL of that term using the method “GetResolvedDisplayUrl”.
In short the code to retrieve the friendly URLs will look something like this.
public List<string> GetPagesUrls() {
//list for saving the urls
List<string> retVal = new List<string>();
//current web
SPWeb web = SPContext.Current.Web;
//check if the current web is a publishing weg
if (PublishingWeb.IsPublishingWeb(web)) {
//get the pages list id
Guid listId = PublishingWeb.GetPagesListId(web);
//retrieve the pages list
SPList pagesList = web.Lists[listId];
//itterate trough the pages
foreach (SPListItem item in pagesList.Items) {
//retrieve the terms used for the navigation (this can be multiple terms)
IList<NavigationTerm> terms = TaxonomyNavigation.GetFriendlyUrlsForListItem(item, false);
string url = string.Empty;
//check if the pages has terms associated with it
if (terms.Count > 0) {
//use the GetResolvedDisplayUrl to retrieve the page friendly urls
url = terms[0].GetResolvedDisplayUrl(string.Empty);
} else {
//if the page does not have any terms get the normal url
url = item.File.Url;
}