Render an 'Edit Menu' Button in the Experience Manager

Introduction

Goal

Enable webmasters to edit a site menu in the Channel Editor by rendering an Edit menu button.

Background

When a channel is edited in the CMS, an Edit menu button can be rendered next to a menu. Clicking that button will open the menu editor.

An edited menu is locked when it is changed. Other users can still view a locked menu, but they cannot edit it until the owner publishes or discards her changes. Opening a locked menu will show a message in the top-right corner saying "Menu locked by <user name>".

Enable a Menu to be Editable 

Only menus that are stored in the  hst:workspace can be editable. Menus stored outside the hst:workspace won't be editable in the Channel Editor. Trying to include the Edit menu button for these menus as described below won't show the button. See HST workspace configuration for more information.

Include the Edit Menu Button in a Template

The Edit menu button can be included in a template using the tag 'hst:cmseditmenu'. Its mandatory variable 'menu' accepts a bean of type org.hippoecm.hst.core.sitemenu.HstSiteMenu. For example, to render a button for an HstSiteMenu bean in a variable 'mainMenu', you can use:

JSP

<hst:cmseditmenu menu="${requestScope.mainMenu}"/>

Freemarker

<@hst.cmseditmenu menu=mainMenu />

The code above will output all the necessary HTML to render the Edit menu button when the channel is previewed inside the CMS. In other cases, the tag outputs nothing.

Position the Button

The best place for the Edit menu button depends very much on the layout of your channel. The position of the button can be tweaked with CSS.

Render Additional Markup around the Button

Sometimes the CSS of a channel requires that the Edit menu button is rendered inside some additional markup that is only needed to position the button correctly. A typical example is a menu whose items consist of <li> tags, and the CSS requires that the Edit menu is also rendered inside an <li> tag. This can be accomplished with the following JSP or Freemarker snippet:

JSP

<hst:defineObjects/>
<c:if test="${requestScope.hstRequestContext.preview}">
  <li>
    <hst:cmseditmenu menu="${requestScope.mainMenu}"/>
  </li>
</c:if>

Freemarker

<@hst.defineObjects/>
<#if hstRequestContext.preview>
  <li>
    <@hst.cmseditmenu menu=mainMenu />
  </li>
<#if> 

The additional <li> will only be rendered when the channel is rendered inside the Channel Editor.

Note that while the Edit menu button is only visible while Show components is enabled, the additional markup will always be rendered, so verify that it doesn't unintendedly alter the look of any pages in preview mode.

Did you find this page helpful?
How could this documentation serve you better?
On this page
    Did you find this page helpful?
    How could this documentation serve you better?