Documentation

提供されたフラグメントコレクションの作成

提供されたフラグメントコレクションは、ページフラグメントを含むデプロイ可能なモジュールです。 提供されたコレクションのフラグメントは、通常のフラグメントと同じように使用できますが、データベースには含まれておらず、UI から直接変更することはできません。 Liferay 7.3以降を実行している場合は、圧縮された ZIP コレクションで作成された自動デプロイ済みフラグメントを使用することをお勧めします。 これらは 独自のツール またはLiferayフラグメントツールキットで作成でき、UI から変更して画像リソースを含めることができます。

次の例は、Liferay 7.3以降で動作します。

注釈

提供されたフラグメントコレクションを通じて追加されたすべてのフラグメントは、すべてのサイトでグローバルに使用できます。

提供されたフラグメントコレクションを追加するには、それ自体が FragmentCollectionContributorインターフェイス を実装している BaseFragmentCollectionContributorクラス を展開します。

ここでは、フラグメントコレクションを提供する方法を学びます。

  1. 提供されたフラグメントコレクションのデプロイ

  2. フラグメントリソースの追加

  3. デプロイとテスト

提供されたフラグメントコレクションのデプロイ

新しいLiferayインスタンスを実行します。

docker run -it -m 8g -p 8080:8080 liferay/dxp:7.4.13-u22

http://localhost:8080でLiferayにサインインします。メールアドレスtest@liferay.comとパスワードtestを使用してください。プロンプトが表示されたら、パスワードをlearnに変更します。

次に、サンプルをデプロイして、提供されたフラグメントコレクションがどのように見えるかを確認します。

  1. サンプル をダウンロードして解凍します。

    curl https://learn.liferay.com/dxp/7.x/ja/site-building/developer-guide/developing-page-fragments/liferay-l3m9.zip -O
    
    unzip liferay-l3m9.zip
    
  2. モジュールルートから、提供されたコレクションの JAR をビルドしてデプロイします。

    cd liferay-l3m9
    
    ./gradlew deploy -Ddeploy.docker.container.id=$(docker ps -lq)
    

    注釈

    Windows でテストする場合は、最初に ./gradlew build でモジュールをビルドし、デプロイメントが失敗した場合は JAR を手動で docker cp docker-container-name:/opt/liferay/osgi/modules に直接コピーする必要があります。

  3. Liferay Dockerコンテナコンソールへのデプロイを確認します。 以下のログ メッセージが Docker コンソールに表示されます。

    INFO  [fileinstall-directory-watcher][BundleStartStopLogger:46] STARTED com.acme.l3m9.impl_1.0.0 [1824]
    
  4. 提供されたコレクションとフラグメントが利用可能であることを確認します。 ブラウザでhttps://localhost:8080にアクセスし、画面左側のサイトメニューで、 [デザイン] → [フラグメント] に移動します。 コレクションは、 デフォルト コレクションのリストに表示されます。

    提供されたフラグメントコレクションは、デフォルトのコレクションとともに表示されます。

提供されたフラグメントコレクションを正常にデプロイしました。

ご覧のとおり、提供されたフラグメントコレクションはデフォルトのフラグメントコレクションとともに表示され、フラグメントは UI から変更できません。 コレクションを変更する唯一の方法は、元のモジュールを更新するか、 フラグメントを別のコレクションにコピー してフラグメントのコピーを変更することです。

提供されたフラグメントコレクションのロジックとメタデータ

フラグメントコレクションのコントリビューターは、*FragmentCollectionContributor クラスの 2 つのメソッドをオーバーライドして、コレクションに関する情報を提供します。

getFragmentCollectionKey() メソッドは、これらのフラグメントが提供されるフラグメントコレクションのキー/名前を返します。

@Override
public String getFragmentCollectionKey() {
    return "l3m9";
}

getServletContext() メソッドは、提供されたフラグメントコレクションモジュールのサーブレットコンテキストを返します。

@Override
public ServletContext getServletContext() {
    return _servletContext;
}

ServletContext はバンドルのシンボル名を指しているので、フラグメントリソースを見つけることができます。

@Reference(
  target = "(osgi.web.symbolicname=com.liferay.learn.fragments)"
)
private ServletContext _servletContext;

bnd.bnd ファイルには、コレクションに対して定義する必要があるいくつかのプロパティが含まれています。

  • osgi.web.symbolicname は、 bnd.bnd ファイルの Bundle-SymbolicName と一致します。

  • Web-ContextPath ヘッダはコレクションを含むモジュールフォルダを示すので、ServletContext が正しく生成されます。

  • -dsannotations-options は、コンポーネントクラスのクラス階層にある宣言型サービスのアノテーションを有効にします。

これらの値の参照については、サンプルプロジェクトの bnd.bnd を参照してください。

次に、プロジェクトを変更して、提供されたコレクションに別のフラグメントを含めます。

フラグメントリソースの追加

以下の手順で、提供されたフラグメントコレクションに新しいパッケージ化されたフラグメントを追加します。

  1. サンプルの l3m9-impl/l3m9-jumbotron フォルダを l3m9-impl/src/main/resources/com/acme/l3m9/internal/fragment/contributor/l3m9/dependencies フォルダに移動します。

    cp -r l3m9-impl/l3m9-jumbotron l3m9-impl/src/main/resources/com/acme/l3m9/internal/fragment/contributor/l3m9/dependencies/
    

    フラグメントの作成の詳細は、Developing Page Fragments with the Fragments Toolkitを参照してください。

    注釈

    パッケージ化されたフラグメントは dependencies フォルダに置かれ、クラスのパッケージ名とリソースのパッケージ名が一致しなければなりません(例: [class.package.path].dependencies)。

    注釈

    提供されたフラグメントコレクションは、含まれているリソース をサポートしていません。

デプロイとテスト

アップデートされた提供されたフラグメントコレクションを上記で行ったように構築し、デプロイすることができます。

  1. 更新された提供されたコレクションの JAR をビルドします。

    cd liferay-l3m9
    
    ./gradlew deploy -Ddeploy.docker.container.id=$(docker ps -lq)
    

    注釈

    Windows での展開に失敗した場合は、必要に応じて、コンテナで Liferay をバインドマウント し、.\gradlew jar を使用してモジュール JAR をビルドし、バインドマウントされた適切なフォルダに JAR をコピーする必要があります。

  2. 更新されたフラグメントが提供されたコレクションに含まれていることを確認します。 ブラウザでhttps://localhost:8080にアクセスし、画面左側のサイトメニューで、 [デザイン] → [フラグメント] に移動します。 L3M9 ジャンボトロンフラグメントが L3M9 コレクションに表示されます。

    カスタムのジャンボトロンフラグメントは、提供されたコレクションに含まれています。

これで、提供されたフラグメントコレクションを作成する方法を理解し、提供された新しいフラグメントコレクションを Liferay に追加しました。