限制AEM 5.6.1中的组件

11

如何在AEM 5.6.1中限制可以在模板的特定parys中使用的组件,而无需在设计模式下选择它们?

3个回答

14
在CRXDE中,在/etc/designs/[your design]/jcr:content下,您可以定义节点来代表您的每个模板及其段落,并列出每个模板允许的组件。
格式是每个模板一个节点,其中包含每个段落的节点(都是[nt:unstructured])。
然后,段落节点具有定义为foundation/components/parsys的和String[]的组件属性。例如,请查看Geometrixx如何定义:http://localhost:4502/crx/de/index.jsp#/etc/designs/geometrixx/jcr%3Acontent/contentpage/par 您可以通过VLT提取它,这将存储为.content.xml文件在etc/designs/[your design]下。
或者,您也可以手动创建该文件。例如,以下内容将定义“Your Design”允许在“yourTemplate”的“yourParsys”段落上使用默认的“text”和“image”组件。
<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="cq:Page">
    <jcr:content
      cq:template="/libs/wcm/core/templates/designpage"
      jcr:primaryType="cq:PageContent"
      jcr:title="You Design">
        <yourTemplate jcr:primaryType="nt:unstructured">
            <yourParsys
              jcr:primaryType="nt:unstructured"
              sling:resourceType="foundation/components/parsys"
              components="[foundation/components/text,foundation/components/image]"/>
        </yourTemplate>
    </jcr:content> 
</jcr:root>
这能让你将该文件跨实例移动(例如,在部署CRX包时),以便您不必单独配置环境并且可以通过版本控制来管理允许哪些组件在何处使用。

有没有办法限制可以拖放到 yourParsys 中的组件数量?例如,我希望只能将一个 foundation/components/text 拖放到其中,而不允许其他任何组件。 - Behrang
1
我没有找到直接的方法。你可以尝试在辅助工具中叠加一个JS文件并进行插入检查吗?或者直接将组件嵌入模板中,并添加一个复选框来显示/隐藏。但说实话,这些问题更容易通过编辑指南而不是开发工作来解决。 - anotherdave
@Behrang 有方法可以解决,但需要覆盖默认的parsys组件或实现请求过滤器来删除多余的节点。正确处理这个问题将取决于核心业务需求。 - Brenn

0

您可以为组件设置允许父级属性,以限制组件的使用范围,例如:allowedParents="[*/parsys]"


0
我所想到的唯一方法就是创建一个新的parsys组件,该组件仅通过sling:resourceSuperType扩展现有组件。然后在组件上使用allowedParents属性,指定您特定的parsys。最后,在相关页面模板中使用您特定的parsys。目前我还没有尝试过这种方法,但已经将其记在脑后了。如果行得通,请告诉我。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接