ステップ10: インライン編集によるネストしたコンポーネントの使用

Oracle Content Managementコンポーネントは、KnockoutJSコンポーネント・アーキテクチャを使用して実装されています。これは、KnockoutJSを使用してコンポーネントを実装している場合、Oracle Content Management組込みコンポーネントを直接テンプレートに含めることができるということです。

注:

Oracle Content Management組込みコンポーネントはOracle Content Managementページでのみ実行できるため、コンポーネントがインライン・フレームでレンダリングされる場合、ネストされたコンポーネントは使用できません。

ネストされたコンポーネントを活用するには:

  1. KnockoutJSを使用してコンポーネントを実装します。

  2. RequireJSを使用してコンポーネントを含め、Oracle Content Managementによって作成される、同じKnockout "ko"インスタンス変数を使用します。

    Oracle Content ManagementがKnockoutをコンポーネントで拡張して、KnockoutJSの独自のインスタンスを使用していると、これらのコンポーネントが使用できなくなるため、これは必要です。

このステップで、Oracle Content Managementのイメージ、段落およびタイトル・コンポーネントをカスタム・コンポーネントでレンダリングする方法をレビューします。ユーザーは、これをページ内で直接編集したり、ネストしたコンポーネントの「設定」パネルにアクセスしたりできるようになります。

これらのコンポーネントをテンプレートに含める方法を確認するには、render.jsファイルを編集して、sampleComponentTemplateオブジェクトを表示します。レンダリングされるデフォルト・セクションがここに表示されます。

'<!-- ko if: alignImage() !== \'right\' -->' +
'<div style="display:flex;">' +
'<div data-bind="attr: {style: imageStyle, \'data-layout\': alignImage()}, click: imageClicked">' +
'<scs-image params="{ scsComponent: { \'renderMode\': mode, \'parentId\': id, \'id\': \'imageId\', \'data\': imageData } }"></scs-image>' +
'</div>' +
'<div data-bind="attr: {style: paragraphStyle}">' +
'<scs-title params="{ scsComponent: { \'renderMode\': mode, \'parentId\': id, \'id\': \'titleId\', \'data\': titleData } }"></scs-title>' +
'<scs-paragraph params="{ scsComponent: { \'renderMode\': mode, \'parentId\': id, \'id\': \'paragraphId\', \'data\': paragraphData } }"></scs-paragraph>' +
'</div>' +
'</div>' +
'<!-- /ko -->' +

ネストした<scs-image>コンポーネントを表示すると、次のエントリが表示されます。

'<scs-image params="{ scsComponent: { \'renderMode\': mode, \'parentId\': id, \'id\': \'imageId\', \'data\': imageData }}"></scs-image>' +
paramsテンプレート・バインドに渡されるscsComponentデータには、次のものが含まれています。
  • renderMode: これは、サイト・ビルダーのモードを参照します。これを使用すると、機能を有効および無効にできます。たとえば、<scs-title>コンポーネントによって使用されている場合、editモードで実行しているときに、リッチ・テキスト・エディタが追加されます。

  • parentId: Oracle Content Managementコンポーネントはこれがネストしたコンポーネントとしてレンダリングされることを認識しているため、これは必須です。ネストしたコンポーネントへのすべての変更は、カスタム・コンポーネントのデータに保存されます。

  • id: ネストしたコンポーネントの一意のID。これは、さらにカスタム・コンポーネントのIDによってネームスペースが指定されます。

  • data: ネストしたコンポーネントの初期データ。コンポーネントが変更されない場合、この初期データでレンダリングされます。

参照されたidおよびmode値はSampleComponentViewModelオブジェクトのカスタム・コンポーネントに渡されるので、これらの値を取得するようにオブジェクトを変更する必要はありません。

// Store the args
self.mode = args.viewMode;
self.id = args.id;

他のすべてのサポートされているネストしたコンポーネントのコンポーネントは<scs-paragraph>と同じパターンです。たとえば、<scs-image>, <scs-title>, <scs-button>です。

ステップ10の結果の確認

  1. サイト・ビルダーでコンポーネントへの変更内容を反映できるように、サイトでページをリフレッシュします。

  2. ページを編集モードで取り込みます。

  3. コンポーネントをページにドラッグ・アンド・ドロップします。

  4. コンポーネント内のAs a page author, you can edit. . .テキストをクリックし、リッチ・テキスト・エディタを使用して説明を更新します。

  5. プレビュー・モードに切り替えて、更新内容を確認します。

  6. 編集モードに戻します。

  7. 「設定」パネルをコンポーネントに対して開きます。

  8. ネストしたコンポーネントが見つかると表示される「コンポーネント」リンクをクリックします。

  9. 「段落」をクリックします。これは見つかったネストしたコンポーネントです。

コンポーネント内の段落コンポーネントに対してプロパティを更新できます。

注:

コンポーネントがインスタンス化されるまで、Oracle Content Managementではテンプレート内に存在する可能性のあるネストしたコンポーネントを認識しません。Oracle Content Managementに非表示のネストしたコンポーネントを認識させるには、SitesSDK.setProperty('visibleNestedComponents', []); APIを使用します。非表示のネストしたコンポーネントをデフォルトで表示させるには、コンポーネント登録で"nestedComponents": []配列を更新する必要があります。

ステップ11: 別のレイアウトのサポート」に進みます。