Hemos renombrado las ofertas comerciales de Liferay de LXC a Liferay SaaS, de LXC - SM a Liferay PaaS y de DXP a Liferay Self-Hosted. Para más información, haz clic aquí.

Release Notes

Se ha producido un error al procesar la plantilla.
The following has evaluated to null or missing:
==> restArticle.taxonomyCategoryBriefs  [in template "2010607#2010649#24589764" at line 229, column 72]

----
Tip: It's the step after the last dot that caused this error, not those before it.
----
Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #list restArticle.taxonomyCategoryBri...  [in template "2010607#2010649#24589764" at line 229, column 65]
----
1<style> 
2	.container-release-highlights-search { 
3		a.features-container:hover, a.features-container.hover { 
4			background-color: var(--color-action-primary-hover-10, #EDF3FE); 
5			border: 0.0625rem solid var(--link-hover-color, #0053F0); 
6			color: var(--link-hover-color, #0053F0); 
7			text-decoration: none; 
8
9 
10		.empty-container { 
11			background-color: var(--color-neutral-0); 
12			border-color: var(--color-neutral-3); 
13			border-radius: var(--border-radius); 
14			border-style: solid; 
15			border-width: 0.0625rem; 
16			margin-top: 1.5rem; 
17			padding: 1.5rem 1.5rem 0.0625rem 1.5rem; 
18
19 
20		.empty-message-title { 
21			color: var(--color-neutral-10, #282934); 
22			font-size: 1.125rem; 
23			font-weight: 600; 
24			line-height: 1.25rem; 
25
26 
27		.empty-result-message { 
28			align-items: center; 
29			margin: 5rem auto; 
30
31 
32		.features-box { 
33			padding: 0.25rem 0.25rem 0.25rem 0.625rem; 
34
35 
36		.features-container { 
37			background-color: var(--color-brand-primary-lighten-6, #FBFCFE); 
38			border: 0.0625rem solid var(--color-brand-primary-lighten-5, #E7EFFF); 
39			border-radius: 0.625rem; 
40			color: var(--link-hover-color, #0053F0); 
41			font-size: 0.813rem; 
42			font-weight: 600; 
43			line-height: 1rem; 
44			padding: 0.75rem; 
45			word-break: break-word; 
46
47 
48		.features-container > svg { 
49			fill: var(--link-color, #0B5FFF); 
50			height: 0.75rem; 
51			width: 0.75rem; 
52
53 
54		.features-container a { 
55			text-decoration: none; 
56
57 
58		.features-container span { 
59			padding-left: 0.5rem; 
60
61 
62		.features-header { 
63			color: var(--color-neutral-8, #54555F); 
64			font-size: 0.813rem; 
65			margin-bottom: 0.5rem; 
66			padding: 0.25rem 0.25rem 0.25rem 0.625rem; 
67
68 
69		.icon-container { 
70			background-color: #E7EFFF; 
71			border-radius: 0.5rem; 
72			margin-bottom: 2rem; 
73			max-width: 9rem; 
74
75 
76		.pagination-bar { 
77			align-items: flex-start; 
78			display: flex; 
79			gap: 1rem; 
80
81 
82		.pagination-bar .dropdown.pagination-items-per-page { 
83			align-items: flex-start; 
84			display: flex; 
85
86 
87		.pagination-bar .dropdown.pagination-items-per-page .dropdown-toggle.page-link { 
88			align-items: center; 
89			border-width: 0rem; 
90			color: var(--color-action-neutral-default, #2B3A4B); 
91			display: flex; 
92			font-size: 0.875rem; 
93			font-style: normal; 
94			font-weight: 600; 
95			gap: 0.25rem; 
96			justify-content: center; 
97			line-height: 1rem; 
98			text-align: center; 
99
100 
101		.pagination-bar .dropdown.pagination-items-per-page .dropdown-toggle.page-link .c-inner { 
102			align-items: center; 
103			display: flex; 
104			height: 1rem; 
105			justify-content: center; 
106
107 
108		.pagination-bar .dropdown.pagination-items-per-page .dropdown-toggle.page-link .c-inner .lexicon-icon.lexicon-icon-caret-double-l { 
109			align-items: center; 
110			display: flex; 
111			flex-shrink: 0; 
112			height: 1rem; 
113			justify-content: center; 
114			width: 1rem; 
115
116 
117		.pagination-bar .pagination { 
118			align-items: flex-start; 
119			display: flex; 
120			gap: 0.5rem; 
121			justify-content: center; 
122
123 
124		.pagination-bar .pagination .page-item .page-link { 
125			align-items: center; 
126			border-radius: 0.375rem; 
127			border-width: 0rem; 
128			color: var(--color-action-neutral-default, #2B3A4B); 
129			display: flex; 
130			font-size: 0.875rem; 
131			font-style: normal; 
132			font-weight: 600; 
133			gap: 0.25rem; 
134			justify-content: center; 
135			line-height: 1rem; 
136			min-width: 2rem; 
137			padding: 0.5rem; 
138			text-align: center; 
139
140 
141		.pagination-bar .pagination .page-item.active .page-link { 
142			background: var(--color-action-neutral-active-20, #D5D8DB); 
143
144 
145		.pagination-bar .pagination-results { 
146			align-items: flex-start; 
147			color: var(--color-neutral-10, #282934); 
148			display: flex; 
149			font-size: 0.8125rem; 
150			font-style: normal; 
151			font-weight: 400; 
152			gap: 0.25rem; 
153			line-height: 1rem; 
154			margin-top: 0.5rem; 
155
156 
157		.search-icon>svg { 
158			fill: var(--link-color, #0B5FFF); 
159			height: 2rem; 
160			margin: 1.5rem 3.5rem; 
161			width: 2rem; 
162
163 
164		.search-results .product-capabilities { 
165			padding-bottom: 1rem; 
166
167 
168		.search-results .search-results-entry { 
169			align-items: flex-start; 
170			display: flex; 
171			flex-direction: column; 
172			gap: 0.25rem; 
173
174 
175		.search-results .search-results-entry .search-results-entry-title { 
176			color: var(--color-neutral-10, #282934); 
177			border-radius: 0.625rem; 
178			font-size: 1.438rem; 
179			font-style: normal; 
180			font-weight: 700 !important; 
181			line-height: 1.5rem; 
182			padding: 0.5rem 1rem 0rem 0.625rem; 
183			scroll-margin-top: 200px; 
184
185 
186		.search-results .search-results-entry .search-results-entry-title a { 
187			color: var(--color-neutral-10, #282934); 
188
189 
190		.search-results .search-results-entry .search-results-entry-title .search-results-entry-content { 
191			color: var(--color-neutral-10, #282934); 
192			font-size: 1rem; 
193			font-style: normal; 
194			font-weight: 400; 
195			line-height: 1.5rem; 
196			margin-top: 1rem; 
197
198 
199		.search-results .search-results-entry .search-results-entry-title:hover { 
200			background: var(--color-action-primary-hover-10, #EDF3FE); 
201			padding: 0.5rem 1rem 0rem 0.625rem; 
202
203 
204		.search-results .solid { 
205			border-top: 0.0625rem solid var(--color-neutral-2, #E2E2E4); 
206
207
208 
209	.lfr-layout-structure-item-row { 
210		overflow: visible; 
211
212</style> 
213 
214<div class="container-release-highlights-search"> 
215	<div class="pt-2 search-results" id="searchResults"> 
216		<#if entries?has_content> 
217			<#list entries as searchEntry> 
218				<#assign restArticle = restClient.get("/headless-delivery/v1.0/structured-contents/${searchEntry.getClassPK()}?fields=contentFields,relatedContents,taxonomyCategoryBriefs,title&nestedFields=embeddedTaxonomyCategory") /> 
219 
220				<#if restArticle?has_content> 
221					<div class="align-items-stretch pt-2 search-results-entry"> 
222						<#assign 
223							articleTitle = restArticle.title 
224							escapedTitle = htmlUtil.escapeURL(articleTitle) 
225						/> 
226 
227						<div class="font-weight-bold search-results-entry-title text-decoration-none unstyled" id="${escapedTitle}"> 
228							<div class="product-capabilities"> 
229								<#list restArticle.taxonomyCategoryBriefs as taxonomyCategoryBrief> 
230									<#assign taxonomyVocabularyName = taxonomyCategoryBrief.embeddedTaxonomyCategory.parentTaxonomyVocabulary.name /> 
231 
232									<#if taxonomyVocabularyName == "Product Capabilities"> 
233										<span class="font-weight-normal label label-secondary label-tonal-info m-0 px-2 text-paragraph-sm"> 
234											${taxonomyCategoryBrief.taxonomyCategoryName} 
235										</span> 
236									</#if> 
237								</#list> 
238							</div> 
239 
240							<a class="text-decoration-none" href="#${escapedTitle}"> 
241								${articleTitle} 
242							</a> 
243 
244							<div class="description search-results-entry-content"> 
245								<#list restArticle.contentFields as fieldData> 
246									<#if fieldData.contentFieldValue.data?has_content && validator.isNotNull(fieldData.contentFieldValue.data)> 
247										<#assign webContentData = fieldData.contentFieldValue.data /> 
248 
249										<div> 
250											${webContentData} 
251										</div> 
252									</#if> 
253								</#list> 
254							</div> 
255						</div> 
256 
257						<#if restArticle.relatedContents?has_content> 
258							<div class="pb-2"> 
259								<div class="features-header"> 
260									${languageUtil.get(locale, "features", "Features")}: 
261								</div> 
262 
263								<#list restArticle.relatedContents as relatedContents> 
264									<#assign 
265										relatedContentsId = relatedContents.id 
266										relatedContentsTitle = relatedContents.title 
267									/> 
268 
269									<div class="d-flex features-box"> 
270										<a class="features-container openSidetab" data-request-id="${relatedContentsId}" href="javascript:;"> 
271											<@clay["icon"] symbol="check-square" /> 
272 
273											<span> 
274												${relatedContentsTitle} 
275											</span> 
276										</a> 
277									</div> 
278								</#list> 
279							</div> 
280						</#if> 
281					</div> 
282 
283					<hr class="solid"> 
284				</#if> 
285			</#list> 
286		<#else> 
287			<div class="empty-container"> 
288				<div class="d-flex empty-result-message flex-column"> 
289					<div class="icon-container"> 
290						<div class="search-icon"> 
291							<@clay["icon"] symbol="search-experiences" /> 
292						</div> 
293					</div> 
294 
295					<span class="empty-message-title text-center"> 
296						${languageUtil.get(locale, "no-highlights-found-for-the-selected-product-capabilities", "No highlights found for the selected product capabilities.")} 
297					</span> 
298				</div> 
299			</div> 
300		</#if> 
301	</div> 
302</div> 
Product Capabilities