使用Sitecore查询获取所有语言的儿童

Suh*_*has 0 sitecore

如何在所有语言中将所有儿童和大孩子置于家庭项目下,如果他们有该语言的版本?

我想使用Sitecore查询来实现这一点.

下面是我正在使用的代码.

//Getting the default "en" language
var contextLanguage = Sitecore.Context.Language.Name;
string query = "/sitecore/content/home//*";

//Getting items in en language
List<Item> items = database.SelectItems(query).ToList();
foreach (var language in languages)
{
    //Getting items in all language other than the default en language
    if (!string.Equals(contextLanguage, language))
    {
        //Changing the context language so as to get items in the particular language
        Sitecore.Context.Language = Sitecore.Globalization.Language.Parse(language);
        items.AddRange(database.SelectItems(query).ToList());
     }
}
//Ressetting the context to the default language
Sitecore.Context.Language = Sitecore.Globalization.Language.Parse(contextLanguage);
Run Code Online (Sandbox Code Playgroud)

注意:此处语言是网站中所有可用语言的集合.

上面的代码返回给我每个项目4(因为我们有4种语言),当他们没有特定语言的版本时,只有默认的en语言.

注意:我在网站中使用语言回退模块.这可能是一个原因吗?

有没有更好的方法来实现这一目标?

Jen*_*sen 6

请注意:如果您有超过100个后代,则不应该将后代轴用于家中的所有内容.这将无法执行,如果您使用Sitecore 6,如果Sitecore 7或Lucene索引,您应该查看Sitecore.ContentSearch.

但是,如果这是一次性任务或类似的任务,您可以执行以下操作:

//Iterate through your item collection
foreach (Item item in items)
{
    //Iterate through the languages the item has
    foreach (var language in item.Languages)
    {
        Item itemInSpecifLanguage = Sitecore.Context.Database.GetItem(item.ID, language);
        //Do whatever

    }
}
Run Code Online (Sandbox Code Playgroud)