获取具有版本的所有语言的项目

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没有版本.

这是实现这一目标的正确方法吗?

Mar*_*idy 8

您需要检查返回项的版本号.可能有更好的方法来实现这一点,但遵循您自己的代码示例,它看起来像这样:

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)


Bra*_*ath 5

我进行了一项实验,以获取语言列表以及不同孩子数量的商品的版本数,以检查其在系统上的价格。

下面的脚本返回一个列表,其中列出了具有该项目版本的语言。

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)

标杆绩效

使用GetVersions首次加载-当数据不是来自缓存时

  • 0.7298ms获得具有8种语言版本的版本计数。加载时间:9.3041ms。朗格:es-ES,es-MX,sv-SE,en,it-IT,pt-BR,fr-FR,de-DE
  • 0.0448ms获得具有7种语言版本的版本计数。加载时间:2.0039ms。语言:es-ES,es-MX,en,it-IT,fr-FR,de-DE,ro-RO
  • 0.0334ms获得具有6种语言版本的版本计数。加载时间:3.145ms。语言:es-ES,es-MX,en,it-IT,fr-FR,de-DE
  • 0.0307ms获得具有5种语言版本的版本计数。加载时间:1.5976ms。语言:es-MX,en,it-IT,fr-FR,de-DE
  • 0.0353ms获得具有4种语言版本的版本计数。加载时间:10.2764ms。语言:en,de-DE,ja-JP,da
  • 0.0258ms获得具有3种语言版本的版本计数。加载时间:1.9507ms。语言:en,de-DE,ja-JP
  • 0.0193ms可获得2种语言版本的版本计数。加载时间:2.0533ms。郎斯:en,de-DE
  • 0.0201毫秒以获取具有1种语言版本的版本计数。加载时间:4.7689ms。郎斯:en

使用GetItem而不是GetVersions重复1st Load实验

结论:最好使用ItemManager.GetVersions(item,lang).Count比db.GetItem(item.ID,lang).Versions.Count来获取项目包含的语言版本列表。

  • 3.4936ms获得具有8种语言版本的版本计数。加载时间:8.9118ms。朗格:es-ES,es-MX,sv-SE,en,it-IT,pt-BR,fr-FR,de-DE
  • 0.9966ms获得具有7种语言版本的版本计数。加载时间:1.6489ms。语言:es-ES,es-MX,en,it-IT,fr-FR,de-DE,ro-RO
  • 1.0875ms可获得6种语言版本的版本计数。加载时间:3.1538ms。语言:es-ES,es-MX,en,it-IT,fr-FR,de-DE
  • 0.5891ms获得具有5种语言版本的版本计数。加载时间:1.4402ms。语言:es-MX,en,it-IT,fr-FR,de-DE
  • 2.2096ms可获得4种语言版本的版本计数。加载时间:9.8701ms。语言:en,de-DE,ja-JP,da
  • 0.9255ms获得具有3种语言版本的版本计数。加载时间:2.5175ms。语言:en,de-DE,ja-JP
  • 0.7606ms可获得2种语言版本的版本计数。加载时间:2.2407ms。郎斯:en,de-DE
  • 1.9032ms获得具有1种语言版本的版本计数。加载时间:5.0206ms。郎斯:en

    后续加载-已缓存项目

    在这种情况下使用ItemManager.GetVersions(item,lang)。理论上说,GetItem应该给出类似的结果,因为后续的负载会利用缓存。

  • 0.569ms获得具有8种语言版本的版本计数。加载时间:0.0372ms。语言:es -ES,es-MX,sv-SE,en,it-IT,pt-BR,fr-FR,de-DE
  • 0.0429ms获得具有7种语言版本的版本计数。加载时间:0.0475ms。语言:es-ES,es-MX,en,it-IT,fr-FR,de-DE,ro-RO
  • 0.025ms获得6种语言版本的版本计数。加载时间:0.0247ms。语言:es-ES,es-MX,en,it-IT,fr-FR,de-DE
  • 0.0239ms获得具有5种语言版本的版本计数。加载时间:0.0201ms。语言:es-MX,en,it-IT,fr-FR,de-DE
  • 0.0342ms获得具有4种语言版本的版本计数。加载时间:0.0216ms。语言:en,de-DE,ja-JP,da
  • 0.0258ms获得具有3种语言版本的版本计数。加载时间:0.0197ms。语言:en,de-DE,ja-JP
  • 0.0228ms获得具有2种语言版本的版本计数。加载时间:0.019ms。郎斯:en,de-DE
  • 0.0228ms以获取具有1种语言版本的版本计数。加载时间:0.0178ms。郎斯:en