提供されたフラグメントセットの作成
提供されたフラグメントセットは、ページフラグメントを含むデプロイ可能なモジュールです。 提供されたセットのフラグメントは、通常のフラグメントと同じように使用できますが、データベースには含まれておらず、UI から直接変更することはできません。 Liferay 7.3以降を実行している場合は、圧縮された ZIP セットで作成された自動デプロイ済みフラグメントを使用することをお勧めします。 これらは 独自のツール またはLiferayフラグメントツールキットで作成でき、UI から変更して画像リソースを含めることができます。
次の例は、Liferay 7.3以降で動作します。
提供されたフラグメントセットを通じて追加されたすべてのフラグメントは、すべてのサイトでグローバルに使用できます。
提供されたフラグメントセットを追加するには、それ自体が FragmentCollectionContributor
インターフェイス を実装している BaseFragmentCollectionContributor
クラス を展開します。
ここでは、フラグメントセットを提供する方法を学びます。
Liferay DXP 7.4以降の場合、フラグメントコレクションはLiferay UIではフラグメントセットと呼ばれます。
提供されたフラグメントセットのデプロイ
新しいLiferay インスタンスを起動し、以下を実行します。
docker run -it -m 8g -p 8080:8080 liferay/portal:7.4.3.112-ga112。
http://localhost:8080でLiferayへのサインインします。 メールアドレス test@liferay.com とパスワード test を使用してください。 プロンプトが表示されたら、パスワードを learn に変更します。
次に、以下の手順でサンプルを展開し、コントリビュートされたフラグメントセットがどのようなものかを確認します:
-
example をダウンロードして解凍する:
curl https://resources.learn.liferay.com/dxp/latest/en/site-building/developer-guide/developing-page-fragments/liferay-l3m9.zip -O
unzip liferay-l3m9.zip
-
モジュールルートから、提供されたセットの JAR をビルドしてデプロイします。
cd liferay-l3m9
./gradlew deploy -Ddeploy.docker.container.id=$(docker ps -lq)
noteWindows でテストする場合は、最初に
./gradlew build
でモジュールをビルドし、デプロイメントが失敗した場合は JAR を手動でdocker cp docker-container-name:/opt/liferay/osgi/modules
に直接コピーする必要があります。 -
Liferay Dockerコンテナコンソールへのデプロイを確認します。 以下のログ メッセージが Docker コンソールに表示されます。
INFO [fileinstall-directory-watcher][BundleStartStopLogger:46] STARTED com.acme.l3m9.impl_1.0.0 [1824]
-
提供されたフラグメントセットが利用可能であることを確認します。 サイトメニュー() を開き、 [デザイン] → [フラグメント] に移動します。 セットがデフォルトセットリストに表示されます。
提供されたフラグメントセットを正常にデプロイしました。
ご覧のとおり、提供されたフラグメントセットはデフォルトのフラグメントセットとともに表示され、フラグメントは 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
を参照してください。
次に、プロジェクトを変更して、提供されたセットに別のフラグメントを含めます。
フラグメントリソースの追加
以下の手順で、提供されたフラグメントセットに新しいパッケージ化されたフラグメントを追加します。
-
サンプルの
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を参照してください。
noteパッケージ化されたフラグメントは
dependencies
フォルダに置かれ、クラスのパッケージ名とリソースのパッケージ名が一致しなければなりません(例:[class.package.path].dependencies
)。note提供されたフラグメントセットは、含まれているリソースをサポートしていません。
-
更新された提供されたセットの JAR をビルドします。
cd liferay-l3m9
./gradlew deploy -Ddeploy.docker.container.id=$(docker ps -lq)
noteWindows でデプロイに失敗した場合は、コンテナに Liferay をバインドマウント してモジュール JAR を
.\gradlew jar
でビルドし、JAR を適切なバインドマウントフォルダにコピーする必要がある場合があります。 -
更新されたフラグメントが提供されたセットに含まれていることを確認します。 ブラウザで
https://localhost:8080
にアクセスし、画面左側のサイトメニューで、 [デザイン] → [フラグメント] に移動します。 L3M9 ジャンボトロンフラグメントが L3M9 セットに表示されます。
これで、提供されたフラグメントセットを作成する方法を理解し、提供された新しいフラグメントセットを Liferay に追加しました。