Asp.net 仅为Sitecore中的特定站点嵌入语言
如何仅为Sitecore中的特定站点嵌入语言/区域设置 让我们假设我有我们的网站和网址,这将是 对于加拿大网站,我有两种语言,因此URL应该是这样的Asp.net 仅为Sitecore中的特定站点嵌入语言,asp.net,asp.net-mvc,sitecore,sitecore7,Asp.net,Asp.net Mvc,Sitecore,Sitecore7,如何仅为Sitecore中的特定站点嵌入语言/区域设置 让我们假设我有我们的网站和网址,这将是 对于加拿大网站,我有两种语言,因此URL应该是这样的 我不确定您是否可以开箱即用,但使用一个简单的链接提供程序,这应该是可能的。例如: 您可以将默认url选项设置为包含该语言 在LinkProvider中,您可以检测当前站点 如果当前站点不是您的美国站点,请返回base.GetItemUrl(项目,选项) 如果当前站点是您的美国站点,您可以基于参数中的选项创建新的URLPOINTS(“noLang
我不确定您是否可以开箱即用,但使用一个简单的链接提供程序,这应该是可能的。例如:
- 您可以将默认url选项设置为包含该语言
- 在LinkProvider中,您可以检测当前站点
- 如果当前站点不是您的美国站点,请返回
base.GetItemUrl(项目,选项)
- 如果当前站点是您的美国站点,您可以基于参数中的选项创建新的URLPOINTS(“noLangOptions”),但要使用
LanguageEmbedding。永不
并返回
base.GetItemUrl(item,noLangOptions)
语言嵌入
设置对所有站点都是全局设置。要使其特定于站点,您需要创建一个从默认的Sitecore.Links.LinkProvider
继承的自定义LinkProvider
,并在配置中指定它。比如:
<linkManager defaultProvider="custom">
<providers>
<clear/>
<add name="custom" type="MyNamespace.LinkProvider, AssemblyName" addAspxExtension="false" alwaysIncludeServerUrl="false" encodeNames="true" languageEmbedding="asNeeded" languageLocation="filePath"lowercaseUrls="false" shortenUrls="true" useDisplayName="false"/>
</providers>
</linkManager>
自定义提供程序需要根据上下文站点覆盖
languageEmbedding
选项(例如“始终”值)。由于您只能设置单个链接提供程序,且设置适用于解决方案的实例/用法,因此无法实现此目的
我以前在博客上写过一个我用来实现的解决方案,它本质上是一个交换链接提供程序,允许您定义多个链接提供程序,每个链接提供程序针对不同的站点具有不同的配置
这将允许您创建两个链接提供程序配置:
<linkManager>
<providers>
<add name="provider-site1" languageEmbedding="never" type="Sitecore.Links.LinkProvider, Sitecore.Kernel" ... />
<add name="provider-site2" languageEmbedding="always" type="Sitecore.Custom.Links.SpecificLinkProvider, Sitecore.Custom" ... />
</providers>
</linkManager>
然后将其修补以替换默认链接提供程序:
<linkManager>
<patch:attribute name="defaultProvider">custom</patch:attribute>
<providers>
<add name="custom" type="MyProject.SiteLinkProvider, MyProject" languageEmbedding="always" />
</providers>
</linkManager>
习俗
高质量的答案,除了语言嵌入之外的小添加提示,你也可以考虑切换特定网站的UpDebug名称,允许语言特定URL看到
public override string GetItemUrl(Sitecore.Data.Items.Item item, Sitecore.Links.UrlOptions options)
{
if (Sitecore.Context.Site.Name == "US-Site")
{
options.LanguageEmbedding = LanguageEmbedding.Never;
}
return base.GetItemUrl(item, options);
}
<linkManager>
<patch:attribute name="defaultProvider">custom</patch:attribute>
<providers>
<add name="custom" type="MyProject.SiteLinkProvider, MyProject" languageEmbedding="always" />
</providers>
</linkManager>