クライアント側のカスタマイズ

⇐ 機能の基本事項 サーバー側のカスタマイズ ⇒
SCF Handlebars ヘルパー ⇒

クライアント側の AEM Communities コンポーネントの外観や動作をカスタマイズするには、複数のアプローチがあります。

2 つの主要なアプローチは、コンポーネントのオーバーレイまたは拡張です。

コンポーネントのオーバーレイによって、デフォルトのコンポーネントは変更され、コンポーネントのすべての参照が影響を受けます。

コンポーネントの拡張(一意の名前が付けられる)では、変更の範囲は制限されます。「extend」という用語は、「override」と同じ意味で使用されます。

オーバーレイ

コンポーネントのオーバーレイは、デフォルトのコンポーネントに変更を加える方法で、デフォルトを使用するすべてのインスタンスに影響を与えます。

オーバーレイは、/libs​ディレクトリ内の元のコンポーネントを変更する代わりに、/apps​ディレクトリ内のデフォルトコンポーネントのコピーを変更することで実行されます。 コンポーネントは、「libs」を「apps」に置き換える以外、同じ相対パスを使用して構築されます。

/appsディレクトリは、要求を解決するために検索される最初の場所です。見つからない場合は、/libsディレクトリ内のデフォルトのバージョンが使用されます。

/libs ディレクトリ内のデフォルトコンポーネントは変更しないでください。/libs ディレクトリは、今後のパッチおよびアップグレードによって、公開インターフェイスのメンテナンス中に必要な方法で自由に変更されます。

これは、特定の用途に対して変更を加え、コンポーネントへの一意のパスを作成し、/libsディレクトリ内の元のデフォルトコンポーネントをスーパーリソースタイプとして参照することを望むデフォルトコンポーネントの拡張とは異なります。

コメントコンポーネントのオーバーレイの簡単な例については、オーバーレイコメントコンポーネントのチュートリアルを参照してください。

拡張

コンポーネントの拡張(優先)は、デフォルトを使用するすべてのインスタンスに影響を及ぼさずに、特定の用途のために変更をおこなう方法です。拡張されたコンポーネントは、/apps フォルダー内で一意の名前が付けられ、/libs フォルダー内のデフォルトのコンポーネントを参照します。したがって、コンポーネントのデフォルトのデザインおよび動作は変更されません。

これは、Sling の性質によって libs/ フォルダー内を検索する前に apps/ フォルダーの相対参照を解決し、したがってコンポーネントのデザインまたは動作がグローバルに変更される、デフォルトのコンポーネントのオーバーレイとは異なります。

コメントコンポーネントの拡張の簡単な例については、コメントコンポーネントの拡張チュートリアルを試してください。

JavaScript バインド

コンポーネントの 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>}}

CSS のスキンの適用

Web サイトの全体的なテーマに合うようにコンポーネントをカスタマイズすることは、「スキンの適用」によって実現できます。これは、色、フォント、画像、ボタン、リンク、間隔および位置設定を特定の程度まで変更することです。

スキンの適用は、フレームワークスタイルを選択的に上書きすることによって、または完全に新しいスタイルシートを記述することによって実行できます。SCF コンポーネントによって、コンポーネントを構成するさまざまな要素に影響する、名前空間が設定された、モジュール式のセマンティック CSS クラスが定義されます。

