检查当前语言中是否存在项目?

bro*_*her 11 sitecore

我有一个Sitecore解决方案,其中启用了3种不同的语言.在页面顶部,有一个指向每种语言的链接.单击此链接后,将以所选语言显示您当前所在的页面.

但并非所有页面都翻译成所有语言.因此,如果我站在第x页上的英语,并且此页面仅提供英语和德语,但不提供中文,则不应显示中文链接.

所以问题是 - 如何检查当前项目是否具有特定语言的版本?

Sea*_*ney 15

要查看当前项目是否有版本,您可以执行以下操作: Sitecore.Context.Item.Versions.Count > 0

[更新评论]

我并不认为这是确定某个项目是否具有某种语言版本的最有效方法,但这可行:

bool hasVersion = HasLanguageVersion(Sitecore.Context.Item, "en");

private bool HasLanguageVersion(Sitecore.Data.Items.Item item, string languageName)
{
    var language = item.Languages.FirstOrDefault(l => l.Name == languageName);
    if (language != null)
    {
        var languageSpecificItem = global::Sitecore.Context.Database.GetItem(item.ID, language);
        if (languageSpecificItem != null && languageSpecificItem.Versions.Count > 0)
        {
            return true;
        }
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)


Ste*_*ope 6

您可以检索LanguageCollection项目内容语言的集合()(即项目具有内容的语言).

  LanguageCollection collection = ItemManager.GetContentLanguages(Sitecore.Context.Item);
  foreach (var lang in collection)
  {
      var itm = Sitecore.Context.Database.GetItem(Sitecore.Context.Item.ID,lang);                  
      if(itm.Versions.Count > 0)
      {
          Response.Write("Found language " + lang + "<br />");
      }
  }
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助 :)

NB:添加评论家伙..请不要随便编辑我的答案.这是粗鲁的高度.

编辑:更正..原来该方法没有考虑现有语言的版本.---

澄清一下,ItemManager.GetContentLanguages没有为您提供给定项目的语言列表.它提供了您选择在您的环境中包含的所有语言的列表.在引擎盖下,它做两件事(基于sitecore 7.2的反编译代码):

  1. 它调用LanguageManager.GetLanguages(item.Database));
  2. 它通过调用item.Database.DataManager.DataSource.GetLanguages(item.ID)添加到步骤1中尚未添加的任何语言;