0

图例:我正在开展一个 Sitecore 项目,在该项目中,我们有一个具有单一内容树的多语言站点,其中大多数项目都有每种支持语言的版本。我想开发一种查询项目的简洁方法,该方法将排除当前上下文语言中没有版本的项目。

想法:我正在考虑使所有模板都从具有共享复选框列表字段的模板继承,以表示给定页面支持的语言。

注意:为了清楚起见,这与语言后备不同。我们想要隐藏尚未翻译成上下文语言的项目。

问题:是否有一种使用 Sitecore 管道的干净方法来执行此操作,这意味着 XSLT 和任何查询内容树的 API 代码不必每次都引用此共享模板字段?

4

3 回答 3

4

在 Sitecore Query 中没有很好的查询方法。您可以像这样从查询结果中检测和过滤它:

IEnumerable<Item> items = // some code
myItems.Where(x => x.Versions.Count > 0);

如果您希望在返回所有项目之前进行过滤,您的复选框想法是一种可能的解决方案,但当然容易与实际语言不同步。您还可以查看使用 Lucene 和 Advanced Database Crawler 模块将 DynamicField 打包到包含随后可以查询的版本的语言列表的索引中。当然,lucene 并不总是适合通用查询。

于 2012-06-06T13:25:59.863 回答
1

前段时间我也遇到过类似的问题。就我而言,我希望没有任何特定语言版本的页面返回 404 Page Not Found 而不是空白页面。我创建了一篇关于这个问题的博客文章,你可以找到http://www.cognifide.com/blogs/sitecore/sitecore-displaying-pages-without-a-language-version/

在您的情况下,我会说您不需要为您的页面添加任何复选框,只需检查 ig Item.Versions.Count是否大于 0。

于 2012-06-06T13:24:59.357 回答
0

您还可以使用 Alex Shyba 的 Partial Language Fallback Module 并将网站的 enforceVersionPresence 设置为 true,并在 Fallback.EnforceVersionPresenceTemplates 中指定基本模板 guid(例如在每个页面中使用的基本模板)。在基本的 GetItem 数据库命令中,他的代码将检查是否有当前上下文语言的语言版本,如果没有,则返回 null,这将自动从 sitecore 返回 404。

通过使用它而不是在 httpBeginRequest 管道中检查的东西,它还可以防止在使用 GetChildren 和多列表字段的 GetItems 方法时返回项目。

我在这里有一篇关于语言回退和强制版本存在主题的 10 篇博客系列文章:http ://www.sitecore.net/Community/Technical-Blogs/Elizabeth-Spranzani/Posts/2014/03/Fallback-Series-Post -3.aspx

谢谢,丽兹

于 2014-04-30T20:24:57.697 回答