自訂和擴充內容片段 customizing-and-extending-content-fragments
在Adobe Experience Manager as a Cloud Service中,內容片段會擴充標準資產;請參閱:
-
建立和管理內容片段 和 使用內容片段編寫頁面 以取得有關內容片段的進一步資訊。
-
管理資產 以取得標準資產的詳細資訊。
架構 architecture
基本 組成部分 以下是內容片段的:
- A 內容片段 本身
- 它由一或多個 內容元素
- 它可以有一或多個 內容變數
個別內容片段是以內容片段模式為基礎:
-
內容片段模型會在建立內容片段時定義其結構。
-
片段會參考模型;因此,模型的變更可能會影響或確實影響任何相依片段。
-
模型是由資料型別建立而成。
-
新增新變數的函式等,必須據此更新片段。
note note NOTE 若要顯示/轉譯內容片段,您的帳戶必須具備 read
模型的許可權。note caution CAUTION 對現有內容片段模型所做的任何變更都可能影響相依片段;這可能會導致這些片段中的孤立屬性。
Sites與資產的整合 integration-of-sites-with-assets
內容片段管理(CFM)是Adobe Experience Manager (AEM) Assets的一部分,如下所示:
- 內容片段是資產。
- 他們使用現有的Assets功能。
- 這些資產已與Assets (管理主控台等)完全整合。
將內容片段視為AEM Sites功能,例如:
- 可在編寫頁面時使用。
將內容片段對應至資產 mapping-content-fragments-to-assets
根據內容片段模型的內容片段會對應至單一資產:
-
所有內容都儲存在
jcr:content/data
資產節點:-
元素資料儲存在主子節點下:
jcr:content/data/master
-
變數會儲存在具有變數名稱的子節點下:例如,
jcr:content/data/myvariation
-
每個元素的資料都會以元素名稱之屬性的形式儲存在個別子節點中:例如,元素的內容
text
儲存為屬性text
於jcr:content/data/master
-
-
中繼資料和相關內容儲存在下方
jcr:content/metadata
除了標題和說明,這些不會視為傳統中繼資料並儲存在jcr:content
資產位置 asset-location
與標準資產一樣,內容片段位於下:
/content/dam
資產許可權 asset-permissions
另請參閱 內容片段 — 刪除注意事項.
功能整合 feature-integration
若要與資產核心整合:
-
內容片段管理(CFM)功能以Assets核心為基礎。
-
CFM針對卡片/欄/清單檢視中的專案提供自己的實作;這些增效模組會插入現有的Assets內容呈現實作中。
-
已擴充多個Assets元件,以符合內容片段。
在頁面中使用內容片段 using-content-fragments-in-pages
內容片段可以從AEM頁面引用,就像任何其他資產型別一樣。 AEM提供 內容片段核心元件 - a 可讓您在頁面上包含內容片段的元件. 您也可以擴充此 內容片段 核心元件。
-
元件使用
fragmentPath
屬性以參考實際內容片段。 此fragmentPath
屬性的處理方式與其他資產型別的類似屬性相同;例如,將內容片段移至其他位置時。 -
元件可讓您選取要顯示的變數。
-
此外,也可以選取段落範圍來限制輸出;例如,這可用於多欄輸出。
-
元件允許中間內容:
-
元件可讓您在參照片段的段落之間放置其他資產(影像等)。
-
對於中間內容:
-
請注意不穩定參考的可能性。 中間內容(在製作頁面時新增)與旁邊段落沒有固定的關係。 在中間內容的位置之前插入新段落(在內容片段編輯器中)可能會失去相對位置。
-
請考慮使用其他引數(例如變數和段落篩選器)來設定要在頁面上呈現的內容。
-
-
與其他架構整合 integration-with-other-frameworks
內容片段可以整合至:
-
翻譯
內容片段與 AEM翻譯工作流程. 在架構層級,這表示:
-
內容片段的個別翻譯是單獨的片段;例如:
-
它們位於不同的語言根下,但共用相關語言根下的相對路徑:
/content/dam/<path>/en/<to>/<fragment>
與
/content/dam/<path>/de/<to>/<fragment>
-
-
除了規則型路徑以外,內容片段的不同語言版本之間沒有其他連線。 雖然UI提供了在語言變體之間導覽的方法,但這些變體會作為兩個單獨的片段處理。
note note NOTE AEM翻譯工作流程可搭配使用 /content
:- 當內容片段模型位於時
/conf
,這些不會包含在這類翻譯中。 您可以國際化UI字串。
-
-
中繼資料結構
-
內容片段使用並重複使用 中繼資料結構 可使用標準資產定義的屬性。
-
CFM提供專屬的結構描述:
/libs/dam/content/schemaeditors/forms/contentfragment
如有需要,可延長該期限。
-
個別結構表單已與片段編輯器整合。
-
內容片段管理API — 伺服器端 the-content-fragment-management-api-server-side
您可以使用伺服器端API來存取您的內容片段;請參閱:
重要介面 key-interfaces
下列三個介面可作為進入點:
-
內容片段 (內容片段)
此介面可讓您以抽象方式處理內容片段。
介面提供您執行下列作業的方法:
-
管理基本資料(例如,取得名稱、取得/設定標題/說明)
-
存取中繼資料
-
存取元素:
-
清單元素
-
依名稱取得元素
-
建立元素(請參閱 警告)
-
存取元素資料(請參閱
ContentElement
)
-
-
為片段定義的清單變數
-
全域建立變數
-
管理關聯內容:
- 清單集合
- 新增集合
- 移除集合
-
存取片段的模型
代表片段主要元素的介面包括:
-
內容元素 (內容元素)
-
內容變數 (ContentVariation)
- 取得基本資料(名稱、標題、說明)
- 取得/設定內容
- 根據上次修改資訊的簡單同步處理
所有三個介面(
ContentFragment
,ContentElement
,ContentVariation
)延伸Versionable
介面,新增內容片段所需的版本設定功能:- 建立元素的版本
- 列出元素的版本
- 取得已建立版本之元素的特定版本內容
-
調整 — 使用adaptTo() adapting-using-adaptto
可調整以下內容:
-
ContentFragment
可調整為:-
Resource
— 基礎Sling資源;更新基礎Resource
直接需要重建ContentFragment
物件。 -
Asset
- DAMAsset
代表內容片段的抽象;更新Asset
直接需要重建ContentFragment
物件。
-
-
ContentElement
可調整為:ElementTemplate
— 用於存取元素的結構資訊。
-
Resource
可調整為:ContentFragment
警告 caveats
請注意:
-
整個API的設計目的是 非 自動保留變更(除非API JavaDoc另有說明)。 因此,請一律認可個別請求的資源解析器(或您實際使用的解析器)。
-
可能需要額外努力的任務:
-
Adobe建議您建立變數,從
ContentFragment
. 這可確保所有元素都共用此變數,並視需要更新適當的全域資料結構,以反映內容結構中的新變數。 -
透過元素移除現有變數,使用
ContentElement.removeVariation()
,不會更新指派給變數的全域資料結構。 若要確保這些資料結構保持同步,請使用ContentFragment.removeVariation()
而是會全域移除變數。
-
內容片段管理API — 使用者端 the-content-fragment-management-api-client-side
其他資訊 additional-information
請參閱下列內容:
-
filter.xml
此
filter.xml
針對內容片段管理進行設定,使其不會與資產核心內容套件重疊。
編輯工作階段 edit-sessions
編輯內容片段是原子性的,它可以跨越多個檢視(=HTML頁面)。 因此,原子式多檢視編輯功能不是典型的AEM概念,內容片段使用所謂的 編輯工作階段.
當使用者在編輯器中開啟內容片段時,會啟動編輯工作階段。 當使用者透過選取以下任一專案離開編輯器時,編輯工作階段即完成 儲存 或 取消.
技術上,所有編輯均於下列日期完成: 即時 內容,就像所有其他AEM編輯一樣。 開始編輯工作階段時,會建立目前未編輯狀態的版本。 如果使用者取消編輯,則會還原該版本。 如果使用者按一下 儲存,不會執行任何特定動作,因為編輯作業執行於 即時 因此,所有變更都會持續存在。 此外,按一下 儲存 觸發某些背景處理,例如建立全文檢索搜尋資訊或處理混合媒體資產,或兩者同時進行。
對於邊緣案例有一些安全措施;例如,如果使用者嘗試離開編輯器而未儲存或取消編輯工作階段。 此外,定期自動儲存也可防止資料遺失。
兩個使用者可以同時編輯相同的內容片段,因此會覆寫彼此的變更。 若要防止此情況,必須套用DAM管理的 簽出 對片段執行的動作。
範例 examples
範例:存取現有的內容片段 example-accessing-an-existing-content-fragment
若要實現此目標,您可以將代表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
}
範例:建立內容片段 example-creating-a-new-content-fragment
若要以程式設計方式建立內容片段,請使用 FragmentTemplate
從模型資源改寫。
例如:
Resource modelRsc = resourceResolver.getResource("...");
FragmentTemplate tpl = modelRsc.adaptTo(FragmentTemplate.class);
ContentFragment newFragment = tpl.createFragment(parentRsc, "A fragment name", "A fragment description.");
範例:指定自動儲存間隔 example-specifying-the-auto-save-interval
此 自動儲存間隔 (以秒為單位測量)可使用組態管理員(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秒)
用於頁面編寫的元件 components-for-page-authoring
如需詳細資訊,請參閱
- 核心元件 — 內容片段元件 (建議)