【问题标题】:Sitecore return only items with versions in the current languageSitecore 仅返回当前语言版本的项目
【发布时间】:2012-06-09 21:25:39
【问题描述】:

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

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

注意:需要明确的是,这与语言回退不同。我们想要隐藏未翻译成上下文语言的项目。

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

【问题讨论】:

    标签: sitecore


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

        您还可以使用 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

        谢谢, 丽兹

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-11-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多