Suh*_*has 6 sitecore sitecore7
假设我们有一个Item Product(其中包含en,jp,zh和u版本的版本).我如何在en,jp和zh中获得此项而不在ru中.
我尝试了下面的代码.
Item tempItem = Sitecore.Context.Database.GetItem(tempID);
foreach (var itemLanguage in tempItem.Languages)
{
//Do Something
}
Run Code Online (Sandbox Code Playgroud)
这里tempItem.Languages返回所有四种语言,我只期望三种语言,因为ru没有版本.
这是实现这一目标的正确方法吗?
您需要检查返回项的版本号.可能有更好的方法来实现这一点,但遵循您自己的代码示例,它看起来像这样:
Item tempItem = Sitecore.Context.Database.GetItem(tempID);
foreach (var itemLanguage in tempItem.Languages)
{
var item = tempItem.Database.GetItem(tempItem.ID, itemLanguage);
if (item.Versions.Count > 0)
{
// do something. If there is no "ru" version, this will be 0
}
}
Run Code Online (Sandbox Code Playgroud)
我进行了一项实验,以获取语言列表以及不同孩子数量的商品的版本数,以检查其在系统上的价格。
下面的脚本返回一个列表,其中列出了具有该项目版本的语言。
public static List<string> LanguagesWithContent(this Item item)
{
var result = ItemManager.GetContentLanguages(item).Select(lang => new {
lang.Name,
Versions = ItemManager.GetVersions(item, lang).Count
//this is better than db.GetItem(item.ID, lang).Versions.Count
}).Where(t => t.Versions > 0).Select(t => t.Name).ToList();
return result;
}
Run Code Online (Sandbox Code Playgroud)
结论:最好使用ItemManager.GetVersions(item,lang).Count比db.GetItem(item.ID,lang).Versions.Count来获取项目包含的语言版本列表。
1.9032ms获得具有1种语言版本的版本计数。加载时间:5.0206ms。郎斯:en
在这种情况下使用ItemManager.GetVersions(item,lang)。理论上说,GetItem应该给出类似的结果,因为后续的负载会利用缓存。