2015-11-09 31 views
2

我遇到了在荷兰语中定义的项目,它看起来像以下: enter image description here如何解释sitecore正在返回尚未创建的语言项目?

当我尝试通过查询它的父我找不到它找到了这个项目。

rootTagItem.Axes.GetDescendants() .... 

望着立即窗口我可以告诉父母包含的项目,但在英语,让我感到困惑?!

rootTagItem.Axes.GetDescendants() 
Sitecore.Data.Items.Item[23] 

Veehouderij-Varkens (en#[email protected]), id: {ED94B438-722B-498B-9499-84F749BB8429} 
Database: "web" 
Id: "{ED94B438-722B-498B-9499-84F749BB8429}" 
Language: "en" 
Name: "Veehouderij-Varkens" 
Version: "1" 

我们如何解释该项目在英文版尽管英文版本没有定义(见图片)的事实回来了?

马立克的回应被接受,因为他提供了解释它的链接。

+0

您正在使用哪个版本的Sitecore?你在使用语言后备? – jammykam

+0

我使用的是版本8,不知道如果我使用语言后备,我会研究它。 – krul

回答

5

这就是Sitecore的工作原理。

当此项目有其他语言版本时,即使没有您的语言版本,Sitecore也会返回此项目。

你需要做的是检查.Versions.Count()这样的:

rootTagItem.Axes.GetDescendants().Where(d => d.Versions.Count > 0); 

有人叫他们empty items。我不知道它是否是官方的Sitecore命名或不是。在Sitecore 8.1中,您可以强制Sitecore跳过它们。

您可以通过KevinBrechbühlEnforce language version presence for items in Sitecore 8.1博客上找到更多信息。

+0

谢谢Marek,我还不确定我是否了解您的回复。为什么sitecore会返回一个甚至没有定义的项目的英文版本? 相同的逻辑为什么sitecore不会在德语版本中返回项目? 我没有检查数据库,同时一切似乎正确,项目存储在荷兰与适当的价值,英语(鬼)版本不包含任何值...仍然困惑 – krul

+0

有些人称他们为空物品。我不知道这是官方的Sitecore命名。你可以在KevinBrechbühl博客http://ctor.io/enforce-language-version-presence-for-items-in-sitecore-8-1/ –

+0

上阅读更多关于他们的信息。感谢Marek,Kevin的链接解释了这个问题。 – krul