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

Sitecore仅返回具有当前语言版本的项目,sitecore,Sitecore,图例:我正在从事一个Sitecore项目,在该项目中,我们有一个具有单一内容树的多语言网站,其中大多数项目都有每种受支持语言的版本。我想开发一种干净的查询项目的方法,它将排除在当前上下文语言中没有版本的项目 Ideas:我在考虑让所有模板都从一个模板继承,该模板带有一个共享的复选框列表字段,以表示给定页面支持的语言 注意:为了清楚起见,这与语言回退不同。我们想隐藏尚未翻译成上下文语言的项目 问题:是否有一种干净的方法使用Sitecore管道来实现这一点,这意味着XSLT和任何查询内容树的API代

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

Ideas:我在考虑让所有模板都从一个模板继承,该模板带有一个共享的复选框列表字段,以表示给定页面支持的语言

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


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

我不久前遇到过类似的问题。在我的例子中,我希望没有任何特定语言版本的页面返回404未找到页面,而不是空白页面。我写了一篇关于这个问题的博文,你可以找到


在您的情况下,我想说您不需要为页面添加任何复选框,只需选中项。Versions.Count大于0。

我不久前遇到过类似的问题。在我的例子中,我希望没有任何特定语言版本的页面返回404未找到页面,而不是空白页面。我写了一篇关于这个问题的博文,你可以找到


在您的情况下,我想说您不需要为页面添加任何复选框,只需选中项。Versions.Count大于0。

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

IEnumerable<Item> items = // some code
myItems.Where(x => x.Versions.Count > 0);
IEnumerable items=//一些代码
其中(x=>x.Versions.Count>0);

如果您希望在返回所有项目之前进行筛选,您的复选框想法是一种可能的解决方案,但当然很容易与实际语言脱节。您还可以考虑使用Lucene和Advanced Database Crawler模块将一个DynamicField打包到索引中,该索引包含一个语言列表,这些语言具有可以查询的版本。当然,lucene并不总是适用于一般用途的查询。

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

IEnumerable<Item> items = // some code
myItems.Where(x => x.Versions.Count > 0);
IEnumerable items=//一些代码
其中(x=>x.Versions.Count>0);

如果您希望在返回所有项目之前进行筛选,您的复选框想法是一种可能的解决方案,但当然很容易与实际语言脱节。您还可以考虑使用Lucene和Advanced Database Crawler模块将一个DynamicField打包到索引中,该索引包含一个语言列表,这些语言具有可以查询的版本。当然,lucene并不总是适用于通用查询。

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

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

我在这里有一篇10篇关于语言回退和强制版本存在的博客系列文章:

谢谢,
Liz

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

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

我在这里有一篇10篇关于语言回退和强制版本存在的博客系列文章:

谢谢, 利兹