⇐ 機能の基本事項 | サーバー側のカスタマイズ ⇒ |
---|---|
SCF Handlebars ヘルパー ⇒ |
クライアント側の AEM Communities コンポーネントの外観や動作をカスタマイズするには、複数のアプローチがあります。
2 つの主要なアプローチは、コンポーネントのオーバーレイまたは拡張です。
コンポーネントのオーバーレイによって、デフォルトのコンポーネントは変更され、コンポーネントのすべての参照が影響を受けます。
コンポーネントの拡張(一意の名前が付けられる)では、変更の範囲は制限されます。「extend」という用語は、「override」と同じ意味で使用されます。
コンポーネントのオーバーレイは、デフォルトのコンポーネントに変更を加え、デフォルトを使用するすべてのインスタンスに影響を与える方法です。
オーバーレイは、 /libsディレクトリ内の元のコンポーネントを変更するのではなく、 /appsディレクトリ内のデフォルトコンポーネントのコピーを変更することで実行されます。 コンポーネントは、「libs」が「apps」に置き換えられる点を除き、同じ相対パスを使用して構築されます。
/appsディレクトリは、要求を解決するために最初に検索される場所です。見つからない場合は、/libsディレクトリにあるデフォルトのバージョンが使用されます。
/libs ディレクトリ内のデフォルトコンポーネントは変更しないでください。/libs ディレクトリは、今後のパッチおよびアップグレードによって、公開インターフェイスのメンテナンス中に必要な方法で自由に変更されます。
これは、特定の用途に変更を加え、コンポーネントへの一意のパスを作成し、/libsディレクトリ内の元のデフォルトコンポーネントをスーパーリソースタイプとして参照することが目的のデフォルトコンポーネントの拡張とは異なります。
コメントコンポーネントのオーバーレイの簡単な例については、 コメントコンポーネントのオーバーレイのチュートリアルを試してください。
コンポーネントの拡張(優先)は、デフォルトを使用するすべてのインスタンスに影響を及ぼさずに、特定の用途のために変更をおこなう方法です。拡張されたコンポーネントは、/apps フォルダー内で一意の名前が付けられ、/libs フォルダー内のデフォルトのコンポーネントを参照します。したがって、コンポーネントのデフォルトのデザインおよび動作は変更されません。
これは、Sling の性質によって libs/ フォルダー内を検索する前に apps/ フォルダーの相対参照を解決し、したがってコンポーネントのデザインまたは動作がグローバルに変更される、デフォルトのコンポーネントのオーバーレイとは異なります。
コメントコンポーネントの拡張の簡単な例については、コメントコンポーネントの拡張チュートリアルを試してください。
コンポーネントの HBS スクリプトは、この機能を実装する JavaScript オブジェクト、モデルおよびビューにバインドされる必要があります。
data-scf-component
属性の値は、デフォルト(social/tally/components/hbs/rating
など)と、カスタマイズされた機能用の拡張(カスタマイズ)コンポーネント(weretail/components/hbs/ratingなど)のどちらでもかまいません。
コンポーネントをバインドするには、以下の属性を使用してコンポーネントスクリプト全体を <div> 要素で囲む必要があります。
data-component-id
="{{id}}"
コンテキストからidプロパティに解決されます。
data-scf-component
="<resourceType>
例えば、/apps/weretail/components/hbs/rating/rating.hbs
から:
<div class="we-Rating" data-component-id="{{id}}" data-scf-component="weretail/components/hbs/rating">
<!-- HTML with HBS accessing the rating component -->
</div>
コンポーネントを拡張またはオーバーレイする場合、変更されたダイアログにプロパティを追加できます。
コンポーネント/リソースに対して設定されるすべてのプロパティには、handlebars テンプレートでプロパティキーを参照することによってアクセスできます。
{{properties.<property_name>}}
Web サイトの全体的なテーマに合うようにコンポーネントをカスタマイズすることは、「スキンの適用」によって実現できます。これは、色、フォント、画像、ボタン、リンク、間隔および位置設定を特定の程度まで変更することです。
スキンの適用は、フレームワークスタイルを選択的に上書きすることによって、または完全に新しいスタイルシートを記述することによって実行できます。SCF コンポーネントによって、コンポーネントを構成するさまざまな要素に影響する、名前空間が設定された、モジュール式のセマンティック CSS クラスが定義されます。
コンポーネントにスキンを適用するには、次の手順に従います。
変更する要素(コンポーザー領域、ツールバーボタン、メッセージフォントなど)を指定します。
これらの要素に影響する CSS クラス/ルールを識別します。
スタイルシートファイル(.css)を作成します。
スタイルシートをサイトのクライアントライブラリフォルダー(clientlibs)に含め、ui:includeClientLibを使用して、テンプレートおよびページからスタイルシートが含まれていることを確認します。
スタイルシートで指定したCSSクラスおよびルール(#2)を再定義し、スタイルを追加します。
これで、カスタムスタイルによってデフォルトのフレームワークスタイルは上書きされ、コンポーネントは新しいスキンでレンダリングされます。
scf-js
のプレフィックスが付いたCSSクラス名は、JavaScriptコードで特定の用途を持ちます。 これらのクラスは、コンポーネントの状態に影響を与えます(非表示から表示に切り替えるなど)。上書きも削除もおこなわないでください。
scf-js
クラスはスタイルに影響を与えませんが、クラス名は、要素の状態を制御するので副作用が生じる可能性があるという注意を払って、スタイルシートで使用できます。
JavaScriptコンポーネントの実装を拡張するには、次の操作が必要です。
(function($CQ, _, Backbone, SCF) {
"use strict";
var GMForumView = SCF.ForumView.extend({
viewName: "GMForum",
showComposer: function(e) {
SCF.ForumView.prototype.toggleComposer.apply(this);
var cancel = this.$el.find('.cancel-new-topic');
cancel.toggle();
},
hideComposer: function(e) {
SCF.ForumView.prototype.toggleComposer.apply(this);
var cancel = this.$el.find('.cancel-new-topic');
cancel.toggle();
}
});
SCF.registerComponent('social/forum/components/hbs/post', SCF.Post, SCF.PostView);
SCF.registerComponent('social/forum/components/hbs/topic', SCF.Topic, SCF.TopicView);
SCF.registerComponent('social/forum/components/hbs/forum', SCF.Forum, GMForumView );
})($CQ, _, Backbone, SCF);
スクリプトタグは、クライアント側フレームワークの固有の部分です。 これらは、サーバー側で生成されたマークアップをクライアント側のモデルおよびビューにバインドするために役立ちます。
コンポーネントをオーバーレイまたは優先するときに SCF スクリプト内のスクリプトタグを削除しないでください。HTMLにJSONを挿入するために自動作成されたSCFスクリプトタグは、data-scf-json=true
属性で識別されます。
クライアント側ライブラリ(clientlib)の使用により、クライアント側でコンテンツをレンダリングするために使用される JavaScript および CSS を整理および最適化できます。
SCF の clientlib は、カテゴリ名内の「author」の存在のみが異なる 2 つのバリアントの具体的な命名パターンに従います。
clientlib のバリアント | カテゴリプロパティのパターン |
---|---|
完全 clientlib | cq.social.hbs.<component name> |
オーサー clientlib | cq.social.author.hbs.<component name=""> |
完全(オーサー以外)clientlib には依存関係が含まれており、ui:includeClientLib を使用して含める場合に便利です。
これらのバージョンは、次の場所にあります。
/etc/clientlibs/social/hbs/<component name>
以下に例を示します。
/etc/clientlibs/social/hbs/forum
cq.social.hbs.forum
コミュニティコンポーネントガイドによって、各 SCF コンポーネントに必要なすべての clientlib が一覧表示されます。
コミュニティコンポーネントの clientlib では、clientlib をページに追加する方法が説明されています。
オーサーバージョンの clientlib は、コンポーネントを実装するために必要な最小限の JavaScript に縮小されています。
これらの clientlib を直接含めることはできませんが、代わりに、サイト用に手動で作成された他の clientlib に埋め込むことができます。
これらのバージョンは、SCF libs フォルダー内にあります。
/libs/social/<feature>/components/hbs/<component name>/clientlibs
以下に例を示します。
/libs/social/forum/hbs/forum/clientlibs
cq.social.author.hbs.forum
注意:オーサー clientlib によって他のライブラリは埋め込まれませんが、依存関係は示されます。他のライブラリに埋め込まれる場合、依存関係は自動的に取り込まれず、埋め込む必要があります。
必要なオーサー clientlib は、コミュニティコンポーネントガイドで各 SCF コンポーネントについてリストされた clientlib に「author」を挿入することによって識別できます。
サイトによってクライアントライブラリの管理方法は異なります。次のような要因が考えられます。
⇐ 機能の基本事項 | サーバー側のカスタマイズ ⇒ |
---|---|
SCF Handlebars ヘルパー ⇒ |