


This blog is an extension to show/hide page properties for multiple templates from my ex-colleague Ahmed Musallam’s post How to show/hide page properties based on a single template path. In AEM , editable templates usually share the same page component, which means the same page properties dialog. Below are the steps to show/hide page properties based on the template paths. Create a servlet package com.taqalytics.core.servlets; import java.io.IOException; import java.util.Arrays; import javax.servlet.Servlet; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import org.apache.commons.lang3.StringUtils; import org.apache.sling.api.SlingHttpServletRequest; import org.apache.sling.api.SlingHttpServletResponse; import org.apache.sling.api.resource.Resource; import org.apache.sling.api.resource.ResourceResolver; import org.apache.sling.api.resource.ResourceUtil; import org.apache.sling.api.resource.ValueMap; import org.apache.sling.api.servlets.HttpConstants; import org.apache.sling.api.servlets.SlingSafeMethodsServlet; import org.osgi.framework.Constants; import org.osgi.service.component.annotations.Component; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.adobe.granite.ui.components.rendercondition.RenderCondition; import com.adobe.granite.ui.components.rendercondition.SimpleRenderCondition; import com.day.cq.wcm.api.Page; /** * Servlet that use to Show/Hide Page Properties Based on allowed Templates in AEM * * A condition that renders page properties based on page template path * add a granite:rendercondition node under any of your properties to show/hide * them based on template path. * */ @Component(service = Servlet.class, property = { Constants.SERVICE_DESCRIPTION + "=Custom Path RenderConditions Servlet", "sling.servlet.methods=" + HttpConstants.METHOD_GET, "sling.servlet.resourceTypes=" + "utils/granite/rendercondition/simple/taqalytics-apps" }) public class TemplateBasedPropertiesRenderer extends SlingSafeMethodsServlet { private static final long serialVersionUID = 1L; private static final String PAGE_PROPERTIES = "wcm/core/content/sites/properties"; Logger logger = LoggerFactory.getLogger(this.getClass()); @Override protected void doGet(final SlingHttpServletRequest req, final SlingHttpServletResponse resp) throws ServletException, IOException { final SlingHttpServletRequest slingRequest = (SlingHttpServletRequest) req; ValueMap cfg = ResourceUtil.getValueMap(req.getResource()); String[] paths = cfg.get("allowedPaths", new String[] {}); boolean vote = isTemplate(slingRequest, req, paths); req.setAttribute(RenderCondition.class.getName(), new SimpleRenderCondition(vote)); } public static boolean isTemplate(SlingHttpServletRequest slingHttpServletRequest, HttpServletRequest httpServletRequest, String[] allowedPaths) { // error if any of the passed params is null. if (slingHttpServletRequest == null || httpServletRequest == null || allowedPaths ==null ) { throw new IllegalArgumentException("One of the passed parameters is null."); } // the dialog is a page properties dialog if (StringUtils.contains(httpServletRequest.getPathInfo(), PAGE_PROPERTIES)) { // get the actual page path String pagePath = httpServletRequest.getParameter("item"); // get page template path and check it ResourceResolver resourceResolver=slingHttpServletRequest.getResourceResolver(); Resource resource = resourceResolver.getResource(pagePath); Page page = resource.adaptTo(Page.class); String template = page.getContentResource().getValueMap().get("cq:template", ""); boolean doesContain = Arrays.stream(allowedPaths) .anyMatch(template::equals); return doesContain; } return false; } }
Please use this thread to ask the related questions.
Views
Replies
Sign in to like this content
Total Likes