【问题标题】:In Sitecore, how to change or set PageMode在 Sitecore 中,如何更改或设置 PageMode
【发布时间】:2012-12-04 22:09:21
【问题描述】:

在 Sitecore 中,我有一些用户正在使用编辑功能区向页面添加内容。但是,有些页面我想完全阻止该用户角色的 EditMode。这是基于分支模板的,所以我不能只撤销每个页面的权限。我需要一些方法将 Sitecore.Context.PageMode 设置为 Normal。

有设置PageMode的API吗?

【问题讨论】:

    标签: asp.net sitecore page-editor


    【解决方案1】:

    虽然我找不到 C# API,但我确实发现我可以使用如下所示的 URL 重定向:

            if (!Sitecore.Context.PageMode.IsNormal && !IsAdministrator())
            {
                String id = Sitecore.Context.Item.ID.ToString();
                Response.Redirect("/?sc_mode=normal&sc_itemid=" + id + "&sc_lang=en"); 
            }
    

    如果处于任何其他状态,这会将 PageMode 设置为 Normal。

    【讨论】:

      【解决方案2】:

      您的重定向方法应该可以工作,但它也会关闭编辑器在重定向后访问的其他页面的 PageEditor 模式。

      您还可以检查页面是否处于 EditMode 并且用户是某个角色的一部分,并且对于该(子)布局显示标准 .NET 控件而不是 Sitecore sc-controls。

      Like <asp:Literal /> instead of <sc:Text />
      

      【讨论】:

      • 这是一个很好的观点。就我而言,这实际上是需要的,但我可以看到这对某些人来说可能是个问题。
      【解决方案3】:

      我建议不要将用户重定向/硬编码到特定页面,而是创建一个规则并使用规则引擎。这将允许您重用代码并通过内容编辑器更轻松地打开/关闭。

      已经有选择角色的条件:

      /sitecore/system/Settings/Rules/Common/Conditions/Security/User Role
      

      因此,您只需创建一个操作即可切换到正常模式。在您的操作中,您可以调用以下代码:

      Context.Site.SetDisplayMode(Sitecore.Sites.DisplayMode.Normal, Sitecore.Sites.DisplayModeDuration.ResetAfterRequest);
      

      按照 wilsjd 的建议将其包裹在支票中。

      如果您不熟悉规则引擎,请提供一些信息:
      Decoupling through the Rules Engine
      All About the Sitecore ASP.NET CMS Rules Engine

      【讨论】:

      • 我非常喜欢 SetDisplayMode,但规则引擎在这个项目上对我不起作用。
      猜你喜欢
      • 2015-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-02
      • 2015-04-26
      • 1970-01-01
      • 2015-12-27
      相关资源
      最近更新 更多