一部のコンテンツフラグメント機能には、 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 では、コンテンツフラグメントコアコンポーネントを利用できます。これは、コンテンツフラグメントをページ上に含めることができるコンポーネントです。また、 コンテンツフラグメント コアコンポーネント。
このコンポーネントは、fragmentPath
プロパティを使用して、実際のコンテンツフラグメントを参照します。fragmentPath
プロパティは、その他のアセットタイプの類似プロパティと同じ方法で処理されます。例えば、コンテンツフラグメントが別の場所に移動された場合などです。
このコンポーネントを使用して、表示するバリエーションを選択できます。
さらに、一定範囲の段落を選択して、出力を制限できます。例えば、複数列の出力に利用できます。
このコンポーネントは、中間コンテンツを許可します。
中間コンテンツの場合は、次のことを実行する必要があります。
コンテンツフラグメントモデル:
ページ上でコンテンツフラグメントモデルを基にしたコンテンツフラグメントを使用している場合は、そのモデルが参照されます。そのため、ページ公開時にモデルが公開されていない場合は、フラグが付けられ、リソースに追加されているモデルがページとともに公開されます。
コンテンツフラグメントテンプレート:
ページ上でコンテンツフラグメントテンプレートを基にしたコンテンツフラグメントを使用している場合は、フラグメントの作成時にテンプレートがコピーされるので、参照はおこなわれません。
コンテンツフラグメントのバックエンド実装は、ページ上で使用されるフラグメントのインスタンスを検索可能にしたり、複合メディアコンテンツを管理したりする役割を担います。この実装では、フラグメントのレンダリングに使用されるコンポーネントと、レンダリングがパラメーター化される方法を把握する必要があります。
このパラメーターは、Web コンソールで設定できます(OSGi バンドルの DAM コンテンツフラグメント設定)。
リソースタイプ
sling:resourceTypes
のリストを使用して、コンテンツフラグメントのレンダリングに使用するコンポーネントと、バックグラウンド処理を適用する場所を定義できます。
参照プロパティ
プロパティのリストを設定し、それぞれのコンポーネントに対応するフラグメントの参照を格納する場所を指定できます。
プロパティとコンポーネントタイプ間に直接的なマッピングはありません。
AEM では、段落内で最初に検出されたプロパティを利用します。そのため、プロパティは慎重に選択する必要があります。
次のガイドラインに沿って、コンポーネントがコンテンツフラグメントのバックグラウンド処理に対応できるようにする必要があります。
レンダリングする要素を定義するプロパティの名前は、次のいずれかにする必要があります。 element
または elementNames
.
レンダリングされるバリエーションが定義するプロパティの名前は、variation
または variationName
にする必要があります。
複数の要素の出力がサポートされている場合 ( elementNames
複数の要素を指定する場合 )、実際の表示モードはプロパティで定義されます displayMode
:
singleText
(および 1 つの要素のみが設定されています)その要素は、中間コンテンツ、レイアウトサポートなどを含むテキストとしてレンダリングされます。 レンダリングされる要素が 1 つのみのフラグメントでは、これがデフォルトです。フラグメントが 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 には言語バリアント間を移動する手段が用意されていますが、それらは 2 つの別々のフラグメントとして扱われます。
AEM 翻訳ワークフローでは、/content
が使用されます。
/conf
内に配置されるので、これらの翻訳には含まれません。UI 文字列を国際化できます。メタデータスキーマ
CFM には、次のような独自の固有のスキーマがあります。
/libs/dam/content/schemaeditors/forms/contentfragment
必要に応じて拡張できます。
各スキーマフォームは、フラグメントエディターと統合されています。
サーバー側 API を使用して、コンテンツフラグメントにアクセスできます。以下を参照してください。
com.adobe.cq.dam.cfm
コンテンツ構造に直接アクセスする代わりに、サーバー側 API を使用することを強くお勧めします。
次の 3 つのインターフェイスが、入口の役割を果たします。
フラグメントのテンプレート
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
コンテンツフラグメント
ContentFragment
このインターフェイスでは、コンテンツフラグメントを抽象化して使用できます。
このインターフェイスを使用してフラグメントにアクセスすることを強く推奨します。コンテンツ構造を直接変更しないでください。
このインターフェイスでは、次のことを実行できます。
基本データを管理する(名前の取得、タイトルまたは説明の取得/設定など)
メタデータにアクセスする
要素にアクセスする
ContentElement
を参照)そのフラグメントに対して定義されているバリエーションを一覧表示する
新しいバリエーションをグローバルに作成する
関連コンテンツを管理する
フラグメントのモデルにアクセスする またはテンプレート
フラグメントの主要要素を表すインターフェイスには、次のものがあります。
コンテンツ要素
ContentElement
コンテンツのバリエーション
ContentVariation
3 つのインターフェイス(ContentVariation
、ContentFragment
、ContentElement
、)すべてによって 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.4 では、クライアント側 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 秒です)
詳しくは、コンテンツフラグメントテンプレートを参照してください。
詳しくは、次を参照してください。