内容片段扩展了标准资产;请参阅:
创建和管理内容片段 和 使用内容片段进行页面创作 以了解有关内容片段的更多信息。
基本 组成部分 的内容片段包括:
根据片段类型,还会使用模型或模板:
内容片段模型 建议用于创建所有新片段。
内容片段模型用于WKND中的所有示例。
在AEM 6.3之前,内容片段是基于模板而不是模型创建的。
内容片段模板现已弃用。 它们仍可用于创建片段,但建议改用内容片段模型。 片段模板中不会添加任何新功能,将来版本中将删除这些功能。
内容片段模型:
对现有内容片段模型所做的任何更改都会影响从属片段;这可能会导致这些片段中的属性孤立。
内容片段模板:
内容片段管理(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捆绑包 内容片段组件配置.
资源类型
列表
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访问内容片段;请参阅:
强烈建议使用服务器端API,而不是直接访问内容结构。
以下三个接口可用作入口点:
片段模板 (FragmentTemplate)
使用 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
内容片段 (内容片段)
利用此界面,可采用抽象方式处理内容片段。
强烈建议通过此界面访问片段。 应避免直接更改内容结构。
该界面为您提供了以下方法:
管理基本数据(例如,获取名称;获取/设置标题/描述)
访问元数据
访问元素:
列表元素
按名称获取元素
创建新元素(请参阅 注意事项)
访问元素数据(请参阅 ContentElement
)
为片段定义的列表变量
全局创建新变体
管理关联内容:
访问片段的模型或模板
表示片段的主要元素的界面包括:
内容元素 (内容元素)
内容变体 (Contentvariation)
所有三个接口( ContentFragment
, ContentElement
, ContentVariation
)扩展 Versionable
界面,添加了内容片段所需的版本控制功能:
可以调整以下内容:
ContentFragment
可以适应:
Resource
— 基础Sling资源;请注意,更新基础 Resource
直接,需要重建 ContentFragment
对象。
Asset
- DAM Asset
表示内容片段的抽象;请注意,更新 Asset
直接,需要重建 ContentFragment
对象。
ContentElement
可以适应:
ElementTemplate
— 用于访问元素的结构信息。FragmentTemplate
可以适应:
Resource
- Resource
确定引用的模型或复制的原始模板;
Resource
不会自动反映在 FragmentTemplate
.Resource
可以适应:
ContentFragment
FragmentTemplate
应当指出:
实施API是为了提供UI支持的功能。
整个API旨在 非 自动保留更改(除非在API JavaDoc中另有说明)。 因此,您必须始终提交相应请求的资源解析程序(或您实际使用的解析程序)。
可能需要额外工作的任务:
创建/删除新元素不会更新简单片段的数据结构(基于片段模板)。
创建新变体 ContentElement
不会更新数据结构(但会从全局创建数据结构) ContentFragment
将)。
删除现有变体将不会更新数据结构。
对于AEM 6.5,客户端API是内部的。
请参阅以下内容:
filter.xml
此 filter.xml
用于内容片段管理的配置为不与Assets核心内容包重叠。
当用户在一个编辑器页面中打开内容片段时,会启动编辑会话。 当用户通过选择任一选项离开编辑器时,编辑会话即完成 保存 或 取消.
控制编辑会话的要求包括:
涉及的过程包括:
启动会话
完成会话
自动保存已停止。
提交时:
回滚时:
编辑
可能的操作包括:
输入页面
检查编辑会话是否已存在;通过检查相应的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秒)
参见 内容片段模板 以获取完整信息。
有关详细信息,请参阅