Skip to content

Instantly share code, notes, and snippets.

@arvindchourasiya
Forked from jammykam/SwitchingLinkProvider
Created July 21, 2016 13:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save arvindchourasiya/bc6c1cbe99503ebbd4045285af82342c to your computer and use it in GitHub Desktop.
Save arvindchourasiya/bc6c1cbe99503ebbd4045285af82342c to your computer and use it in GitHub Desktop.
Sitecore Site Specific Link Provider
<linkManager>
<providers>
<add name="provider-site1" type="Sitecore.Links.LinkProvider, Sitecore.Kernel" addAspxExtension="false" languageEmbedding="never" useDisplayName="true" ... />
<add name="provider-site2" type="Sitecore.Custom.LinkProvider, Sitecore.Custom" alwaysIncludeServerUrl="true" languageEmbedding="always" lowercaseUrls="true" />
</providers>
</linkManager>
<sites>
<site name="site1" linkProvider="provider-site1" ... />
<site name="site2" linkProvider="provider-site2" ... />
<site name="site3" ... />
</sites>
<linkManager>
<patch:attribute name="defaultProvider" value="switcher" />
<providers>
<add name="switcher" fallback="sitecore" type="Sitecore.Custom.Links.SwitchingLinkProvider, Sitecore.Custom" />
</providers>
</linkManager>
using System;
using System.Collections.Specialized;
using System.Web;
using Sitecore.Data.Items;
using Sitecore.Diagnostics;
using Sitecore.Links;
using Sitecore.Web;
namespace Sitecore.Custom.Links
{
public class SwitchingLinkProvider : Sitecore.Links.LinkProvider
{
private const String FALLBACK_ATTRIBUTE_KEY = "fallback";
private const String LINKPROVIDER_ATTRIBUTE_KEY = "linkProvider";
private string Fallback { get; set; }
public override void Initialize(string name, NameValueCollection config)
{
base.Initialize(name, config);
this.Fallback = config[FALLBACK_ATTRIBUTE_KEY];
Assert.IsNotNullOrEmpty(this.Fallback, "fallback");
}
private Sitecore.Links.LinkProvider SiteLinkProvider
{
get
{
var siteLinkProvider = (Sitecore.Context.Site != null)
? Sitecore.Context.Site.Properties[LINKPROVIDER_ATTRIBUTE_KEY] : String.Empty;
if (String.IsNullOrEmpty(siteLinkProvider))
siteLinkProvider = this.Fallback;
return LinkManager.Providers[siteLinkProvider]
?? LinkManager.Providers[this.Fallback];
}
}
#region LinkProvider Options
public override bool AddAspxExtension
{
get
{
return SiteLinkProvider.AddAspxExtension;
}
}
public override bool AlwaysIncludeServerUrl
{
get
{
return SiteLinkProvider.AlwaysIncludeServerUrl;
}
}
public override bool EncodeNames
{
get
{
return SiteLinkProvider.EncodeNames;
}
}
public override LanguageEmbedding LanguageEmbedding
{
get
{
return SiteLinkProvider.LanguageEmbedding;
}
}
public override LanguageLocation LanguageLocation
{
get
{
return SiteLinkProvider.LanguageLocation;
}
}
public override bool LowercaseUrls
{
get
{
return SiteLinkProvider.LowercaseUrls;
}
}
public override bool ShortenUrls
{
get
{
return SiteLinkProvider.ShortenUrls;
}
}
public override bool UseDisplayName
{
get
{
return SiteLinkProvider.UseDisplayName;
}
}
#endregion
#region LinkProvider Methods
public override string ExpandDynamicLinks(string text, bool resolveSites)
{
return SiteLinkProvider.ExpandDynamicLinks(text, resolveSites);
}
public override UrlOptions GetDefaultUrlOptions()
{
return SiteLinkProvider.GetDefaultUrlOptions();
}
public override string GetItemUrl(Item item, UrlOptions options)
{
return SiteLinkProvider.GetItemUrl(item, options);
}
public override string GetDynamicUrl(Item item, LinkUrlOptions options)
{
return SiteLinkProvider.GetDynamicUrl(item, options);
}
public override bool IsDynamicLink(string linkText)
{
return SiteLinkProvider.IsDynamicLink(linkText);
}
public override DynamicLink ParseDynamicLink(string linkText)
{
return SiteLinkProvider.ParseDynamicLink(linkText);
}
public override RequestUrl ParseRequestUrl(HttpRequest request)
{
return SiteLinkProvider.ParseRequestUrl(request);
}
#endregion
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment