March 29, 2020
Estimated Post Reading Time ~

Component and Template level design dialogs in Template Editors in AEM

Template Editors is a feature in AEM, which everybody is using right now.
Clients also find it quite exciting, when creation of templates are in their hands.
But Template Editors create few myths in developers' minds and I have seen people write code based on the basis of myths so I thought of clearing the doubts and wrote about it.

Design Dialog is one of the features which we are using since long and to fetch the value of design dialog, we always use ${currentStyle.propertyName}.

The concept of design dialog is if you want to share the values of a component across all the pages created from a single template, we create design dialogs.

Myth: I have seen people saying that currentStyle doesn't work with dynamic templates so they always use the PolicyManager whether they really need it or not.

Their idea is because previously design_dialog values gets stored in /etc/design/default.. ,currentStyle is only meant for that but because the design dialog value is now inside” /conf/projectName/policies/…” so to fetch the value from policies we need to use PolicyManager API like shown below.

ContentPolicyManager policyManager = resourceResolver.adaptTo(ContentPolicyManager.class);
if (policyManager != null) {
ContentPolicy contentPolicy = policyManager.getPolicy(resource);
if (contentPolicy != null) {
title= (String) contentPolicy.getProperties().get("title");
}
}

But this is not correct. currentStyle can also handle design_dialog values stored inside the policies.

But i just kept on thinking if ${currentstyle.propertyName} works fine for design dialogs then why so much big logic to do the same thing.
So the answer is in template editors, we have two kinds of design dialogs.

Component Level: Like any older version of AEM, we can create design dialogs in the components and fetch the value using currentStyle.I already talk about it here.


Template Level: Now you can manage the page level design dialog value also and to fetch that value you need to use the PolicyManager API. You just need to pass “currentPage.getContentResource” as resource and you are able to fetch the value.

You can see the template level design values(Page Policy) from here:

Fig 1: Page Policy in a Template


Fig 2: Design Dialog for a Template

If you want to add a template policy then you add fields in the design_dialog of page component and you will able to see the options here.

Because the above logic works well for both "Component and Template Level design dialog", that's why developers like to create utility and use it for both.


By aem4beginner

No comments:

Post a Comment

If you have any doubts or questions, please let us know.