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

时间:2014-02-01 16:27:35

标签: 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);

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

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

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

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

1 个答案:

答案 0 :(得分:6)

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

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

//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

    }
}