內容片段會延伸標準資產;請參閱:
建立和管理內容片段 和 使用內容片段進行頁面編寫 以取得內容片段的詳細資訊。
基本 組成部分 內容片段包括:
視片段類型而定,也會使用模型或範本:
內容片段模型 建議用於建立所有新片段。
內容片段模型用於WKND中的所有範例。
在AEM 6.3之前,內容片段是根據範本而非模型建立。
內容片段範本現已過時。 它們仍可用於建立片段,但建議改用內容片段模型。 片段範本不會新增任何功能,且這些功能將在未來版本中移除。
內容片段模型:
對現有內容片段模型的任何變更都可能影響相依片段;這可能會導致這些片段中的孤立屬性。
內容片段範本:
內容片段管理(CFM)是AEM Assets的一部分,如下所示:
具有結構化內容的內容片段(即以內容片段模型為基礎)會對應至單一資產:
所有內容都儲存在 jcr:content/data
資產的節點:
元素資料儲存在主子節點下:
jcr:content/data/master
變數儲存在帶有變數名稱的子節點下:例如 jcr:content/data/myvariation
每個元素的資料作為具有元素名稱的屬性儲存在相應的子節點中:例如,元素的內容 text
儲存為屬性 text
on 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
vs. range
)
if paragraphScope
== range
然後是屬性 paragraphRange
定義要呈現的段落範圍
內容片段可與:
翻譯
內容片段已與 AEM翻譯工作流程. 在架構層面,這表示:
內容片段的個別翻譯實際上是個別片段;例如:
它們位於不同的語言根下:
/content/dam/<path>/en/<to>/<fragment>
vs.
/content/dam/<path>/de/<to>/<fragment>
但它們在語言根底下的相對路徑完全相同:
/content/dam/<path>/en/<to>/<fragment>
vs.
/content/dam/<path>/de/<to>/<fragment>
除了基於規則的路徑外,內容片段的不同語言版本之間沒有進一步的連接;雖然UI提供在語言變體之間導覽的方式,但這些片段會以兩個不同片段的形式處理。
AEM翻譯工作流程可搭配 /content
:
由於內容片段模型位於 /conf
,則這些內容不會包含在此類翻譯中。 您可以 將UI字串國際化.
範本會複製以建立片段,因此會是隱式的。
中繼資料結構
內容片段(重新)使用 中繼資料結構,可使用標準資產來定義。
CFM提供其專屬的結構:
/libs/dam/content/schemaeditors/forms/contentfragment
如有需要,可加以擴充。
各個架構表單與片段編輯器整合。
您可以使用伺服器端API來存取您的內容片段;請參閱:
強烈建議使用伺服器端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
- DAM Asset
代表內容片段的抽象化;請注意,更新 Asset
直接需要重建 ContentFragment
物件。
ContentElement
可調整為:
ElementTemplate
— 存取元素的結構資訊。FragmentTemplate
可調整為:
Resource
- Resource
確定所引用的模型或複製的原始模板;
Resource
不會自動反映在 FragmentTemplate
.Resource
可調整為:
ContentFragment
FragmentTemplate
應當指出:
實作API是為了提供UI支援的功能。
整個API的設計目的 not 自動保留變更(除非API JavaDoc另有說明)。 因此,您必須一律提交個別請求的資源解析器(或您實際使用的解析器)。
可能需要付出額外努力的任務:
建立/移除新元素時,不會更新簡單片段的資料結構(根據片段範本)。
建立新變體 ContentElement
不會更新資料結構(但會從全域建立 ContentFragment
將)。
移除現有變數不會更新資料結構。
對於AEM 6.5,用戶端API為內部。
請參閱下列內容:
filter.xml
此 filter.xml
針對內容片段管理所設定,使其與「資產」核心內容套件不重疊。
當使用者在其中一個編輯器頁面中開啟內容片段時,就會啟動編輯工作階段。 當使用者借由選取任一選項離開編輯器時,編輯工作階段就會完成 儲存 或 取消.
控制編輯工作階段的需求為:
涉及的流程包括:
開始工作階段
完成工作階段
自動儲存已停止。
提交時:
回滾時:
編輯
可能的動作包括:
輸入頁面
檢查編輯工作階段是否已存在;檢查個別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秒)
請參閱 內容片段範本 以取得完整資訊。
如需詳細資訊,請參閱