テンプレート処理中にエラーが発生しました。
Java method "com.liferay.portal.json.JSONFactoryImpl.createJSONObject(String)" threw an exception when invoked on com.liferay.portal.json.JSONFactoryImpl object "com.liferay.portal.json.JSONFactoryImpl@2ad66ae2"; see cause exception in the Java stack trace.

----
FTL stack trace ("~" means nesting-related):
	- Failed at: navigationJSONObject = jsonFactoryUti...  [in template "17855804202317#32484267#LEARN-ARTICLE-NAV" at line 4, column 9]
----
1<#assign 
2	groupFriendlyURL = themeDisplay.getScopeGroup().getFriendlyURL() 
3	groupPathFriendlyURLPublic = themeDisplay.getPathFriendlyURLPublic() + groupFriendlyURL 
4	navigationJSONObject = jsonFactoryUtil.createJSONObject(navigation.getData()) 
5	navigationMenuItems = 
6
7			"Analytics Cloud": { 
8				"image": "/documents/d${groupFriendlyURL}/analytics_c-svg", 
9				"title": "Analytics Cloud", 
10				"url": "analytics-cloud" 
11			}, 
12			"Commerce": { 
13				"image": "/documents/d${groupFriendlyURL}/commerce_product-svg", 
14				"title": "Commerce", 
15				"url": "commerce" 
16			}, 
17			"DXP": { 
18				"image": "/documents/d${groupFriendlyURL}/dxp_p-svg", 
19				"title": "DXP / Portal", 
20				"url": "dxp" 
21			}, 
22			"Liferay Cloud": { 
23				"image": "/documents/d${groupFriendlyURL}/dxp_c-svg", 
24				"title": "Liferay Cloud", 
25				"url": "liferay-cloud" 
26			}, 
27			"Reference": { 
28				"image": "/documents/d${groupFriendlyURL}/reference-svg", 
29				"title": "Reference", 
30				"url": "reference" 
31
32
33 
34	breadcrumbJSONArray = navigationJSONObject.getJSONArray("breadcrumb") 
35	childrenJSONArray = navigationJSONObject.getJSONArray("children") 
36	parentJSONObject = navigationJSONObject.getJSONObject("parent") 
37	productJSONObject = breadcrumbJSONArray.getJSONObject(breadcrumbJSONArray.length()-1)!navigationJSONObject.getJSONObject("self") 
38	siblingsJSONArray = navigationJSONObject.getJSONArray("siblings") 
39/> 
40 
41<div class="learn-article-nav"> 
42	<#if productJSONObject?has_content && productJSONObject.getString("title")?has_content && navigationMenuItems[productJSONObject.getString("title")]?has_content && navigationMenuItems[productJSONObject.getString("title")].title?has_content> 
43		<div 
44			class="dropdown learn-article-nav-root learn-dropdown" 
45
46			<div class="learn-article-nav-item"> 
47				<div class="d-flex"> 
48					<div class="learn-article-nav-image"> 
49						<img 
50							class="lexicon-icon lexicon-icon-caret-bottom product-icon" 
51							role="presentation" 
52							src='${navigationMenuItems[productJSONObject.getString("title")].image}' 
53							viewBox="0 0 512 512" 
54						/> 
55					</div> 
56 
57					<span class="learn-article-nav-text">${navigationMenuItems[productJSONObject.getString("title")].title}</span> 
58				</div> 
59 
60				<div id="dropdown-icon"> 
61					<svg 
62						class="lexicon-icon lexicon-icon-caret-bottom" 
63						role="presentation" 
64						viewBox="0 0 512 512" 
65
66						<use xlink:href="/o/admin-theme/images/clay/icons.svg#caret-bottom"></use> 
67					</svg> 
68				</div> 
69			</div> 
70 
71			<ul class="dropdown-menu learn-dropdown-menu"> 
72				<#list navigationMenuItems as key, value> 
73					<li> 
74						<a 
75							class="dropdown-item learn-article-nav-item" 
76							href="/w/${navigationMenuItems[key].url}/index" 
77							tabindex="4" 
78
79							<span class="d-flex"> 
80								<span class="learn-article-nav-image"> 
81									<img 
82										class="lexicon-icon lexicon-icon-caret-bottom product-icon mt-0 mr-2" 
83										role="presentation" 
84										src="${value.image}"height: 25px; margin-left: 5px; max-width: none; width: 25px; 
85										viewBox="0 0 512 512" 
86									/> 
87								</span> 
88								<span class="learn-article-nav-text">${value.title}</span> 
89							</span> 
90 
91							<#if navigationMenuItems[productJSONObject.getString("title")].url == value.url> 
92								<span> 
93									<@clay["icon"] symbol="check" /> 
94								</span> 
95							</#if> 
96						</a> 
97					</li> 
98				</#list> 
99			</ul> 
100		</div> 
101	</#if> 
102 
103	<div class="learn-article-nav-content"> 
104		<#if parentJSONObject?has_content && parentJSONObject.getString("url")?has_content> 
105			<div class="learn-article-nav-item learn-article-nav-parent liferay-nav-item p-2"> 
106				<div class="mr-2"> 
107					<a 
108						href='${parentJSONObject.getString("url")}' 
109
110						<svg 
111							class="lexicon-icon lexicon-icon-angle-left" 
112							role="presentation" 
113							viewBox="0 0 512 512" 
114
115							<use xlink:href="/o/admin-theme/images/clay/icons.svg#angle-left"></use> 
116						</svg> 
117					</a> 
118				</div> 
119 
120				<span>${parentJSONObject.getString("title")}</span> 
121			</div> 
122		</#if> 
123 
124		<#if childrenJSONArray.length() gt 0> 
125			<ul class="m-0 p-2"> 
126				<#list 0..childrenJSONArray.length()-1 as i> 
127					<li class="learn-article-nav-item"> 
128						<a 
129							class='liferay-nav-item ${(navigationJSONObject.getJSONObject("self").url == childrenJSONArray.getJSONObject(i).url)?then("selected", "")}' 
130							href="${childrenJSONArray.getJSONObject(i).url}" 
131
132							<span>${childrenJSONArray.getJSONObject(i).getString("title")}</span> 
133						</a> 
134					</li> 
135				</#list> 
136			</ul> 
137		<#elseif siblingsJSONArray.length() gt 0> 
138			<ul class="m-0 p-2"> 
139				<#list 0..siblingsJSONArray.length()-1 as i> 
140					<li class="learn-article-nav-item"> 
141						<a 
142							class='liferay-nav-item ${(navigationJSONObject.getJSONObject("self").url == siblingsJSONArray.getJSONObject(i).url)?then("selected", "")}' 
143							href="${siblingsJSONArray.getJSONObject(i).url}" 
144
145							<span>${siblingsJSONArray.getJSONObject(i).getString("title")}</span> 
146						</a> 
147					</li> 
148				</#list> 
149			</ul> 
150		</#if> 
151	</div> 
152</div> 

ページテンプレートのエクスポートとインポート

コードエディタでテンプレートを編集する方が簡単な場合があります。 ページテンプレート を作成したら、 をエクスポートし、ローカルで好きなエディタで編集し、テンプレートをLiferayにインポートし直すことができます。 テンプレートはシステム上のどのサイトにもインポートできる。

エクスポート/インポート・フレームワークの一般的な情報については、 サイト・ページとコンテンツのエクスポート/インポート を参照。

note

Liferay DXP 7.4+では、ページテンプレートコレクションはLiferay UIではページテンプレートセットと呼ばれています。

ページテンプレートのエクスポート

  1. サイトメニュー )を開き、 デザインページテンプレート に移動します。

  2. ページテンプレート タブを選択します。

  3. 必要なテンプレートを含むページテンプレートセットを選択します。

  4. 目的のコンテンツページテンプレートの Actions(Actionsボタン)をクリックし、 Export を選択します。

    Click Export to export your page template as a ZIP file

