サイト初期化子
Liferay DXP 2023.Q4+/ポータル GA100+
サイト初期化機能は、ページ、コンテンツ、構成をパッケージ化して、サイトの大部分が既に構築されている状態で新しいサイトをすぐに開始できるようにします。 これらを複数の Liferay インスタンス間で再利用して、サイトの重要なコンポーネントを迅速に複製できます。
Site Initializer クライアント拡張機能の使用に関する完全な手順については、「 Site Initializer の使用 」を参照してください。
サイト初期化子の作成
サイト初期化子は クライアント拡張機能として展開されます。 サイト初期化子を作成するには、 client-extension.yaml ファイルを作成する必要があります。
client-extension.yamlの siteName プロパティを使用して、新しいサイトの名前を定義します。 クライアント拡張機能の定義の詳細については、「 クライアント拡張機能の使用 」を参照してください。
site-configuration.json ファイルにサイト構成 (手動メンバーシップを使用するかどうかなど) を追加します。 このファイルを、クライアント拡張プロジェクト フォルダー内の site-initializer/ フォルダーに追加します。
たとえば、次の JSON はサイトのタイプと手動メンバーシップを構成します。
{
"manualMembership": "true",
"membershipRestriction": "0",
"typeSite": "1"
}
既存のサイトの Group_ データベース テーブルのデータを調べることで、これらの構成の値を確認できます。
サイト初期化ツールにコンテンツを追加するには、必要なスキーマに基づいて特定の形式に従って各アセット タイプに JSON データを追加し、適切な場所に配置する必要があります。
インポートアセットにファイルを追加する
ほぼすべてのアセット タイプは、 site-initializer/ フォルダーに JSON で追加されます。 ただし、特定のアセット タイプによって、データを追加する場所と方法が決まります。
- 常にLiferayインスタンス全体 にスコープされるアセットタイプ(複数存在する場合もあります)( 組織 や ロールなど)の場合は、アセットタイプにちなんで名付けられた単一のJSONファイルにすべてを
site-initializer/フォルダのルートに含めます(例:roles.json)。 - フラグメント やページなど、より複雑なアセット タイプ (複数の JSON ファイルが必要になる場合があります) の場合は、アセット タイプに基づいて名前を付けたフォルダー (例:
フラグメント /またはレイアウト /) と、各アセットの特定のサブフォルダー (例:フラグメント /、フラグメント /など) を追加します。 アセット タイプに基づいて JSON ファイルに名前を付けます (例:fragment.json)。 - その他のアセット タイプは、アセット タイプにちなんで名付けられたフォルダー (例:
object-actions/) に属し、各アセットには独自の JSON ファイルに含まれています。
独自のフォルダに属するアセットタイプについては、そのコンテンツを group/、 company/、または asset-libraries/ に配置して、それぞれインポートされたサイト、Liferayインスタンス全体、またはアセットライブラリにスコープするように指定できます。
以下のアセット タイプを組み込む場合、複数の JSON ファイルが使用されます。
- コマース カタログ には、オプション (
[カタログ名].options.json)、製品 ([カタログ名].products.json)、製品仕様 ([カタログ名].products.specifications.json)、およびサブスクリプション プロパティ ([カタログ名].products.subscriptions.properties.json) の追加 JSON ファイルが含まれます。 また、製品画像を含むフォルダー (カタログの名前を共有) が存在する場合もあります。 - コマース通知テンプレート には、言語ごとに電子メール テンプレート本文 を含む個別の HTML ファイルが必要です (言語コードに基づいて名前が付けられます。例:
en-US.html)。 - DDM テンプレート には、FreeMarker テンプレート自体 (JSON ファイルと同じ名前) を含む別の
.ftlファイルが必要です。 - フラグメント には、フラグメント コード用の別個の
index.css、index.html、およびindex.jsファイルが必要です。 使用されていない場合は空のままになることがあります。 - 通知テンプレート には、言語ごとに電子メール テンプレート本文 を含む個別の HTML ファイルが必要です (言語コードに基づいて名前が付けられます。例:
en-US.html)。 関連するオブジェクトアクションは、別のnotification-template.object-actions.jsonファイルに含めることもできます。 - セグメント エクスペリエンス には、セグメント エクスペリエンスの JSON ファイルと同じ名前のフォルダーに、ページ (
page.jsonファイル内) とページ定義 (page-definition.jsonファイル内) を含めることができます。 サブフォルダーに子ページを含めることもできます。 - スタイルブック には、スタイルブックトークン用の個別の JSON ファイル (
frontend-tokens-values.jsonファイル内) と、サムネイル用の個別の画像ファイル (例:thumbnail.png) が含まれています。 - ページ、 ページ テンプレート、および ユーティリティ ページ はすべて、ページ定義 (
page-definition.json) を含む個別の JSON ファイルを必要とします。 - 語彙 には、含まれるカテゴリとサブカテゴリを必要な階層に含めることができます (親カテゴリにちなんで名付けられたフォルダーに子カテゴリを追加することによって)。 カテゴリ は、それを含む語彙内に なければなりません。
- Web コンテンツ (ジャーナル) 記事 には、記事の内容を含む別の XML ファイル (JSON ファイルと同じ名前) が必要です。 各記事のフォルダーに配置する代わりに、フォルダーのメタデータを含む JSON ファイルをフォルダーと一緒に含める (例:
[フォルダー名].metadata.json) ことで、Web コンテンツ フォルダーの任意の階層にネストすることもできます。 - ワークフロー定義 には、ワークフロー定義自体を含む別の XML ファイル (JSON ファイルと同じ名前) と、プロパティ用の別の JSON ファイル (
workflow-definition.properties.json) が必要です。
上記のルールには以下の例外もあります。
- コマース カタログ では、アセット名の代わりに共有フォルダー内のカタログの名前が使用されます (例:
[カタログ名].json)。 - DDM 構造 は、JSON ではなく XML 構造として含まれる場合があります。
- ドキュメント には、ドキュメント ファイル自体 (目的のドキュメント フォルダー構造内) のみが必要です。
- キーワード は、サイトまたはアセット ライブラリにスコープされているにもかかわらず、それぞれに 1 つのファイルではなく、単一の共有 JSON ファイルに含まれています (例:
keywords/group/keywords.json)。 - ページ、 ページ テンプレート、および ユーティリティ ページ では、個々の JSON ファイルに、
レイアウトではなくページを使用して、アセット タイプに基づいて名前を付ける必要があります (例:page-template.json)。 - 新しいサイトのページセット は、
public/metadata.jsonまたはprivate/metadata.jsonに属します。 - ポートレット設定 は、JSON ではなく FTL テンプレートとして追加されます。
JSONデータの準備
ほとんどのアセットタイプに必要な最も重要な情報は JSON データです。 正しいデータを取得する最も早い方法は、別の Liferay インスタンスでデータを作成することですが、データを取得する正しい方法はアセットの種類によって異なります。 各タイプで取得する方法を確認するには、Liferay のソース コードを調べる必要があります。
-
追加するアセットまたはコンテンツのタイプについては、
liferay-portalソース コード リポジトリ に移動し、アセット タイプに適したInitializerクラスを検索します:BundleSiteInitializer、CommerceSiteInitializer、またはOSBSiteInitializer。Initializerクラスには、アセットの名前を持つ_add*または_addOrUpdate*メソッドがあります。 コード内のアセット名は、データベースで使用されている名前に従うことに注意してください (例: ジャーナル記事 ではなく Web コンテンツ記事、または レイアウト ではなく ページ)。 これらのイニシャライザクラスのいずれにも目的のアセット タイプがない場合、サイト イニシャライザの一部としてサポートされません。 -
正しい
Initializerクラスで、選択したアセットの種類に適したメソッドを確認します (例: 通知テンプレートの場合は_addOrUpdateNotificationTemplate)。 次のメソッド呼び出しのメソッド実装を検索します。-
toDTO: メソッドにtoDTOメソッドの呼び出しが含まれている場合は、対応する REST API エンドポイント ([your domain]/o/api) を見つけ、そこでgetメソッドを使用してアセットをダウンロードし、使用可能な JSON データを取得します。 API が ID による取得を必要とする場合は、データベース テーブルでアセットを識別する必要があります。 -
代わりにメソッドに
[AssetName]Importer.import*への呼び出しが含まれている場合 (例:layoutsImporter.importFile)、 データ移行センター を使用するか、サイト メニューのコンテンツ ページの エクスポート オプションを使用して関連データをダウンロードします。 データ移行センターを有効にするには、機能フラグを有効にする必要があります。
-
バッチ フレームワークのデータ移行センターは ベータ機能です。
データ移行センターを使用するには、「インスタンス設定」→「機能フラグ」で機能フラグを有効にします。 これは、ベータ機能セクションに データ移行センター (COMMERCE-8087)として記載されています。 あるいは、Liferay を起動する前に、次の ポータル プロパティ を追加します。
feature.flag.COMMERCE-8087=true
メソッドがこれらのいずれのメソッドも呼び出さない場合、アセットはデータベース スキーマ自体に従う必要があります。 アセットの構成を取得するには、データベース管理者がデータベースに直接クエリを実行する必要がある場合があります。
データの調整
JSON 形式のデータを取得したら、それを調整するためにいくつか変更を加える必要があります。 一部の情報(特定の ID など)は、その情報元の Liferay インスタンスにのみ適用されるため、サイト初期化機能では許可されません。
データを調整するには、次の手順に従います。
-
アセットの ID、作成/変更日、作成されたユーザーの情報、関連するアセット ID など、対象の Liferay インスタンスに適用されない可能性のある特定の ID またはその他のアセットに依存するフィールドを削除します。
-
1 つ以上のフィールドに別のファイルで必要なデータ (電子メール通知の本文など) が含まれている場合は、そのフィールドを削除して他のファイルを使用します。
-
資産に外部参照コードがある場合は、それを新しい一意の値に変更します。
交換トークン
置換トークンを使用して、各デプロイメントに固有のアセットのフィールド値 (サイト ID など) を設定できます。 サイト固有の値の代わりに、次のトークン値を使用します。
[$COMPANY_ID$][$GROUP_FRIENDLY_URL$][$GROUP_ID$][$GROUP_KEY$][$PORTAL_URL$]
これらのトークンは、サイト初期化ツールがデプロイされると、JSON 内の文字列値 (引用符を含む) に変換されます。
また、これらのトークンのいずれかを代わりに # 記号と共に使用して (例: [#GROUP_ID#])、引用符なしで値を表すこともできます (たとえば、数値のみが必要な場合)。
置換トークンを使用して、デプロイメントまで生成されない他のアセット ID を表すこともできます。 たとえば、次の JSON を使用して、生成された ObjectDefinition1 アセットの ID を使用して objectDefinitionId フィールドを設定できます。
"objectDefinitionId": "[$OBJECT_DEFINITION_ID:ObjectDefinition1$]"
サイト内のさまざまなアセット タイプを調整するには、Liferay のデータベースにおけるそれらの関係についての知識が必要です。 JSON データへの変更を本番インスタンスにデプロイする前に徹底的にテストしてください。
この種類の置換トークンでは、次の両方の形式がサポートされています。
[$FIELD_NAME:AssetName$]: これにより、指定されたフィールドの値が、一致するnameフィールドを持つアセットの ID に設定されます。[$FIELD_NAME:path/to/file/filename$]: 指定されたフィールドの値を、指定されたファイル パスにあるアセットの ID に設定します。 (パスはクライアント拡張機能のフォルダーから始まり、/site-initializer/になります)。 必要なアセットに一意の名前がない場合に、この形式を使用します。
サイト初期化子の展開
サイト初期化子は、他のクライアント拡張機能と同じ方法で展開されます。 必要なデプロイメント方法は、対象の Liferay インスタンスがどのようにホストされているかによって異なります。
詳細については、「 Liferayインスタンスへのデプロイ 」を参照してください。