Customizing the Consoles (Touch-Optimized UI)

You are reading the Adobe Experience Manager 6.0 version of Customizing the Consoles (Touch-Optimized UI).

AEM provides various mechanisms to enable you to customize the consoles (and the page authoring functionality) of your authoring instance (touch-optimized UI).

  • Clientlibs
    Clientlibs allow you to extend the default implementation to realise new functionality, while reusing the standard functions, objects and methods. When customizing, you can create your own clientlib under /apps; for example to hold the code required for your custom component.
  • Overlays
    Overlays are based on node definitions and allow you to overlay the standard functionality (in /libs) with your own customized functionality (in /apps). When creating an overlay a 1:1 copy of the original is not required, as the sling resource merger allows for inheritance.

These can be used in many ways to extend your AEM consoles. A small selection are covered below (at a high level).

Note

For further information see:

This topic is also covered in the AEM Gems session - User interface customization for AEM 6.0.

Caution

You must not change anything in the /libs path.

This is because the content of /libs is overwritten the next time you upgrade your instance (and may well be overwritten when you apply either a hotfix or feature pack).

The recommended method for configuration and other changes is:

  1. Recreate the required item (i.e. as it exists in /libs) under /apps
  2. Make any changes within /apps

For example, the following locations within the /libs structure can be overlaid:

  • consoles (any consoles based on Granite UI pages); for example:
    • /libs/wcm/core/content
  • secondary (inner) rails; for example:
    • /libs/wcm/core/content/search
  • toolbar(s) (dependent on console; for example sites):
    • default
      /libs/wcm/core/content/sites/jcr:content/body/content/header/items/default
    • selection mode
      /libs/wcm/core/content/sites/jcr:content/body/content/header/items/selection
  • help menu options (dependent on console; for example sites):
    • /libs/wcm/core/content/sites/jcr:content/body/help
  • information shown on the card view (dependent on console; for example sites):
    • /libs/wcm/core/content/sites/jcr:content/body/content/content/items/childpages

Code Samples

Various packages have been made available on Github. These provide code samples related to the tasks covered on this page.

aem-admin-extension-new-console

aem-admin-extension-new-console is a sample package showing how to create a new AEM 6 console. This package provides a UI for managing Launches and adds a link in the navigation:

Code on GitHub

You can find the code of this page on GitHub

aem-admin-extension-customize-sites

aem-admin-extension-customize-sites is a sample package showing how to customize an existing AEM 6 admin console. This package provides updates to Sites administration:

Code on GitHub

You can find the code of this page on GitHub

Create a Custom Console

  1. You can create a custom console with related actions; for example, Launches:

    file

    This involves:

    • creating the root space definition of your new console; for example:
      • /apps/<yourProject>/admin/ext/launches
    • this can contain (according to requirements):
      • the corresponding clientlibs for custom actions and less/css definitions
        • /apps/<yourProject>/admin/ext/launches/clientlibs
      • components that need to be redefined/adjusted; for example, the breadcrumbs, datasource and the launch
        • /apps/<yourProject>/admin/ext/launches/components
      • the Granite UI page resource:
        • /apps/<yourProject>/admin/ext/launches/content/jcr:content
          property: sling:resourceType
      • the page definition of the console
        • /apps/<yourProject>/admin/ext/launches/content/jcr:content/head
        • /apps/<yourProject>/admin/ext/launches/content/jcr:content/body
    file

    To use the new console (for example in the rail for navigation) an ID is used, so that it can be explicitly referenced. The ID is used to connect the console and its navigation definition. The ID is defined in the rail node of the page; for example, for the Sites console: 

    • the rail node is:
      /libs/wcm/core/content/sites/jcr:content/body/rail
      • here the currentId property is defined:
        currentId = cq-sites

    For the Launches console example:

    • the node is:
      • /apps/<yourProject>/admin/ext/launches/content/jcr:content/body/rail
    • with the following properties:
      • currentId = cq-launches
      • sling:resourceType = granite/ui/components/endor/navcolumns
      • srcPath = cq/core/content/nav

Add New Navigation Option to Rail

  1. You can add a navigation entry in the rail (for example, a custom console such as Launches). 

    To do this, you create an overlay of:

    /libs/cq/core/content/nav

    In the /apps overlay:

    /apps/cq/core/content/nav

    Create the new nodes and properties:

    file
    • Extend navigation:
      • /apps/cq/core/content/nav/launches
    • Specify location in the tree:
      • property: sling:orderBefore
    • To create the connection, the id property references (i.e. must be the same as) the currentID property for the appropriate console:
      • property: id
      • value: same as for your console (e.g. cq-launches)
        for example: the same value as the currentId property on:
        /apps/<yourProject>/admin/ext/launches/content/jcr:content/body/rail

Add New Action to the Toolbar

  1. You can build your own components and include the corresponding client libraries for custom actions. For example, a Promote to Twitter action at:

    /apps/wcm/core/clientlibs/sites/js/twitter.js

    This can then be connected to a toolbar item on your console:

    /apps/<yourProject>/admin/ext/launches

    For example, in selection mode:

    content/jcr:content/body/content/header/items/selection/items/twitter

Restrict a Toolbar Action to a specific Group

  1. You can use a custom rendering condition to overlay the standard action and impose specific conditions that must be fulfilled before it is rendered.

    For example, create a component to control the renderconditions according to group:

    /apps/myapp/components/renderconditions/group

  2. To apply these to the Create Site action on the Sites console:

    /libs/wcm/core/content/sites

    Create the overlay:

    /apps/wcm/core/content/sites

  3. Then add the rendercondition for the action:

    jcr:content/body/content/header/items/default/items/create/items/createsite/rendercondition

    Using properties on this node you can define the groups allowed to perform the specific action; for example, administrators

Renaming a Rail Entry

  1. You can rename a navigation entry in the rail by overriding:

    /libs/cq/core/content/nav/sites/jcr:title

  2. Depending on how you want to configure your instance, you might want to consider the impact on:

    • The title as used in the toolbar:
      /libs/wcm/core/content/sites/jcr:content/body/title/rootTitle
    • The tab title in the window:
      /libs/wcm/core/content/sites/jcr:content/jcr:title
    • The entry in the breadcrumbs
      /libs/wcm/core/content/sites/jcr:content/body/breadcrumbs/rootTitle  

Remove Access to Navigation Option on Rail

  1. Open the user and/or group management and select the user/group you want to restrict access for.

    Note

    Avoid assigning/restricting permissions on a user-by-user basis. It is recommended to use groups.

  2. Remove access permissions to the appropriate node(s) under /libs/cq/core/content/nav/sites. These correlate to the navigation options in the rail:

    • projects
    • sites
    • apps
    • publications
    • forms
    • assets
    • communities
    • commerce
    • tools