コンテンツページのテンプレートは、ZIPファイルとしてローカルマシンにダウンロードされます。

tip

一度に複数のコンテンツページテンプレートをエクスポートできます。

ページテンプレートの最後に公開されたバージョンは常にエクスポートされる。 ページテンプレートが一度も公開されていない場合は、エクスポートできません。

エクスポートされたZIPファイルには次のファイルが含まれています。

  • page-template-collection.json:ページテンプレートが保存されているセットの名前とその他のメタデータを含む。
  • オプションのサムネイルファイル
  • page-template.json:ページテンプレート名とその他のメタデータを含む。
  • page-definition.json: ページテンプレートの構造と内容を指定する。

ZIPファイルには、display-page-template.jsonmaster-page.jsonpage-template-collection.jsonpage-template.jsonのような、異なるタイプのページテンプレートも含まれているかもしれません。

ページテンプレートのインポート

  1. サイトメニュー )を開き、 デザインページテンプレート に移動します。

  2. アプリケーションバーの オプション(オプションアイコン)をクリックし、 インポート を選択します。

    The import function is located in the options menu in the Application Bar.

  3. 必要なページテンプレートファイルを選択します。

    変更したい場合は、 ファイルを置き換える をクリックしてください。

  4. インポート をクリックします。

    既存のページテンプレートをインポートする場合は、 既存のページテンプレートをインポートする を参照してください。

    操作をキャンセルしてページテンプレートのページに戻るには、 Cancel をクリックします。

    Page templates are imported as ZIP files.

  5. インポート処理が完了すると、 インポート結果ページ にリダイレクトされます。

  6. 別のファイルをインポートするには、 Upload Another File をクリックするか、ページテンプレートのページに戻るには、 Done をクリックしてください。

Important

DXP環境間でページテンプレートを転送するには、LARエクスポートとインポートを使用します。

既存のページテンプレートのインポート

ページテンプレートをインポートし、ZIPファイルのアイテムがすでに存在する場合、3つのオプションのいずれかを選択できます:

既存のアイテムをインポートしないでください :新しいアイテムのみインポートされます。

Overwrite Existing Items :重複した既存項目は上書きされます。

両方キープ :既存のアイテムの番号付きコピーがインポートされます。

インポート処理が完了すると、 インポート結果ページ にリダイレクトされます。

Choose one of three options when you import a duplicated page template

インポート結果ページ

ユーザーがファイルをインポートすると、インポート処理に関する詳細が記載された新しいページにリダイレクトされます。

インポートの結果ページでは、インポートに成功したエントリー、警告(インポートに成功したものの誤動作を引き起こす可能性があるもの)、エラー(インポートされなかったエントリー)を確認することができます。

The import outcome page shows warnings and errors related to the importing process

関連トピック