某些内容片段功能需要应用AEM 6.4 Service Pack 2(6.4.2.0)。
内容片段扩展了标准资产;请参阅:
内容片段的基本组成部分包括:
根据片段类型,还会使用模型或模板:
现在,建议 使用内容片段模型来创建所有片段。
内容片段模型用于We.Retail中的所有示例。
内容片段模型:
对现有内容片段模型所做的任何更改都可能影响依赖的片段;这可能会导致这些片段中的孤立属性。
内容片段模板:
内容片段管理(CFM)是AEM Assets的一部分,其格式为:
具有结构化内容的内容片段(即,基于内容片段模型)会映射到单个资产:
所有内容都存储在资产的jcr:content/data
节点下:
元素数据存储在主控子节点下:
jcr:content/data/master
变体存储在带有变体名称的子节点下:
例如jcr:content/data/myvariation
每个元素的数据作为具有元素名称的属性存储在相应的子节点中:
例如,元素text
的内容将作为属性text
存储在jcr:content/data/master
上
元数据和关联内容存储在jcr:content/metadata
下
除标题和描述之外,这些标题和描述不被视为传统元数据并存储在jcr:content
上
简单内容片段(基于模板)会映射到由主资产和(可选)子资产组成的组合:
片段的所有非内容信息(如标题、描述、元数据、结构)都仅在主资产上进行管理。
片段第一个元素的内容会映射到主资产的原始演绎版。
其他元素(如果现有)会映射到主资产的子资产。
与标准资产一样,内容片段位于以下位置:
/content/dam
有关更多详细信息,请参阅内容片段 — 删除注意事项。
可以像任何其他资产类型一样,从AEM页面引用内容片段。 AEM提供了内容片段核心组件 - a 组件,该组件允许您在页面上包含内容片段。 您还可以扩展此内容片段核心组件。
组件使用fragmentPath
属性引用实际的内容片段。 fragmentPath
属性的处理方式与其他资产类型的类似属性相同;例如,当内容片段被移动到其他位置时。
组件允许您选择要显示的变量。
此外,还可以选择一系列段落以限制输出;例如,它可用于多列输出。
组件允许中间内容:
对于中间内容,您需要:
内容片段模型:
在页面上使用基于内容片段模型的内容片段时,会引用模型。 这意味着,如果发布页面时尚未发布模型,则会标记该模型,并将模型添加到要随页面一起发布的资源中。
内容片段模板:
在页面上使用基于内容片段模板的内容片段时,没有引用,因为创建片段时复制了模板。
例如,内容片段的后端实施负责使页面上使用的片段的实例可搜索,或管理混合媒体内容。 此实施需要了解用于渲染片段的组件以及如何对渲染进行参数化。
可以在Web控制台中为OSGi包DAM内容片段配置配置此配置的参数。
资源类型
可以提供sling:resourceTypes
列表来定义用于渲染内容片段的组件,以及应将后台处理应用于的组件。
引用属性
属性列表可以配置为指定对片段的引用存储到相应组件的位置。
属性和组件类型之间没有直接映射。
AEM只会获取可在段落中找到的第一个属性。 因此,您应该仔细选择这些资产。
您仍必须遵循一些准则,以确保组件与内容片段后台处理兼容:
定义要呈现的元素的属性名称必须为element
或elementNames
。
定义要呈现的变体的属性名称必须为variation
或variationName
。
如果支持多个元素的输出(通过使用elementNames
指定多个元素),则实际显示模式由属性displayMode
定义:
singleText
(只配置了一个元素),则该元素将呈现为包含中间内容、布局支持等的文本。 对于仅渲染一个元素的片段,这是默认设置。如果片段是为displayMode
== singleText
(隐式或显式)呈现的,则会发挥以下附加属性:
paragraphScope
定义是否应渲染所有段落或仅渲染一段段落(值: all
与 range
)paragraphScope
== range
,则属性paragraphRange
定义要呈现的段落范围内容片段可以与以下内容集成:
翻译
内容片段与AEM翻译工作流完全集成。 在建筑层面,这意味着:
内容片段的个别翻译实际上是单独的片段;例如:
它们位于不同的语言根下:
/content/dam/<path>/en/<to>/<fragment>
与
/content/dam/<path>/de/<to>/<fragment>
但它们在语言根下完全相同的相对路径:
/content/dam/<path>/en/<to>/<fragment>
与
/content/dam/<path>/de/<to>/<fragment>
除了基于规则的路径之外,内容片段的不同语言版本之间没有进一步的连接;虽然UI提供了在语言变体之间导航的方法,但它们将作为两个单独的片段进行处理。
AEM翻译工作流可与/content
配合使用:
/conf
中,因此此类转换中不包含这些模型。 您可以国际化UI字符串。元数据架构
CFM提供了自己的特定架构:
/libs/dam/content/schemaeditors/forms/contentfragment
如果需要,可以扩展此功能。
相应的架构表单与片段编辑器集成。
您可以使用服务器端API访问您的内容片段;请参阅:
com.adobe.cq.dam.cfm
强烈建议使用服务器端API,而不是直接访问内容结构。
以下三个界面可用作入口点:
片段模板
片段模板
使用FragmentTemplate.createFragment()
创建新片段。
Resource templateOrModelRsc = resourceResolver.getResource("...");
FragmentTemplate tpl = templateOrModelRsc.adaptTo(FragmentTemplate.class);
ContentFragment newFragment = tpl.createFragment(parentRsc, "A fragment name", "A fragment description.");
此界面表示:
此信息可包括:
访问基本数据(标题、描述)
访问片段元素的模板/模型:
ElementTemplate
)片段变体的访问模板:
VariationTemplate
)获取初始关联内容
表示重要信息的界面:
ElementTemplate
VariationTemplate
内容片段
内容片段
此界面允许您以抽象方式处理内容片段。
强烈建议通过此界面访问片段。 应避免直接更改内容结构。
该界面为您提供了以下方法:
管理基本数据(例如,获取名称;get/set title/description)
访问元数据
访问元素:
ContentElement
)为片段定义的列表变量
全局创建新变量
管理关联内容:
访问片段的模型或模板
表示片段主要元素的界面包括:
内容元素
ContentElement
内容变体
ContentVariation
所有三个接口(ContentFragment
、ContentElement
、ContentVariation
)都扩展了Versionable
接口,该接口可添加内容片段所需的版本控制功能:
可以修改以下内容:
ContentFragment
可适用于:
Resource
— 基础Sling资源;请注意,直接更新基 Resource
础,需要重建对 ContentFragment
象。Asset
— 表示内 Asset
容片段的DAM抽象;请注意,直接 Asset
更新需要重建对 ContentFragment
象。ContentElement
可适用于:
ElementTemplate
— 访问元素的结构信息。FragmentTemplate
可适用于:
Resource
— 确 Resource
定被引用的模型或复制的原始模板;
Resource
所做的更改不会自动反映在FragmentTemplate
中。Resource
可适用于:
ContentFragment
FragmentTemplate
应当指出:
实施API是为了提供UI支持的功能。
整个API设计为不自动保留更改(除非API JavaDoc中另有说明)。 因此,您将始终必须提交相应请求的资源解析程序(或您实际使用的解析程序)。
可能需要额外努力的任务:
ContentElement
创建新变量不会更新数据结构(但从ContentFragment
全局创建变量会更新)。对于AEM 6.4,客户端API是内部API。
请参阅以下内容:
filter.xml
内容片段管理的filter.xml
已进行配置,以便它不会与资产核心内容包重叠。
当用户在其中一个编辑器页面中打开内容片段时,将启动编辑会话。 当用户通过选择Save或Cancel离开编辑器时,编辑会话即告结束。
控制编辑会话的要求包括:
涉及的流程包括:
启动会话
完成会话
自动保存已停止。
提交后:
回滚时:
编辑
可能的操作包括:
输入页面
检查编辑会话是否已存在;检查相应的Cookie。
如果存在,请验证是否已为当前正在编辑的内容片段启动编辑会话
如果不存在编辑会话,请等待用户进行的首次更改(请参阅下文)。
检查页面上是否已引用内容片段,如果已引用,则显示相应的信息。
内容更改
离开页面
要实现此目的,您可以调整表示API的资源以:
com.adobe.cq.dam.cfm.ContentFragment
例如:
// first, get the resource
Resource fragmentResource = resourceResolver.getResource("/content/dam/fragments/my-fragment");
// then adapt it
if (fragmentResource != null) {
ContentFragment fragment = fragmentResource.adaptTo(ContentFragment.class);
// the resource is now accessible through the API
}
要以编程方式创建新内容片段,您需要使用:
com.adobe.cq.dam.cfm.ContentFragmentManager#create
例如:
Resource templateOrModelRsc = resourceResolver.getResource("...");
FragmentTemplate tpl = templateOrModelRsc.adaptTo(FragmentTemplate.class);
ContentFragment newFragment = tpl.createFragment(parentRsc, "A fragment name", "A fragment description.");
使用配置管理器(ConfMgr)可以定义自动保存间隔(以秒为单位):
节点:<conf-root>/settings/dam/cfm/jcr:content
属性名称: autoSaveInterval
类型: Long
默认:600
(10分钟);这在/libs/settings/dam/cfm/jcr:content
上定义
如果要设置5分钟的自动保存间隔,则需要在节点上定义属性;例如:
节点:/conf/global/settings/dam/cfm/jcr:content
属性名称: autoSaveInterval
类型: Long
值:300
(5分钟等于300秒)
有关完整信息,请参阅内容片段模板。
有关详细信息,请参阅