提供されたフラグメントセットの作成
提供されたフラグメント セットは、ページ フラグメントを含むデプロイ可能なモジュールです。 提供セット内のフラグメントは通常のフラグメントのように使用できますが、データベースには含まれず、UI から直接変更することはできません。
Liferay 7.3 以降を実行している場合は、圧縮された ZIP セットで作成された 自動的にデプロイされるフラグメント を使用することをお勧めします。 これらのセットは独自のツールや Liferay Fragments Toolkitを使って作成できます。 UI を介して変更することもでき、画像リソースを含めることもできます。
次の例は、Liferay 7.3以降で動作します。
提供されたフラグメント セットを通じて追加されたすべてのフラグメントは、すべてのサイトでグローバルに利用できます。
提供されたフラグメント セットを追加するには、 BaseFragmentCollectionContributor Classを拡張します。このクラス自体は、 FragmentCollectionContributor インターフェイスを実装します。
Liferay DXP 7.4以降の場合、フラグメントコレクションはLiferay UIではフラグメントセットと呼ばれます。
提供されたフラグメントセットのデプロイ
新しいLiferay インスタンスを起動し、以下を実行します。
docker run -it -m 8g -p 8080:8080 liferay/portal:7.4.3.132-ga132
http://localhost:8080でLiferayにサインインします。 メールアドレス test@liferay.com とパスワード testを使用してください。 プロンプトが表示されたら、パスワードを learnに変更します。
次に、次の手順に従ってサンプルをデプロイし、提供されたフラグメント セットがどのようになるかを確認します。
-
の例をダウンロードして解凍します:
curl https://resources.learn.liferay.com/examples/liferay-l3m9.zip -Ounzip liferay-l3m9.zip -
モジュールルートから、提供されたセットの 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に直接手動でコピーする必要がある場合があります。 -
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/注パッケージ化されたフラグメントは
dependenciesフォルダーに配置され、クラス パッケージ名とリソース パッケージ名が一致する必要があります (例:[class.package.path].dependencies)。注提供されたフラグメント セットは、 含まれるリソースをサポートしていません。
-
更新された提供されたセットの JAR をビルドします。
cd liferay-l3m9./gradlew deploy -Ddeploy.docker.container.id=$(docker ps -lq)注Windows でデプロイメントが失敗する場合は、 コンテナ内で Liferay をバインドマウントし、
.\gradlew jarを使用してモジュール JAR をビルドし、その JAR を適切なバインドマウントされたフォルダにコピーする必要があるかもしれません。 -
更新されたフラグメントが提供セットに含まれていることを確認します。 ブラウザで
https://localhost:8080にアクセスし、画面左側のサイトメニューで、[デザイン] → [フラグメント]に移動します。 L3M9 ジャンボトロンフラグメントが L3M9 セットに表示されます。
これで、コントリビュート フラグメント セットを作成する方法がわかり、新しいコントリビュート フラグメント セットが Liferay に追加されました。