我有一个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)
您可以检索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的反编译代码):
| 归档时间: |
|
| 查看次数: |
16571 次 |
| 最近记录: |