一部のコンテンツフラグメント機能には、 AEM 6.4 Service Pack 2(6.4.2.0).
コンテンツフラグメントは、標準アセットを拡張します。参照:
コンテンツフラグメントについて詳しくは、コンテンツフラグメントの作成と管理およびコンテンツフラグメントを使用したページオーサリングを参照してください。
アセットの管理 および アセットのカスタマイズと拡張 standard assets について詳しくは、を参照してください。
コンテンツフラグメントの基本的な構成要素は次の通りです。
フラグメントのタイプによって、モデルまたはテンプレートも使用します。
コンテンツフラグメントモデルは、すべてのフラグメント作成で使用することが推奨されています。
コンテンツフラグメントモデルは、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
このインターフェイスでは、コンテンツフラグメントを抽象化して使用できます。
このインターフェイスを使用してフラグメントにアクセスすることを強くお勧めします。 コンテンツ構造を直接変更するのは避ける必要があります。
このインターフェイスでは、次のことを実行できます。
基本データを管理 ( 例:get name;タイトル/説明を取得/設定
メタデータへのアクセス
要素にアクセスする:
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 全体は、 not は、(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 秒です)
詳しくは、 コンテンツフラグメントテンプレート を参照してください。
詳しくは、