Search Results

An error occurred while processing the template.
The following has evaluated to null or missing:
==> restClient.get("/headless-admin-taxonomy/v1.0/sites/${companyId}/taxonomy-vocabularies/by-external-reference-code/RESOURCE_TYPE").id  [in template "8911408109993434201#23484949#23489017" at line 6, column 32]

----
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: vocabularyId = restClient.get("/headl...  [in template "8911408109993434201#23484949#23489017" at line 6, column 17]
----
1<#if entries?has_content> 
2 
3	<#assign 
4		totalCount = 0 
5		companyId = themeDisplay.getCompanyGroupId() 
6		vocabularyId = restClient.get("/headless-admin-taxonomy/v1.0/sites/${companyId}/taxonomy-vocabularies/by-external-reference-code/RESOURCE_TYPE").id 
7		categories = restClient.get("/headless-admin-taxonomy/v1.0/taxonomy-vocabularies/${vocabularyId}/taxonomy-categories").items 
8		orderedEntries = [] 
9		validCategoryIds = [] 
10	/> 
11 
12	<#list categories as category> 
13		<#if stringUtil.equals(category.externalReferenceCode, "HOW_TO") || stringUtil.equals(category.externalReferenceCode, "OFFICIAL_DOCUMENTATION")> 
14			<#assign validCategoryIds += [category.id] /> 
15		</#if> 
16	</#list> 
17 
18	<#list assetCategoriesSearchFacetDisplayContext.getBucketDisplayContexts() as bucket> 
19		<#assign totalCount = totalCount + bucket.getCount() /> 
20	</#list> 
21 
22	<ul class="learn-category-facet-tabs list-unstyled tab-list" id="tab-list"> 
23		<li class="facet-value"> 
24			<@clay.button 
25				cssClass="btn-unstyled facet-clear tab-btn text-center ${assetCategoriesSearchFacetDisplayContext.isNothingSelected()?then('selected-tab-btn', '')}" 
26				displayType="link" 
27				onClick="${namespace}updateSelection(event)" 
28				value="clear" 
29
30				<span class="term-text">${languageUtil.get(locale, "all-results", "All Results")}</span> 
31 
32				<#if entry.isFrequencyVisible()> 
33					<span class="term-count">${totalCount}</span> 
34				</#if> 
35			</@clay.button> 
36		</li> 
37 
38	<#list entries as entry> 
39	<#assign categoryId = entry.getFilterValue() /> 
40 
41	<#list categories as category> 
42		<#if category.id == categoryId> 
43			<#if category.externalReferenceCode == "OFFICIAL_DOCUMENTATION"> 
44				<#assign orderedEntries = [entry] + orderedEntries /> 
45			<#elseif category.externalReferenceCode == "HOW_TO"> 
46				<#assign orderedEntries += [entry] /> 
47			</#if> 
48		</#if> 
49	</#list> 
50</#list> 
51 
52<#list orderedEntries as entry> 
53	<li class="facet-value"> 
54		<@clay.button 
55			cssClass="btn-unstyled facet-term tab-btn term-name text-center ${(entry.isSelected())?then('selected-tab-btn', '')}" 
56			data\-term\-id="${entry.getFilterValue()}" 
57			disabled="true" 
58			displayType="link" 
59			onClick="${namespace}updateSelection(event)" 
60
61			<span class="term-text"> 
62				${htmlUtil.escape(entry.getBucketText())} 
63			</span> 
64 
65			<#if entry.isFrequencyVisible()> 
66				<span class="term-count"> 
67					${entry.getFrequency()} 
68				</span> 
69			</#if> 
70		</@clay.button> 
71	</li> 
72</#list> 
73	</ul> 
74 
75	<div class="dropdown learn-category-facet-tabs tab-list" id="tab-list-mobile"> 
76		<button 
77			aria-expanded="false" 
78			aria-haspopup="true" 
79			class="btn btn-unstyled d-inline-block selected-tab-btn" 
80			data-toggle="liferay-dropdown" 
81			displayType="button" 
82			id="dropdownAlignment1" 
83
84			<div class="d-flex facet-value-mobile justify-content-center opacity-75"> 
85				<#assign facetCount = 0 /> 
86				<#list entries as entry> 
87					<#if entry.isSelected()> 
88						<#assign facetCount++ /> 
89 
90						<span class="term-text">${entry.getBucketText()}</span> 
91						<#if entry.isFrequencyVisible()> 
92							<span class="term-count">${entry.getFrequency()}</span> 
93						</#if> 
94					</#if> 
95				</#list> 
96				<#if facetCount == 0> 
97					<span class="term-text">All results</span> 
98					<span class="term-count">${totalCount}</span> 
99				</#if> 
100			</div> 
101		</button> 
102 
103		<ul 
104			aria-labelledby="dropdownAlignment1" 
105			class="dropdown-menu" 
106			x-placement="bottom-start" 
107
108			<li class="align-items-center d-flex position-relative ${assetCategoriesSearchFacetDisplayContext.isNothingSelected()?then('selected-item-mobile-tab', '')}"> 
109				<@clay.button 
110					cssClass="dropdown-item facet-clear nav-link rounded" 
111					displayType="link" 
112					onClick="${namespace}updateSelection(event)" 
113					value="clear" 
114
115					<span class="term-text">${languageUtil.get(locale, "all-results", "All Results")}</span> 
116					<#if entry.isFrequencyVisible()> 
117						<span class="term-count">${totalCount}</span> 
118					</#if> 
119				</@clay.button> 
120			</li> 
121 
122			<#list entries as entry> 
123				<li class="align-items-center d-flex ${(entry.isSelected())?then('selected-item-mobile-tab', '')}"> 
124					<@clay.button 
125						cssClass="dropdown-item facet-clear nav-link rounded" 
126						data\-term\-id="${entry.getFilterValue()}" 
127						displayType="link" 
128						onClick="${namespace}updateSelection(event)" 
129
130						<span class="term-text">${htmlUtil.escape(entry.getBucketText())}</span> 
131						<#if entry.isFrequencyVisible()> 
132							<span class="term-count">${entry.getFrequency()}</span> 
133						</#if> 
134					</@clay.button> 
135				</li> 
136			</#list> 
137		</ul> 
138	</div> 
139</#if> 
140 
141<@liferay_aui.script> 
142	function handleStyleTabs(event) { 
143		const targetButton = event.currentTarget; 
144		const buttons = document.querySelectorAll('.tab-btn'); 
145 
146		buttons.forEach(button => { 
147			button.classList.remove('selected-tab-btn'); 
148		}); 
149 
150		if (targetButton.classList.contains('tab-btn')) { 
151			targetButton.classList.add('selected-tab-btn'); 
152
153
154 
155	function ${namespace}updateSelection(event) { 
156		handleStyleTabs(event); 
157 
158		const form = event.currentTarget.form; 
159 
160		if (form) { 
161			Liferay.Search.FacetUtil.selectTerms(form, []); 
162 
163			if (event.target.value === "clear") { 
164				Liferay.Search.FacetUtil.clearSelections(event); 
165
166			else { 
167				Liferay.Search.FacetUtil.changeSelection(event); 
168
169
170
171</@> 
172 
173<style> 
174	.learn-category-facet-tabs .facet-term-unselected .term-text { 
175		opacity: 0.8; 
176
177 
178	.learn-category-facet-tabs .facet-value { 
179		flex:1; 
180
181 
182	.learn-category-facet-tabs.tab-list { 
183		align-items:center; 
184		display: flex; 
185		background: var(--Neutral-01, #F7F7F8); 
186		border-radius: 99px; 
187		height: 52px; 
188		padding: 4px 6px; 
189
190 
191	.learn-category-facet-tabs .selected-tab-btn { 
192		background: var(--Action-Primary-Active-Lighten, #E6EDFB); 
193		border-radius: 99px; 
194		opacity: 1; 
195		padding: 8px; 
196		text-align: center; 
197		width: 100%; 
198
199 
200	.learn-category-facet-tabs .term-count { 
201		background: var(--Status-Info-Info, #2E5AAC); 
202		border-radius: 12px; 
203		color: var(--Neutral-00, #FFF); 
204		font-size: 13px; 
205		padding: 2px 5px; 
206
207 
208	.learn-category-facet-tabs .term-text { 
209		color: var(--Neutral-10, #282934); 
210		font-size: 14px; 
211		font-style: normal; 
212		font-weight: 600; 
213
214 
215	.selected-item-mobile-tab::after { 
216		background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='15' height='15' fill='currentColor' class='lexicon-icon lexicon-icon-check' role='presentation' viewBox='0 0 512 512'%3E%3Cpath d='M192.9,429.5c-8.3,0-16.4-3.3-22.3-9.2L44.5,294.1C15,263.2,62.7,222,89.1,249.5L191.5,352l230-258.9 c27.2-30.5,74.3,11.5,47.1,41.9L216.4,418.9c-5.8,6.5-14,10.3-22.6,10.6C193.5,429.5,193.2,429.5,192.9,429.5z'%3E%3C/path%3E%3C/svg%3E"); 
217		background-repeat: no-repeat; 
218		background-size: contain; 
219		content: ""; 
220		height: 15px; 
221		position: absolute; 
222		right: 1rem; 
223		top: 50%; 
224		transform: translateY(-50%); 
225		width: 15px; 
226
227 
228	@media screen and (max-width: 992px) { 
229		.learn-category-facet-tabs .facet-value-mobile { 
230			gap: var(--spacer-2, 0.5rem); 
231
232 
233		.learn-category-facet-tabs .facet-value-mobile .term-text { 
234			opacity: 0.80; 
235
236 
237		.learn-category-facet-tabs .dropdown-menu, 
238		.learn-category-facet-tabs#tab-list-mobile { 
239			max-width: none; 
240			padding: var(--spacer-2, 0.5rem); 
241			width: 100%; 
242
243 
244		.learn-category-facet-tabs#tab-list { 
245			display: none !important; 
246
247 
248		.learn-category-facet-tabs#tab-list-mobile { 
249			align-items: center; 
250			display: flex !important; 
251			width: 100%; 
252
253
254 
255	#tab-list-mobile { 
256		display: none; 
257
258 
259	#tab-list-mobile::after { 
260		background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath fill='%23999AA3' d='M103.5 204.3l136.1 136.1c9 9 23.7 9 32.7 0l136.1-136.1c14.6-14.6 4.3-39.5-16.4-39.5H119.9C99.2 164.8 88.9 189.7 103.5 204.3z'/%3E%3C/svg%3E"); 
261		background-repeat: no-repeat; 
262		background-size: contain; 
263		content: ""; 
264		height: 15px; 
265		position: absolute; 
266		right: 1rem; 
267		top: 50%; 
268		transform: translateY(-50%); 
269		width: 15px; 
270
271</style> 
Capability
Feature
Deployment Approach
Configuring Liferay Authentication With PingOne Using SAML
This recipe guides you through the basic steps needed to integrate PingOne, your Identity Provider (IdP), with your Liferay environment using Security Assertion Markup Language (SAML). PingOne...
Published Date: Aug 2, 2024 2:34 PM
Integrate Azure AD with Liferay DXP Using OpenID Connect
This recipe guides you through the basic steps needed to integrate Azure AD (now known as Microsoft Entra ID), your Identity Provider (IdP), with your Liferay environment using OpenID Connect....
Published Date: Aug 2, 2024 4:36 PM
Integrate Azure AD with Liferay DXP Using SAML
As a general best practice, integrating Liferay DXP with other Identity Providers (IdPs) provides enhanced security and streamlines authentication management. This recipe guides you through the...
Published Date: Aug 5, 2024 5:12 PM
Building Multi-Step Forms With Liferay DXP Objects
This recipe guides you through the basic steps to build a multi-step form. Liferay DXP environment An object definition with fields A user who has access and control to create and manage objects,...
Published Date: Aug 6, 2024 6:21 PM
Integrate Okta with Liferay DXP using OpenID Connect
This recipe guides you through the steps to integrate Okta, your Identity Provider (IdP), with your Liferay environment using OpenID Connect. Okta Dev account Liferay DXP environment Administrative...
Published Date: Aug 6, 2024 8:09 PM
Designing and Displaying Reusable Navigation Menus
Navigation menus for a site are typically tied strictly to a site's page hierarchy and structure. The Navigation Menus feature in Liferay is powerful because it enables you to create navigation...
Published Date: Aug 15, 2024 6:33 PM
Building a Reusable and Dynamic Accordion With Fragments
Liferay Fragments are reusable, customizable web elements that serve as building blocks for a page. They consist of HTML, CSS, and JavaScript to provide structure, style, and functionality to your...
Published Date: Aug 19, 2024 4:54 PM
Using Zapier to Sync Object Data with Google Sheets
This recipe guides you through the steps required to use webhooks to trigger sync tasks between Liferay Objects and Google Sheets using Zapier.
Published Date: Nov 14, 2024 4:15 PM
Creating and Managing Experiences
Creating and Managing Experiences Liferay 7.4+, 7.3 FP1+, and 7.2 FP11+ You can customize your content page for different groups of users using Experiences. See Content Page Personalization to...
Published Date: May 9, 2024 6:57 PM
Personalizing Collections for Liferay 7.2 and Earlier Versions
Personalizing Collections for Liferay 7.2 and Earlier Versions Personalizing collections tailors content for specific user segments, enhancing user experiences and targeting content effectively. In...
Published Date: Jan 9, 2025 5:24 PM
Activating Workflow
Activating Workflow You can activate a workflow process for an asset type either across the DXP instance or only on a specific site. When a workflow process is activated across the instance for a...
Published Date: May 9, 2024 6:56 PM
Introduction to Workflow
Introduction to Workflow Liferay DXP ships with a workflow engine that allows users to review and approve content such as Blogs, Web Content, Wikis before they are published. The Workflow...
Published Date: May 9, 2024 6:56 PM
Using Workflows
Using Workflows Activating Workflow Reviewing Assets Using Workflow Metrics Workflow Metrics Reports
Published Date: May 9, 2024 6:56 PM
Working with Workflow Context
Working with Workflow Context Workflows in Liferay are used as approval processes. At each step of the process, the workflow has certain data that's available in a Map object referred to in your...
Published Date: May 9, 2024 6:56 PM
Using Workflow Metrics
Using Workflow Metrics Subscription This feature works only with Elasticsearch. Workflow Metrics gives insight into the time spent to complete certain workflow events. To use it, set up...
Published Date: May 9, 2024 6:56 PM
Personalization
Personalization Liferay DXP provides powerful tools out-of-the-box for understanding and delivering personalized experiences to users. For example, you can create user segments and map them to...
Published Date: Nov 22, 2024 10:52 PM
Experiences
Experiences Use experience personalization to tailor content pages and collections to different audiences. You can show customized layouts, content, and collection items based on user segments. ...
Published Date: Jun 24, 2025 6:19 PM
Enabling Automated Live Chat Systems
Enabling Automated Live Chat Systems Liferay 7.4+ Liferay now offers integration with several live support chat platforms. Enabling this integration adds a chat window to sites on your Liferay...
Published Date: Nov 22, 2024 10:52 PM
Personalizing Collections
Personalizing Collections Liferay Portal 7.3 GA6 / DXP 7.3+ By default, any user can see all the collection's content and is part of the Anyone personalized variation. However, you can create a...
Published Date: May 9, 2024 6:57 PM
Using the Accessibility Menu
Using the Accessibility Menu Liferay DXP 2024.Q2+/Portal GA120+ Most enhancements to accessibility in Liferay are propagated across the entire platform by default, so all your users can benefit...
Published Date: Jun 6, 2024 3:57 PM