语言后备不适用于具有标准值的字段 (Sitecore 8.1)
Language Fallback not working for Fields with Standard Values (Sitecore 8.1)
我们遇到了一个问题,我们在基本模板的项目级别启用了后备语言设置,以便它适用于我们的所有项目。它对我们大约 90% 的项目有效,但对其他项目无效,即使 sitecore 内容编辑器表明它有效。
为遇到此问题的任何其他人将其放在这里。我没有找到具体的
在 Google 上找到了这个问题的解决方案,并且很幸运地解决了这个问题。希望这也能帮助其他人。
我们的设置是带有 Habitat Asp.net MVC
的 Sitecore 8.1
以下是通过将项目级别设置应用到基本模板来使语言后备适用于所有项目的一些步骤。
步骤 1
启用语言回退的第一步是设置回退树。
我们可以为语言建立一个层次结构(或简单的线性结构)来回退
示例:
在我们的例子中,我们会这样做:EN-NZ --> EN
这是通过在每个语言节点上设置后备语言来完成的/Sitecore/System/Languages:
步骤 2
接下来我们为网站启用语言回退功能。
在部署的网站上找到配置文件 Sitecore.LanguageFallback.config
并修改配置,以便应用以下设置:
<setting name="LanguageFieldFallback.AllowVaryFallbackSettingsPerLanguage" value="true" />
…
<sites>
<site name="shell">
<patch:attribute name="enableItemLanguageFallback">true</patch:attribute>
<patch:attribute name="enableFieldLanguageFallback">true</patch:attribute>
</site>
<site name="website">
<patch:attribute name="enableItemLanguageFallback">true</patch:attribute>
<patch:attribute name="enableFieldLanguageFallback">true</patch:attribute>
<patch:attribute name="enforceVersionPresence">true</patch:attribute>
</site>
</sites>
回收应用程序池
步骤 3
现在为网站启用了该功能,我们必须在项目级别启用该功能。
- 导航到 sitecore 内容编辑器中的项目并查看“高级”部分
- 如果高级部分不可见; select 查看选项卡并选中标准字段选项
- 选中启用项目回退选项。 (如果不存在语言版本,则显示后备语言的项目)
- 要将页面限制为某种语言,请选中强制版本存在选项。
如果找不到特定语言的版本,Sitecore 的默认行为是 return 一个空项目。当呈现一个项目或试图通过 Sitecore API 访问它时会发生这种情况。
如果请求的语言没有可用的版本,此选项允许您告诉 Sitecore 不要 return 一个项目。这最终会将用户重定向到 404(未找到)页面,或者在尝试通过 API.
获取项目时 returning NULL
我们可以在标准模板上应用这些设置,该设置将应用于继承它的所有项目
- 导航到标准模板
- 如果不存在则创建一个标准值
- 设置启用项目回退选项
这将使我们 90% 的项目和字段正常工作,但有一点需要注意;这仅适用于不从标准值继承其值的字段。
您可以通过在内容编辑器中查看项目轻松识别这些字段
这与“启用项目回退”选项如何也继承自标准模板的标准值以及 Sitecore 不会将设置应用于同样继承自标准值的字段有关。
要在这种情况下处理 fields/items,您需要执行以下两项操作之一:
- 修改项目上的字段,使其不继承标准值
或者:
- 在项目模板上创建标准值——它将继承标准模板的标准值中的启用项目回退选项
- 取消选中该选项并保存
- 重新勾选选项并保存,使其不再继承设置
- 现在启用项目后备选项没有被继承,它将被应用。从标准值继承的项目上的字段现在将回退并呈现
注意:
我认为这是一个错误,因为当您更改语言时,内容编辑器仍将字段显示为从后备语言继承其内容,但是在您执行上述方法之一之前,内容不会呈现在网站上
评论
- 还有字段级设置可以应用相同的设置。
- 另外值得注意的是,如果您遇到上述问题并在字段级别应用设置,在您执行上述步骤之前它仍然无法工作。
我遇到了类似的问题,这就是原因。
在我的例子中,我有一个从另一个数据源模板 DMother 继承的数据源模板 DChild。
DChild和DMother都有标准值
当我从 DChild 模板创建项目时,其值由 DChild 的标准值设置的所有字段的语言回退值都来自 DMother 标准值而不是 DChild 标准值。
这是因为回退未在 DChild 标准值中启用,但在 DMother 标准值中启用。
棘手吧?
我们遇到了一个问题,我们在基本模板的项目级别启用了后备语言设置,以便它适用于我们的所有项目。它对我们大约 90% 的项目有效,但对其他项目无效,即使 sitecore 内容编辑器表明它有效。
为遇到此问题的任何其他人将其放在这里。我没有找到具体的 在 Google 上找到了这个问题的解决方案,并且很幸运地解决了这个问题。希望这也能帮助其他人。
我们的设置是带有 Habitat Asp.net MVC
的 Sitecore 8.1以下是通过将项目级别设置应用到基本模板来使语言后备适用于所有项目的一些步骤。
步骤 1
启用语言回退的第一步是设置回退树。 我们可以为语言建立一个层次结构(或简单的线性结构)来回退 示例:
在我们的例子中,我们会这样做:EN-NZ --> EN
这是通过在每个语言节点上设置后备语言来完成的/Sitecore/System/Languages:
步骤 2
接下来我们为网站启用语言回退功能。 在部署的网站上找到配置文件 Sitecore.LanguageFallback.config 并修改配置,以便应用以下设置:
<setting name="LanguageFieldFallback.AllowVaryFallbackSettingsPerLanguage" value="true" />
…
<sites>
<site name="shell">
<patch:attribute name="enableItemLanguageFallback">true</patch:attribute>
<patch:attribute name="enableFieldLanguageFallback">true</patch:attribute>
</site>
<site name="website">
<patch:attribute name="enableItemLanguageFallback">true</patch:attribute>
<patch:attribute name="enableFieldLanguageFallback">true</patch:attribute>
<patch:attribute name="enforceVersionPresence">true</patch:attribute>
</site>
</sites>
回收应用程序池
步骤 3
现在为网站启用了该功能,我们必须在项目级别启用该功能。
- 导航到 sitecore 内容编辑器中的项目并查看“高级”部分
- 如果高级部分不可见; select 查看选项卡并选中标准字段选项
- 选中启用项目回退选项。 (如果不存在语言版本,则显示后备语言的项目)
- 要将页面限制为某种语言,请选中强制版本存在选项。 如果找不到特定语言的版本,Sitecore 的默认行为是 return 一个空项目。当呈现一个项目或试图通过 Sitecore API 访问它时会发生这种情况。 如果请求的语言没有可用的版本,此选项允许您告诉 Sitecore 不要 return 一个项目。这最终会将用户重定向到 404(未找到)页面,或者在尝试通过 API. 获取项目时 returning NULL
我们可以在标准模板上应用这些设置,该设置将应用于继承它的所有项目
- 导航到标准模板
- 如果不存在则创建一个标准值
- 设置启用项目回退选项
这将使我们 90% 的项目和字段正常工作,但有一点需要注意;这仅适用于不从标准值继承其值的字段。
您可以通过在内容编辑器中查看项目轻松识别这些字段
这与“启用项目回退”选项如何也继承自标准模板的标准值以及 Sitecore 不会将设置应用于同样继承自标准值的字段有关。
要在这种情况下处理 fields/items,您需要执行以下两项操作之一:
- 修改项目上的字段,使其不继承标准值 或者:
- 在项目模板上创建标准值——它将继承标准模板的标准值中的启用项目回退选项
- 取消选中该选项并保存
- 重新勾选选项并保存,使其不再继承设置
- 现在启用项目后备选项没有被继承,它将被应用。从标准值继承的项目上的字段现在将回退并呈现
注意: 我认为这是一个错误,因为当您更改语言时,内容编辑器仍将字段显示为从后备语言继承其内容,但是在您执行上述方法之一之前,内容不会呈现在网站上
评论
- 还有字段级设置可以应用相同的设置。
- 另外值得注意的是,如果您遇到上述问题并在字段级别应用设置,在您执行上述步骤之前它仍然无法工作。
我遇到了类似的问题,这就是原因。
在我的例子中,我有一个从另一个数据源模板 DMother 继承的数据源模板 DChild。 DChild和DMother都有标准值
当我从 DChild 模板创建项目时,其值由 DChild 的标准值设置的所有字段的语言回退值都来自 DMother 标准值而不是 DChild 标准值。
这是因为回退未在 DChild 标准值中启用,但在 DMother 标准值中启用。
棘手吧?