Sitecore仅返回当前语言版本的项目

时间:2012-06-05 20:29:29

标签: sitecore

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

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

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

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

3 个答案:

答案 0 :(得分:4)

在Sitecore查询中查询它的方法不是很好。您可以从查询结果中检测并过滤它,如下所示:

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

如果您希望在返回所有项目之前进行过滤,那么您的复选框构思是一种可能的解决方案,但当然很容易被实际语言所淹没。您还可以查看使用Lucene和高级数据库爬网程序模块将DynamicField打包到索引中,该索引包含具有可以查询的版本的语言列表。当然,lucene并不总是适用于通用查询。

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

您还可以使用Alex Shyba的部分语言回退模块,并为站点将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

谢谢, 利兹

相关问题