コンポーネントにスキンを適用するには、次の手順に従います。

  1. 変更する要素(コンポーザー領域、ツールバーボタン、メッセージフォントなど)を指定します。

  2. これらの要素に影響する CSS クラス/ルールを識別します。

  3. スタイルシートファイル(.css)を作成します。

  4. サイトのクライアントライブラリフォルダ(clientlibs)にスタイルシートを含め、ui:includeClientLibを使用して、テンプレートとページからスタイルシートが含まれていることを確認します。

  5. スタイルシートで指定したCSSクラスとルール(#2)を再定義し、スタイルを追加します。

これで、カスタムスタイルによってデフォルトのフレームワークスタイルは上書きされ、コンポーネントは新しいスキンでレンダリングされます。

注意

scf-js-&ast;​のプリフィックスが付いたCSSクラス名は、javascriptコードでは特定の用途を持ちます。 これらのクラスは、コンポーネントの状態に影響を与え(例えば、非表示から表示に切り替える)、上書きも削除もしないでください。

While the scf-js-&ast;クラスはスタイルに影響を与えませんが、クラス名は、要素の状態を制御するので、副次的な影響が生じる可能性があるという注意を持つスタイルシートで使用できます。

JavaScript の拡張

コンポーネントの JavaScript 実装を拡張するには、以下のことのみが必要です。

  1. jcr:resourceSuperTypeを拡張コンポーネントのjcr:resourceTypeの値(例:social/forum/components/hbs/forum)に設定したアプリ用のコンポーネントを作成します
  2. デフォルトのSCFコンポーネントのJavaScriptを調べ、SCF.registerComponent()を使用して登録する必要があるメソッドを判断します。
  3. 拡張コンポーネントのJavaScriptまたは開始を最初からコピーする
  4. メソッドの拡張
  5. SCF.registerComponent()を使用して、すべてのメソッドをデフォルトまたはカスタマイズされたオブジェクトと表示のいずれかに登録します。

forum.js:フォーラム - HBS のサンプル拡張

(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という属性が付けられます。

SCF の clientlib

クライアント側ライブラリ(clientlib)の使用により、クライアント側でコンテンツをレンダリングするために使用される JavaScript および CSS を整理および最適化できます。

SCF の clientlib は、カテゴリ名内の「author」の存在のみが異なる 2 つのバリアントの具体的な命名パターンに従います。

clientlib のバリアント カテゴリプロパティのパターン
完全 clientlib cq.social.hbs.<component name>
オーサー clientlib cq.social.author.hbs.<component name="">

完全 clientlib

完全(オーサー以外)clientlib には依存関係が含まれており、ui:includeClientLib を使用して含める場合に便利です。

これらのバージョンは、次の場所にあります。

  • /etc/clientlibs/social/hbs/<component name>

次に例を示します。

  • クライアントフォルダーノード:/etc/clientlibs/social/hbs/forum
  • カテゴリプロパティ:cq.social.hbs.forum

コミュニティコンポーネントガイドによって、各 SCF コンポーネントに必要なすべての clientlib が一覧表示されます。

コミュニティコンポーネントの 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」を挿入することによって識別できます。

使用上の考慮事項

サイトによってクライアントライブラリの管理方法は異なります。次に、様々な要因を示します。

  • 全体的な速度:応答の速いサイトが目的ですが、最初のページのロードが少し遅いことは受け入れられる場合があります。多くのページが同じJavaScriptを使用している場合、様々なJavaScriptを1つのclientlibに埋め込み、最初のページから参照して読み込むことができます。 この1回のダウンロードでJavaScriptがキャッシュされたままになり、以降のページでダウンロードするデータ量が最小限に抑えられます。
  • 迅速な最初のページ:最初のページが迅速にロードされることが目的である場合があります。この場合、JavaScriptは、必要な場所でのみ参照できるように、複数の小さなファイルに含まれています。
  • 最初のページのロードと後続のダウンロードとの間のバランス。
⇐ 機能の基本事項 サーバー側のカスタマイズ ⇒
SCF Handlebars ヘルパー ⇒

このページ

Adobe Summit Banner

A virtual event April 27-28.

Expand your skills and get inspired.

Register for free
Adobe Summit Banner

A virtual event April 27-28.

Expand your skills and get inspired.

Register for free
Adobe Maker Awards Banner

Time to shine!

Apply now for the 2021 Adobe Experience Maker Awards.

Apply now
Adobe Maker Awards Banner

Time to shine!

Apply now for the 2021 Adobe Experience Maker Awards.

Apply now