Sitecore IsPageEditor 和 IsExperienceEditor

Sitecore IsPageEditor and IsExperienceEditor

我们目前正在为 Sitecore 编写一个模块,运行 遇到了问题。

我们有一个管道,我们在其中执行以下检查:

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

问题是我们的一位客户是 运行 和旧版本的 Sitecore(8.0 更新 5),其中 属性 IsExperienceEditor 尚不存在。请参阅 Sitecore release notes 以了解引入它的下一次更新。

为了快速修复错误,我们使用了旧的已弃用 属性,即:

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

现在的问题是,有没有什么方法可以测试 Sitecore 版本,以便我们可以在模块中实现向后兼容性?

您可以在您提到的两个属性的后台使用在 Sitecore 中执行的代码:

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

我知道使用 Sitecore.Context.PageMode.IsExperienceEditor(或 Sitecore.Context.PageMode.IsPageEditor)更优雅,但在需要同时支持新旧 Sitecore 版本的情况下,这听起来是个不错的选择。

IsPageEditor 中弃用的 属性 仍然存在,专门用于向后兼容。 IsExperienceEditor 只是重命名后的 属性,其功能与 IsPageEditor 相同。

但是您可以像这样检查 属性 是否存在:

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

另一个选择是制作两个不同版本的模块,如果不同版本的 Sitecore 的实现明显不同的话。