In template editors, policies are used to configure component design. Example: component’s design configurations, allowed components for a container, mapping asset into components etc.
Configuring a template-editor’s policy is similar to a Static template’s design dialog. Following are the steps to define and access a new policy:
Step 1: Create policy configuration dialog
A component’s policy dialog is defined by adding a cq:design_dialog to the component. Example:
Sample .content.xml for design dialog:
<?xml version="1.0" encoding="UTF-8"?> <jcr:root xmlns:sling="http://sling.apache.org/jcr/sling/1.0" xmlns:cq="http://www.day.com/jcr/cq/1.0" xmlns:jcr="http://www.jcp.org/jcr/1.0" xmlns:nt="http://www.jcp.org/jcr/nt/1.0" jcr:primaryType="nt:unstructured" jcr:title="My Title Component" sling:resourceType="cq/gui/components/authoring/dialog"> <content jcr:primaryType="nt:unstructured" sling:resourceType="granite/ui/components/coral/foundation/container"> <items jcr:primaryType="nt:unstructured"> <tabs jcr:primaryType="nt:unstructured" sling:resourceType="granite/ui/components/coral/foundation/tabs" maximized="{Boolean}true"> <items jcr:primaryType="nt:unstructured"> <properties jcr:primaryType="nt:unstructured" jcr:title="Available Stage types" sling:resourceType="granite/ui/components/coral/foundation/fixedcolumns" margin="{Boolean}true"> <items jcr:primaryType="nt:unstructured"> <content jcr:primaryType="nt:unstructured" sling:resourceType="granite/ui/components/coral/foundation/container" margin="{Boolean}false"> <items jcr:primaryType="nt:unstructured"> <title jcr:primaryType="nt:unstructured" sling:resourceType="granite/ui/components/coral/foundation/form/textfield" fieldLabel="Title" name="./title"/> </items> </content> </items> </properties> </items> </tabs> </items> </content> </jcr:root>
Step 2: Configuring policy
Once the design dialog is created:
- Open the template in Structure mode.
- Click on the component
- Following button should now be available to configure the design properties.
Policy Storage and sharing:
- Policies are stored in following location by default:
/conf/project_name/settings/wcm/policies/component_name/policy_randomNumber
Policies can be also be stored in /apps or /libs folder. In this case the resource will be resolved in following preference order: /conf, /apps, /libs.
- Please observe in the policy path, that policies are stored centrally for a project. This enables authors to share a design policy among multiple templates.
- Template -> policy mapping is done by referring policy via:
cq:policy=/conf/project_name/settings/wcm/policies/component_name/policy_randomNumber
At location:
/conf/project_name/settings/wcm/templates/template-name/policies/jcr:content/root/component_name
Step 3: Accessing policy
A component’s policy configuration can be accessed by ContentPolicyManager. Sharing an example below:
import javax.annotation.PostConstruct; import org.apache.sling.api.resource.Resource; import org.apache.sling.api.resource.ResourceResolver; import org.apache.sling.models.annotations.Model; import org.apache.sling.models.annotations.injectorspecific.Self; import org.apache.sling.models.annotations.injectorspecific.SlingObject; import com.day.cq.wcm.api.policies.ContentPolicy; import com.day.cq.wcm.api.policies.ContentPolicyManager; @Model(adaptables = Resource.class) public class StageModel { @SlingObject private ResourceResolver resourceResolver; /** The resource. */ @Self protected Resource resource; private String title; @PostConstruct protected void constructStageType(){ ContentPolicyManager policyManager = resourceResolver.adaptTo(ContentPolicyManager.class); if (policyManager != null) { ContentPolicy contentPolicy = policyManager.getPolicy(resource); if (contentPolicy != null) { title= (String) contentPolicy.getProperties().get("title"); } } } /** * @return title */ public String getTitle() { return title; } }
So Hard to find this kind of information but I think this post will be very usefull
LikeLike
Thanks Derks. Glad that the post could help you !
LikeLike