コンテンツフラグメントのカスタマイズと拡張 customizing-and-extending-content-fragments
Adobe Experience Manager as a Cloud Service 内で、コンテンツフラグメントは標準アセットを拡張します。
-
コンテンツフラグメントについて詳しくは、コンテンツフラグメントの作成と管理およびコンテンツフラグメントを使用したページオーサリングを参照してください。
-
「アセットの管理」を参照してください。
アーキテクチャ architecture
基本 構成部品 コンテンツフラグメントの次の要素が含まれます。
- A コンテンツフラグメント 自然
- これは、1 つ以上の コンテンツ要素
- 1 つ以上の コンテンツのバリエーション
個々のコンテンツフラグメントは、コンテンツフラグメントモデルに基づいています。
-
コンテンツフラグメントモデルでは、コンテンツフラグメントの作成時にその構造を定義します。
-
フラグメントはモデルを参照するので、モデルに対する変更は、そのモデルに影響を与える場合も、依存するフラグメントに影響を与える場合もあります。
-
モデルはデータタイプで構成されています。
-
新しいバリエーションを追加する関数などは、それに応じてフラグメントを更新する必要があります。
note note NOTE コンテンツフラグメントを表示およびレンダリングするには、アカウントにモデルへの read
権限が必要です。note caution CAUTION 既存のコンテンツフラグメントモデルに変更を加えると、そのモデルに関連付けられているフラグメントに影響が生じる場合があり、対象のフラグメントで孤立プロパティが生まれることもあります。
Sites と Assets の統合 integration-of-sites-with-assets
コンテンツフラグメント管理 (CFM) は、Adobe Experience Manager(AEM)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
Assets コアと統合するには:
-
コンテンツフラグメント管理(CFM)機能は、アセットコアを基に構築されます。
-
CFM は、カード/列/リスト表示の項目に独自の実装を提供します。つまり、それらの項目が、既存のアセットコンテンツのレンダリング実装に挿入されます。
-
コンテンツフラグメントに対応するために、いくつかのアセットコンポーネントが拡張されています。
ページでのコンテンツフラグメントの使用 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>
-
-
ルールベースのパスに加えて、コンテンツフラグメントの異なる言語バージョン間には他の接続はありません。 2 つの異なるフラグメントとして処理されますが、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
次の 3 つのインターフェイスが、入口の役割を果たします。
-
コンテンツフラグメント(ContentFragment)
このインターフェイスでは、コンテンツフラグメントを抽象化して使用できます。
このインターフェイスでは、次のことを実行できます。
-
基本データを管理する(名前の取得、タイトルまたは説明の取得/設定など)
-
メタデータにアクセスする
-
要素にアクセスする
-
要素をリスト表示する
-
要素を名前で取得する
-
要素を作成します ( 注意事項)
-
要素データにアクセスする(
ContentElement
を参照)
-
-
そのフラグメントに対して定義されているバリエーションをリスト表示する
-
バリエーションをグローバルに作成
-
関連コンテンツを管理する
- コレクションをリスト表示する
- コレクションを追加する
- コレクションを削除する
-
フラグメントのモデルにアクセスする
フラグメントの主要要素を表すインターフェイスは、次のとおりです。
-
コンテンツ要素(ContentElement)
-
コンテンツのバリエーション(ContentVariation)
- 基本データ(名前、タイトル、説明)を取得
- コンテンツを取得/設定する
- 最終変更情報に基づく単純な同期
3 つのインターフェイス(
ContentVariation
、ContentFragment
、ContentElement
、)すべてによって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 の概念ではないので、コンテンツフラグメントは、編集セッション と呼ばれるものを使用します。
編集セッションは、ユーザーがエディターでコンテンツフラグメントを開くと開始されます。ユーザーが「保存」または「キャンセル」を選択してエディターから移動すると、編集セッションは終了します。
技術的には、すべての編集は live 他のすべてのAEM編集と同様に、コンテンツを編集できます。 編集セッションが開始されると、現在の未編集ステータスのバージョンが作成されます。ユーザーが編集をキャンセルすると、そのバージョンが復元されます。ユーザーが 保存 の場合、特定の操作はおこなわれません。これは、編集が live コンテンツを使用するので、すべての変更が既に保持されています。 また、 保存 トリガーフルテキスト検索情報の作成、混在メディアアセットの処理、その両方など、一部のバックグラウンド処理。
エッジケースには、いくつかの安全対策があります。例えば、ユーザーが編集セッションを保存またはキャンセルせずにエディターを終了しようとした場合です。 また、データの損失を防ぐために、定期的な自動保存を使用できます。
2 人のユーザーが同じコンテンツフラグメントを同時に編集できるので、互いの変更内容が上書きされます。 これを防ぐには、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
The 自動保存間隔 (秒単位で測定)設定マネージャー (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
詳しくは、次を参照してください。