Developing Page Fragments
ご覧のページは、お客様の利便性のために一部機械翻訳されています。また、ドキュメントは頻繁に更新が加えられており、翻訳は未完成の部分が含まれることをご了承ください。最新情報は都度公開されておりますため、必ず英語版をご参照ください。翻訳に問題がある場合は、 こちら までご連絡ください。

提供されたフラグメントセットの作成

提供されたフラグメント セットは、ページ フラグメントを含むデプロイ可能なモジュールです。 提供セット内のフラグメントは通常のフラグメントのように使用できますが、データベースには含まれず、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に変更します。

次に、次の手順に従ってサンプルをデプロイし、提供されたフラグメント セットがどのようになるかを確認します。

  1. の例をダウンロードして解凍します:

    curl https://resources.learn.liferay.com/examples/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. 提供されたフラグメント セットが利用可能であることを確認します。 サイト メニュー (Site Menu) を開き、 デザイン → フラグメントに移動します。 セットはデフォルト セット リストに表示されます。

    提供されたフラグメントセットがデフォルトセットリストに表示されていることを確認します。

ここまでで、 提供されたフラグメント セットを正常にデプロイしました。

ご覧のとおり、提供されたフラグメント セットはデフォルトのフラグメント セットとともに表示され、フラグメントは 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/
    
    注

    パッケージ化されたフラグメントは dependencies フォルダーに配置され、クラス パッケージ名とリソース パッケージ名が一致する必要があります (例: [class.package.path].dependencies)。

    注

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

  2. 更新された提供されたセットの JAR をビルドします。

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

    Windows でデプロイメントが失敗する場合は、 コンテナ内で Liferay をバインドマウントし、 .\gradlew jarを使用してモジュール JAR をビルドし、その JAR を適切なバインドマウントされたフォルダにコピーする必要があるかもしれません。

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

    カスタム Jumbotron フラグメントは提供セットに含まれています。

  これで、コントリビュート フラグメント セットを作成する方法がわかり、新しいコントリビュート フラグメント セットが Liferay に追加されました。