Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 仅为Sitecore中的特定站点嵌入语言_Asp.net_Asp.net Mvc_Sitecore_Sitecore7 - Fatal编程技术网

Asp.net 仅为Sitecore中的特定站点嵌入语言

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

如何仅为Sitecore中的特定站点嵌入语言/区域设置

让我们假设我有我们的网站和网址,这将是

对于加拿大网站,我有两种语言,因此URL应该是这样的


我不确定您是否可以开箱即用,但使用一个简单的链接提供程序,这应该是可能的。例如:

  • 您可以将默认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>