Issue with PageSiteNode GetURL function when providing CultureInfo parameter
Hi. We have a Sitefinity 5.2 site with multiple cultures (en and en-GB) enabled.
I am trying to perform what should be the simple task of retrieving the URL of each language version of the current page.
The code below doesn't seem to work.
For instance on the home page currentPageSiteNode.GetUrl(availableCultureInfo, true) always returns ~/home regardless of the provided CultureInfo object. I would expect to see something like:
~/home
~/en-GB/home
My test code is below
PageSiteNode currentPageSiteNode = SiteMapBase.GetActualCurrentNode();System.Globalization.CultureInfo[] availableCultures = currentPageSiteNode.AvailableLanguages;string Html = String.Empty;foreach(System.Globalization.CultureInfo availableCultureInfo in availableCultures) Html += RouteHelper.GetAbsoluteUrl(currentPageSiteNode.GetUrl(availableCultureInfo, true)) + "<br />" + Environment.NewLine;Response.Write(Html);Hi Chris,
I'm currently using the code below in a multilingual 5.3 site. It's VB.NET, you can translate it to C# here.
Public Function SitefinityGetVirtualURLofPage(PageID As Guid, Culture As System.Globalization.CultureInfo) As String Dim ReturnValue As String = Nothing Try Dim UrlLocalizationService As Telerik.Sitefinity.Localization.UrlLocalizationStrategies.UrlLocalizationService = Telerik.Sitefinity.Abstractions.ObjectFactory.Resolve(Of Telerik.Sitefinity.Localization.UrlLocalizationStrategies.UrlLocalizationService)() If (UrlLocalizationService IsNot Nothing) Then Dim PageManager As Telerik.Sitefinity.Modules.Pages.PageManager = Telerik.Sitefinity.Modules.Pages.PageManager.GetManager() Dim PageNode As Telerik.Sitefinity.Pages.Model.PageNode = Nothing Try PageNode = PageManager.GetPageNode(PageID) Catch ex As Exception ReturnValue = Nothing End Try If (PageNode IsNot Nothing) Then ReturnValue = UrlLocalizationService.ResolvePageUrl(PageNode, Culture) End If End If Catch ex As Telerik.Sitefinity.SitefinityExceptions.ItemNotFoundException ' Log the error here ReturnValue = Nothing Catch ex As Exception ' Log the error here ReturnValue = Nothing End Try Return ReturnValue End FunctionI hope it's useful.
Thanks Arno. I appreciate the assistance. I'll give it a try this afternoon and report back.
Hi Chris,
For my projects I use this function:
/// <summary> /// Get a page url /// </summary> /// <param name="id"></param> /// <returns></returns> public static string GetPageUrl(Guid id) CultureInfo currentLanguage = Thread.CurrentThread.CurrentUICulture; UrlLocalizationService s = ObjectFactory.Resolve<UrlLocalizationService>(); var pm = PageManager.GetManager(); try return s.ResolvePageUrl(pm.GetPageNode(id), currentLanguage); catch (ItemNotFoundException) return string.Empty; Regards,
Daniel
Arno - Your solution works brilliantly for me thank you for posting!
Thank you Daniel - I'll give your code a try as well. I really appreciate your input.