テンプレート処理中にエラーが発生しました。
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@51577ebb"; 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> 

Webコンテンツテンプレートのフラグメントへのマッピング

デフォルトでは、 Web コンテンツ構造 フィールドの単一値(日付、数値、画像、数値、テキストなど)をフラグメントにマッピングできます。 多値フィールド(リストからの選択、ラジオボタン、HTMLなど)の場合、最初に Webコンテンツテンプレートを使ってフィールドをレンダリングする必要があります。

例えば、この画像の Web Content with Audience 構造には、 Text タイプの Content フィールドと、 Select from List タイプの Audience フィールドが含まれています:

デフォルトでは、単一値の構造体フィールドをフラグメントにマッピングできます。

単一値のコンテンツフィールドはフラグメントに直接マッピングできますが、複数値のオーディエンスフィールドをマッピングするにはウェブコンテンツテンプレートが必要です。 ウェブコンテンツ・テンプレート は、マップしたいフィールドを含むウェブコンテンツ記事と同じ構造を使うべきです。 この関係を表したのが次の画像です。

ウェブコンテンツ記事と同じ構造を使用するウェブコンテンツ・テンプレートを作成する。

note

複数の構造体フィールド値を個々のフラグメントにマッピングしたい場合は、その構造体を使用する各フィールドに対して1つのフィールドだけをレンダリングする別のWebコンテンツテンプレートを作成する必要があります。 すべてのフィールドを1つのテンプレートにレンダリングすると、テンプレートを選択したときに、すべてのフィールドの値がフラグメントにマップされます。

Webコンテンツテンプレートのフラグメントへのマッピング

  1. マッピングしたい複数値フィールドを含むウェブコンテンツ構造 を作成します。

  2. ウェブ・コンテンツ・テンプレート 、マルチバリュー・フィールド(A)と同じ構造を使用する。

  3. ウェブ・コンテンツ・テンプレートで、フィールド(B)の下にある、 変数(C)を、構造内の複数値フィールドで選択します。

    複数値フィールドを持つ構造に基づいて、ウェブコンテンツのテンプレートを作成する。

  4. 前回のウェブコンテンツ・テンプレートに基づき、ウェブコンテンツ を作成します。

    複数値フィールドを持つテンプレートに基づいてウェブコンテンツを作成します。

  5. フラグメント対応ページ(コンテンツページ、表示ページテンプレートなど)で フラグメントを追加.

  6. サイドバーパネルで、 Selection(Selection) ボタンをクリックし、マッピングしたいフラグメントの要素を選択します。

  7. マッピングセクションで、 マッピングしたい値を含むウェブコンテンツ記事を選択し、 マッピングします。

  8. フィールド ドロップダウンメニューをクリックし、前に作成したウェブコンテンツテンプレートを選択します。

    ウェブコンテンツテンプレートのフィールドをフラグメントにマッピングします。

  9. 公開] をクリックして変更を保存します。

warning

ウェブコンテンツの記事は編集・保存されたときにインデックスが再作成されるが、コンテンツページは(リソースを節約するために)公開されたときにのみインデックスが再作成される。 そのため、キャッシュされたフラグメントにマップされたウェブコンテンツ記事が更新されると、ページを再度公開するか、 フラグメントをキャッシュ可能なものとしてマーク解除 するまで、更新はコンテンツページに表示されません。

関連トピック

フラグメントの使用

Webコンテンツストラクチャーを理解する

Webコンテンツテンプレートの作成