On-page editing outside CMS admin

Member since: 2012

I have a requirement that some registered users with specific role should be able to create articles, but they should not have access to CMS administration UI. Is there any built-in feature to support such case? As I remember EPiServer CMS 6 had on-page editing without CMS menus etc.

Currently I see only option to create custom page from where user posts all fields required to create article pages, but it duplicates CMS editing features for article page type.

#118429 Mar 06, 2015 9:06
  • Member since: 2008

    Had a simular request ones. Belive I used quick publish to solve it that time. 

    #118430 Mar 06, 2015 9:47
  • Member since: 2012

    The article about quick publish is for EPiServer 6, but I am using EPiServer 7.5/8.

    Another option I am looking at is to allow those users to access CMS, but hide as much as possible of admin features.

    I already got to showing only pages with Edit access in the page tree as described in this article: http://tedgustaf.com/blog/2013/4/hide-pages-in-the-page-tree-in-episerver-7/

    #118470 Edited, Mar 06, 2015 16:24
  • Member since: 2002

    Hi Maris!

    Since the EPiServer 7 editing interface is much more advanced and the parts fit together, for instance giving the ability to drag and drop pages and media into the editors, we decided to abandon the somewhat two more simplified editing "modes" that existed in EPiServer CMS 6, on page edit and simple editing. You can modify the views to suite certain roles as described here: 

    http://world.episerver.com/blogs/Linus-Ekstrom/Dates/2013/2/Modifying-the-EPiServer-UI-views/

    Also, I can mention that I'm somewhat helping out on a prototype project to add templates to EPiServer. The idea is to have an gadget with templates and to be able to create new items from the templates, for instance "New article", "New news page" etc. This is still in early prototyping but is might be something that could solve this need, combined with a modified view.

    #118567 Mar 10, 2015 11:10
  • Member since: 2012

    Thanks Linus!

    It seems that allowing those users to access admin mode is fine and could be adjusted as needed with these solutions:

    http://tedgustaf.com/blog/2013/4/hide-pages-in-the-page-tree-in-episerver-7/

    http://world.episerver.com/blogs/Linus-Ekstrom/Dates/2013/2/Modifying-the-EPiServer-UI-views/

    Also I am building the page to help users to start page creation by filling required values and after page creation redirect to edit mode. Now I need to get the page Edit URL.

    Is there any builtin method to get page Edit URL?

    #118568 Edited, Mar 10, 2015 11:17
  • Member since: 2002

    The class EPiServer.Cms.Shell.IContentExtensions has a number of extension methods you can use. GetUri is the simplest and will create a URI for the current mode (site, preview or edit). There is also more specific methods that will give you more control, such as getting the URL for a pre-defined mode.

    #118570 Mar 10, 2015 11:34
  • Member since: 2012

    Just tested - GetUri works great!

    Here is the sample:

    using EPiServer.Cms.Shell;
    
    ...
    
    var newPage = _contentRepository.GetDefault<PageData>(parentLink, contentType.ID, LanguageSelector.AutoDetect());
    newPage.Name = "Page name";
    _contentRepository.Save(newPage, SaveAction.Save);
    
    var editUri = newPage.GetUri();
    
    ...

    #118572 Mar 10, 2015 11:49
  • Member since: 2012

    Actually GetUri did not work as I wanted. It returns only part of edit URL. For example, "epi.cms.contentdata:///1995_5754".

    I did some research and found solution in ContentSearchProviderBase constructor. Using this solution created extension method which returns full edit URL:

    public static string GetEditUrl(this IContent content, string languageName = null, bool relativeUrl = true)
    {
    	var cmsEditUrl = GetSiteEditUrl(relativeUrl);
    
    	var contentEditUri = content.GetUri(true);
    
    	return !string.IsNullOrWhiteSpace(languageName) 
    		? string.Format("{0}?language={1}#context={2}", cmsEditUrl, languageName, contentEditUri) 
    		: string.Format("{0}?#context={1}", cmsEditUrl, contentEditUri);
    }
    
    private static string GetSiteEditUrl(bool relativeUrl)
    {
    	var cmsEditUrl = SiteDefinition.Current.GetFullUrlToEditView(null);
    	return relativeUrl 
    		? new Uri(cmsEditUrl).PathAndQuery 
    		: cmsEditUrl;
    }

    #118583 Mar 10, 2015 13:50
This topic is locked because the last reply was posted more than 6 months ago. Please contact epw@episerver.com to unlock it.