2017-06-29 55 views
3

我們正在爲Sitecore編寫一個模塊,並且遇到了問題。Sitecore IsPageEditor和IsExperienceEditor

我們有一個管道中,我們做以下檢查:

if (Sitecore.Context.PageMode.IsExperienceEditor) 
{ 
    return; 
} 

的問題是,我們的一位客戶正在運行和舊版本Sitecore的的(8.0更新5),其中財產IsExperienceEditor不存在然而。請參閱Sitecore release notes進行下一次更新。

快速修復,我們使用了舊的過時屬性,該屬性是這樣的錯誤:

if (Sitecore.Context.PageMode.IsPageEditor) 
{ 
    return; 
} 

現在的問題是,有沒有什麼辦法,使我們可以測試Sitecore的版本,所以我們可以有向後兼容性在模塊中?

回答

3

您可以使用它在Sitecore的由你提到的這兩個特性的後臺執行的代碼:

if (Sitecore.Context.Site.DisplayMode == Sitecore.Sites.DisplayMode.Edit) 
{ 
    return; 
} 

我知道,使用Sitecore.Context.PageMode.IsExperienceEditor(或Sitecore.Context.PageMode.IsPageEditor)更優雅,但在一種情況,當你需要以支持舊版和新版Sitecore版本,這聽起來像是一個不錯的選擇。

+0

感謝這似乎工作。 –

0

IsPageEditor的不推薦使用的屬性仍然專門用於向後兼容的目的。 IsExperienceEditor只是一個重命名的屬性,它的作用與IsPageEditor一樣。

但是,您可以檢查一個屬性是否存在這樣的:

public static bool HasProperty(this object obj, string propertyName) 
{ 
    return obj.GetType().GetProperty(propertyName) != null; 
} 

另一種選擇是使兩個不同版本的模塊,如果實現變得不同版本Sitecore的的顯著不同。