An error occurred while processing the template.
The following has evaluated to null or missing: ==> hit.entity.agencyId [in template "29767924528592#240049#250919" at line 176, column 109] ---- 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: ${hit.entity.agencyId} [in template "29767924528592#240049#250919" at line 176, column 107] ----
1<#-- Assigning Values from Input -->
2<#assign modeValue = mode.getData()?string>
3<#assign displayOptionValue = displayOptions.getData()?string?trim>
4<#assign widthOptionsValue = widthOptions.getData()?string?trim>
5<#assign searchResult = {} />
6<#assign listTitle = .vars['reserved-article-title'].data>
7<#assign sanitizedTitle = listTitle?replace(" ", "-")?replace("[^a-zA-Z0-9\\-]", "")?lower_case>
8<#-- Get the appropriate result based on mode -->
9<#if modeValue == "query">
10 <#assign queryValue = searchQuery.getData()>
11 <#assign numberOfItemsValue = numberOfItems.getData()?number>
12 <#assign showViewAllLink = showViewAll.getData()=="true">
13<#-- Check if queryValue contains advanced search filters (e.g., c=), sourceId, or sort -->
14 <#if queryValue?contains("c=") || queryValue?contains("source=") || queryValue?contains("sort=")>
15 <#-- Decode the queryValue after potentially modifying it -->
16 <#assign decodedQueryValue = queryValue
17 ?replace("%3A", ":")
18 ?replace("%2C", ",")
19 ?replace("%5B", "[")
20 ?replace("%5D", "]")
21 ?replace("%5C\"", "\"")
22 ?replace('""', '"') />
23
24 <#-- Check if searchText is empty, if so, prepend "&" to queryValue -->
25 <#assign splitQuery = decodedQueryValue?split("&")>
26 <#assign searchText = ''>
27 <#assign sourceId = ''>
28 <#assign filterParams = []>
29 <#assign searchTextFound = false>
30 <#assign sortParameter = "" />
31 <#assign orderParameter = "" />
32
33 <#list splitQuery as param>
34 <#-- Check if the parameter is a filter (c=) -->
35 <#if param?starts_with("c=")>
36 <#assign filterParams += [param]>
37 <#elseif param?starts_with("source=")>
38 <#-- Extract the sourceId from the parameter -->
39 <#assign sourceId = param?replace("source=", "")>
40 <#elseif param?starts_with("sort=")>
41 <#-- Extract the sort value -->
42 <#assign sortParameter = param?replace("sort=", "")>
43 <#elseif param?starts_with("order=")>
44 <#-- Extract the order value -->
45 <#elseif !searchTextFound && !param?contains("=")>
46 <#-- If param does not contain "=", treat it as main search text -->
47 <#assign searchTextFound = true>
48 <#assign searchText = param>
49 </#if>
50 </#list>
51
52 <#-- If no search text was found, prepend "&" to queryValue -->
53 <#if !searchTextFound>
54 <#assign queryValue = "&" + queryValue>
55 </#if>
56
57 <#-- Combine sort and order into a single sortValue, handling cases where one might be empty -->
58 <#if sortParameter?has_content && orderParameter?has_content>
59 <#assign sortValue = "sort=" + sortParameter + "&order=" + orderParameter>
60 <#elseif sortParameter?has_content>
61 <#assign sortValue = "sort=" + sortParameter>
62 <#elseif orderParameter?has_content>
63 <#assign sortValue = "order=" + orderParameter>
64 <#else>
65 <#assign sortValue = "" />
66 </#if>
67 <#-- Join filter parameters into a single string for the 'c' parameter -->
68 <#assign filterParamsString = "&" + filterParams?join("&") >
69
70 <#attempt>
71 <#-- Use the extracted values in ArenaFederatedSearchService.getRecords -->
72 <#assign searchResult = ArenaFederatedSearchService.getRecords(
73 sourceId, <!-- String sourceId -->
74 0, <!-- Integer start -->
75 numberOfItemsValue, <!-- Integer size -->
76 0, <!-- Integer facetSize -->
77 searchText, <!-- String q (search text) -->
78 filterParamsString, <!-- List<String> c (filters) -->
79 '', <!-- List<String> fc (filter constraints) -->
80 '', <!-- List<String> facetField -->
81 '' <!-- List<String> sort -->
82 )!>
83 <#recover>
84 <p><@liferay.language key="dynamic.list.invalid.list.id"/></p>
85 </#attempt>
86 <#else>
87 <#-- Handle simple text query without additional filters or sorting -->
88 <#attempt>
89 <#assign searchResult = ArenaFederatedSearchService.getRecords(
90 null, <!-- String sourceId -->
91 0, <!-- Integer start -->
92 numberOfItemsValue, <!-- Integer size -->
93 0, <!-- Integer facetSize -->
94 queryValue, <!-- String q (simple query) -->
95 '', <!-- List<String> c (no filters) -->
96 '', <!-- List<String> fc (filter constraints) -->
97 '', <!-- List<String> facetField -->
98 '' <!-- List<String> sort -->
99 )!>
100 <#recover>
101 <p><@liferay.language key="dynamic.list.invalid.list.id"/></p>
102 </#attempt>
103 </#if>
104<#elseif modeValue == "toplist">
105 <#assign numberOfItemsValue = numberOfItems.getData()?number>
106 <#assign queryValue = listFromBackend.getData()>
107 <#attempt>
108 <#assign searchResult = ArenaFederatedSearchService.getRecordsByLMSSearchIds(queryValue, "NAMED_LIST", 0, numberOfItemsValue)!>
109 <#recover>
110 <p><@liferay.language key="dynamic.list.invalid.list.id"/></p>
111 </#attempt>
112<#elseif modeValue == "ids">
113 <#if recordId.getSiblings()?has_content>
114 <#assign queryValue = "">
115 <#list recordId.getSiblings() as cur_recordId>
116 <#if (cur_recordId.getData())??>
117 <#assign queryValue = queryValue + cur_recordId.getData() />
118 <#if cur_recordId_has_next>
119 <#assign queryValue = queryValue + ", " />
120 </#if>
121 </#if>
122 </#list>
123 </#if>
124 <#attempt>
125 <#assign searchResult = ArenaFederatedSearchService.getRecordsByAlmaRecordIds(queryValue, 0, 99)>
126 <#recover>
127 <p><@liferay.language key="dynamic.list.invalid.list.id"/></p>
128 </#attempt>
129</#if>
130
131<#-- Parse JSON response if content is available -->
132<#if searchResult?has_content && searchResult.list?has_content>
133 <#assign parsedJson = searchResult.list[0].json?eval />
134 <#assign sourceId = parsedJson.sourceId>
135 <#assign portalSiteID = ArenaCentralSettingsService.getCentralSettings(groupId).getPortalSiteId()>
136 <#if displayOptionValue == "masonry">
137 <#assign displayVariable = displayOptionValue + " masonry-grid">
138 <#else>
139 <#assign displayVariable = displayOptionValue + " flickity-carousel">
140 </#if>
141 <div class="arena-dynamic-list-container <#if widthOptionsValue == "full">break-out</#if>">
142 <h2 class="d-block text-center my-4">
143 ${listTitle}
144 </h2>
145 <div>
146 <a class="quick-access-nav-above" id="arena-dynamic-list-above-${sanitizedTitle}"
147 href="#arena-dynamic-list-below-${sanitizedTitle}"
148 tabindex="0"><span class="icon-angle-down" aria-hidden="true"></span>
149 <@liferay.language_format arguments="${listTitle}" key="dynamic.list.skip.past.the.list.below" />
150 </a>
151 </div>
152 <!-- start of list -->
153 <#if displayOptionValue == "carousel">
154 <div class="arena-dynamic-list arena-dynamic-list-display-${displayVariable}" tabindex="-1">
155 <#else>
156 <ul class="arena-dynamic-list arena-dynamic-list-display-${displayVariable}" tabindex="-1">
157 </#if>
158 <#if parsedJson.hits?has_content>
159 <#list parsedJson.hits as hit>
160 <li class="arena-dynamic-list-item">
161 <div class="arena-record">
162 <a class="arena-record-cover"
163 href="/web/arena/search#/entity/${sourceId}/${hit.entity.id}">
164 <#if hit.entity.media?? && (hit.entity.media?size > 0)>
165 <#assign foundImage = false>
166 <#list hit.entity.media as media>
167 <#if media.mediaType == "image" && !foundImage>
168 <img src="${media.url}" alt="" loading="lazy"/>
169 <#assign foundImage = true>
170 </#if>
171 </#list>
172 <#if !foundImage>
173 <img src="/local-rest/api/v1/portalsites/${portalSiteID}/agencies/${hit.entity.agencyId}/records/${hit.entity.almaId}/cover" alt="" loading="lazy"/>
174 </#if>
175 <#else>
176 <img src="/local-rest/api/v1/portalsites/${portalSiteID}/agencies/${hit.entity.agencyId}/records/${hit.entity.almaId}/cover" alt="" loading="lazy"/>
177 </#if>
178 <div class="arena-record-details">
179 <div class="arena-dynamic-list-title">${hit.entity.name}</div>
180 <div class="arena-dynamic-list-author">
181 <#if hit.entity.creator?? && (hit.entity.creator?size > 0)>
182 <#list hit.entity.creator as creatorType, creators>
183 ${creators[0].value}
184 <#break>
185 </#list>
186 <#elseif hit.entity.contributor?? && (hit.entity.contributor?size > 0)>
187 <#list hit.entity.contributor as contributorType, contributors>
188 ${contributors[0].value}
189 <#break>
190 </#list>
191 </#if>
192 </div>
193 </div>
194 </a>
195 </div>
196 </li>
197 </#list>
198 <#else>
199 <p><@liferay.language key="dynamic.list.no.hits"/></p>
200 </#if>
201 <li class="masonry-grid-sizer"></li>
202 <#if displayOptionValue == "carousel">
203 </div> <!-- Closing div for carousel -->
204 <#else>
205 </ul> <!-- Closing ul for non-carousel -->
206 </#if>
207 <!-- end of list -->
208
209 <#if modeValue == "query" && showViewAllLink>
210 <div class="arena-dynamic-list-view-all-container text-right text-end">
211 <#assign currentUrl = themeDisplay.getURLCurrent()>
212 <#if currentUrl?contains("web/arena")>
213 <a href='/web/arena/search#/?q=${queryValue}'><@liferay.language key="view-all" /></a>
214 <#else>
215 <a href='/web/quria/search/?q=${queryValue}'><@liferay.language key="view-all" /></a>
216 </#if>
217 </div>
218 </#if>
219 <div>
220 <a class="quick-access-nav-below" id="arena-dynamic-list-below-${sanitizedTitle}"
221 href="#arena-dynamic-list-above-${sanitizedTitle}"
222 tabindex="0"><span class="icon-angle-up" aria-hidden="true"></span>
223 <@liferay.language_format arguments="${listTitle}" key="dynamic.list.skip.past.the.list.above"/>
224 </a>
225 </div>
226 </div>
227
228<#else>
229 <p><@liferay.language key="dynamic.list.no.hits"/></p>
230</#if>
Anu list
Dogs
Books about vikings
Bøker om økonomi - for deg som har begynt det nye året med å bli flinkere økonomisk
Astrid Lindgren
Astrid Lindgren
Mika's Lindgren
Sorry, no results were found
Dynamic contant
Sorry, no results were found
Sorry, no results were found