如果所有语言版本都是如此,如何将所有儿童和大孩子置于所有语言的家庭项目下?
我想使用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种语言),当他们没有使用默认语言的特定语言的版本时。
注意:我在网站中使用语言回退模块。这可能是个原因吗?
有没有更好的方法来实现这一目标?
答案 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
}
}