使用隐藏条件

隐藏条件可用于确定是否渲染组件资源。 例如,当模板作者在模板编辑器中配置核心组件列表组件,并决定禁用选项以基于子页面构建列表时。 在设计对话框中禁用此选项会设置一个属性,这样在渲染列表组件时,将评估隐藏条件,并且不显示显示子页面的选项。

概述

对话会变得非常复杂,用户可能只使用一小部分可供自己使用的选项。 这可能为用户带来无数的用户界面体验。

通过使用隐藏条件,管理员、开发人员和超级用户可以根据一组规则隐藏资源。 此功能允许他们决定在作者编辑内容时应显示哪些资源。

注意

根据表达式隐藏资源不会替换ACL权限。 内容将保持可编辑状态,但是不显示。

实施和使用详细信息

com.adobe.granite.ui.components.FilteringResourceWrapper 负责根据属性的存在和值过滤 granite:hide 资源,该属性位于要过滤的字段上。/libs/cq/gui/components/authoring/dialog/dialog.jsp的实现包括FilteringResourceWrapper.的实例

该实现利用Granite ELResolver API并通过ExpressionCustomizer添加一个cqDesign自定义变量。

以下是设计节点上隐藏条件的几个示例,该节点位于etc/design下或作为内容策略。

${cqDesign.myProperty}
${!cqDesign.myProperty}
${cqDesign.myProperty == 'someText'}
${cqDesign.myProperty != 'someText'}
${cqDesign.myProperty == true}
${cqDesign.myProperty == true}
${cqDesign.property1 == 'someText' && cqDesign.property2 || cqDesign.property3 != 1 || header.myHeader}

定义隐藏表达式时,请牢记:

  • 要有效,应表示找到属性的范围(例如,cqDesign.myProperty)。
  • 值为只读。
  • 函数(如果需要)应限于服务提供的给定集合。

示例

隐藏条件的示例可在AEM中找到,特别是核心组件。 例如,考虑列表核心组件

使用模板编辑器,模板作者可以在设计对话框中定义页面作者可以使用的列表组件选项。例如是否允许列表为静态列表、子页面列表、标记页面列表等。 可以启用或禁用。

如果模板作者选择禁用子页面选项,则会设置设计属性并针对其评估隐藏条件,这会导致该选项不为页面作者呈现。

  1. 默认情况下,页面作者可以使用列表核心组件通过选择选项​子页面​来构建使用子页面的列表。

    chlimage_1-218

  2. 在列表核心组件的设计对话框中,模板作者可以选择选项​禁用子项,以阻止将基于子页面生成列表的选项显示给页面作者。

    chlimage_1-219

  3. /conf/we-retail/settings/wcm/policies/weretail/components/content/list下创建策略节点,属性disableChildren设置为true

  4. 隐藏条件定义为对话框属性节点/conf/we-retail/settings/wcm/policies/weretail/components/content/listgranite:hide属性的值

    chlimage_1-220

  5. 从设计配置中提取disableChildren的值,表达式${cdDesign.disableChildren}的计算结果为false,这意味着该选项不会作为组件的一部分呈现。

    您可以将隐藏表达式视图为GitHub中granite:hide属性的值,此处为

  6. 使用列表组件时,页面作者不再呈现选项​子页面

    chlimage_1-221

在此页面上