wilsjd
wilsjd

Reputation: 2248

In Sitecore, how to change or set PageMode

In Sitecore, I have users who are using the editing ribbon to add content to pages. However, there are some pages that I want to prevent EditMode completely from that user's role. This is based off of a branch template, so I can't just revoke privileges for each page. I need some way to set the Sitecore.Context.PageMode to be Normal.

Is there an API for setting the PageMode?

Upvotes: 1

Views: 2307

Answers (3)

jammykam
jammykam

Reputation: 16990

I would suggest that rather than redirecting the user/hard-coding this to specific pages you make create a rule and make use of the Rules Engine. This will allow you to reuse the code and turn on-/off much easier through the content editor.

There is already a condition to select the role:

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

So you will just need to create an action to switch to Normal mode. In your action, you can call the following code:

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

Wrap it in a check like wilsjd has suggested.

Some info on the Rules Engine if you are not familiar with it:
Decoupling through the Rules Engine
All About the Sitecore ASP.NET CMS Rules Engine

Upvotes: 1

Martijn van der Put
Martijn van der Put

Reputation: 4082

your redirect method should work, but it also turns off the PageEditor mode for other pages the editor visits after the redirect.

You could also check if the Page is in EditMode and the user is part of a certain Role and for that (sub)layout show standard .NET controls instead of the Sitecore sc-controls.

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

Upvotes: 1

wilsjd
wilsjd

Reputation: 2248

While I was unable to find a C# API, I did find that I could just use a URL Redirect that looks something like this:

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

This will set the PageMode to Normal if it in any other state.

Upvotes: 1

Related Questions