Capability

Sites

Liferay sites are customizable spaces for building personalized digital experiences. Each site includes applications for creating content, designing pages, and more. With these features, you can bring your custom solutions to life, whether intranets, public sites, customer portals, or e-commerce storefronts. In fact, you can leverage Liferay's multi-site capabilities to create multiple such sites in the same Liferay instance.

Category
Category
An error occurred while processing the template.
When calling macro "displayResourceTypeTags", required parameter "taxonomyCategoryBriefs" (parameter #1) was specified, but had null/missing value.

----
Tip: If the parameter value expression on the caller side is known to be legally null/missing, you may want to specify a default value for it with the "!" operator, like paramValue!defaultValue.
----

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #macro displayResourceTypeTags taxono...  [in template "8911408109993434201#23484949#23489037" in macro "displayResourceTypeTags" at line 1, column 1]
	- Reached through: @displayResourceTypeTags taxonomyCate...  [in template "8911408109993434201#23484949#23489037" at line 58, column 81]
----
1<#macro displayResourceTypeTags 
2	taxonomyCategoryBriefs 
3
4	<#if taxonomyCategoryBriefs?has_content> 
5		<#list taxonomyCategoryBriefs as taxonomyCategoryBrief> 
6			<#assign taxonomyVocabulary = taxonomyCategoryBrief.embeddedTaxonomyCategory.parentTaxonomyVocabulary.externalReferenceCode!"N/A" /> 
7 
8			<#if stringUtil.equals(taxonomyVocabulary, "RESOURCE_TYPE")> 
9				<span class="font-weight-normal label label-inverse-light label-secondary m-0 px-2 text-paragraph-sm"> 
10					${taxonomyCategoryBrief.taxonomyCategoryName} 
11				</span> 
12			</#if> 
13		</#list> 
14	</#if> 
15</#macro> 
16 
17<#function getValue contentString end start> 
18	<#assign startIndex = contentString?index_of(start) /> 
19 
20	<#if startIndex == -1> 
21		<#return "" /> 
22	</#if> 
23 
24	<#assign 
25		substring = contentString?substring(startIndex + start?length) 
26		endIndex = substring?index_of(end) 
27	/> 
28 
29	<#if endIndex == -1> 
30		<#return substring /> 
31	</#if> 
32 
33	<#return substring?substring(0, endIndex)?trim /> 
34</#function> 
35 
36<div class="search-results" id="searchResults"> 
37	<#if entries?has_content> 
38		<#list entries as searchEntry> 
39			<#assign 
40				className = searchEntry.getClassName()!"" 
41				classPK = searchEntry.getClassPK()!"" 
42				searchEntryContent = searchEntry.getContent()!languageUtil.get(locale, "no-content-preview", "No content preview") 
43				searchEntryTitle = searchEntry.getTitle()!"" 
44			/> 
45 
46			<#if searchEntryTitle?has_content> 
47				<div class="align-items-stretch pb-4 search-results-entry"> 
48					<a class="font-weight-bold search-results-entry-title text-decoration-none unstyled" href="${searchEntry.getViewURL()}&highlight=${htmlUtil.escape(searchResultsPortletDisplayContext.getKeywords()?url('ISO-8859-1'))}"> 
49						<div class="d-flex justify-content-between search-results-entry-header"> 
50							${searchEntryTitle} 
51							<div class="search-results-entry-tags"> 
52								<#if className?contains("com.liferay.journal.model.JournalArticle")> 
53									<#assign 
54										content = searchEntryContent 
55										structuredContent = restClient.get("/headless-delivery/v1.0/structured-contents/" + classPK + "?fields=taxonomyCategoryBriefs&nestedFields=embeddedTaxonomyCategory") /> 
56 
57									<#if structuredContent??> 
58										<@displayResourceTypeTags taxonomyCategoryBriefs = structuredContent.taxonomyCategoryBriefs /> 
59									</#if> 
60								<#elseif className?contains("com.liferay.object.model.ObjectDefinition")> 
61									<#assign 
62										content = getValue(entry.getContent(), " end:", "content:") 
63										knowledgeArticle = restClient.get("/c/p2s3knowledgearticles/" + classPK + "?nestedFields=embeddedTaxonomyCategory") /> 
64 
65									<#if knowledgeArticle??> 
66										<#if knowledgeArticle.legacy?? && knowledgeArticle.legacy == true> 
67											<span class="font-weight-normal label label-secondary label-inverse-light m-0 px-2 text-paragraph-sm"> 
68												<@liferay_ui["message"] key="legacy" /> 
69											</span> 
70										</#if> 
71 
72										<@displayResourceTypeTags taxonomyCategoryBriefs = knowledgeArticle.taxonomyCategoryBriefs /> 
73									</#if> 
74								</#if> 
75							</div> 
76						</div> 
77 
78						<div class="description search-results-entry-content"> 
79							<#if className?contains("com.liferay.journal.model.JournalArticle")> 
80								${searchEntryContent} 
81							<#else> 
82								${getValue(searchEntryContent, " end:", "content:")} 
83							</#if> 
84						</div> 
85					</a> 
86				</div> 
87			</#if> 
88		</#list> 
89	<#else> 
90		<p class="search-results-empty"> 
91			${languageUtil.format(locale, "no-results-were-found-that-matched-the-keywords-x", htmlUtil.escape(searchResultsPortletDisplayContext.getKeywords()), false)} 
92		</p> 
93	</#if> 
94</div> 
95 
96<style> 
97	.label-inverse-light { 
98		background-color: var(--color-state-neutral-lighten-2); 
99		border-color: var(--color-state-neutral-lighten-2); 
100		color: var(--color-neutral-8); 
101
102 
103	.search-results-entry-tags { 
104		display: flex; 
105		gap: 0.5rem; 
106		height: max-content; 
107
108</style>