Ricerca
Si è verificato un errore nell'elaborarazione del modello.
The following has evaluated to null or missing: ==> record.metadata.cige [in template "20097#20123#55912" at line 217, column 157] ---- 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: #if (record.metadata.publicationDate?... [in template "20097#20123#55912" at line 215, column 113] ----
1<#-- instance id -->
2<#assign instanceId = themeDisplay.getPortletDisplay().getId()?keep_after("INSTANCE_") />
3
4<#-- Ricavo servizi utili in seguito -->
5<#-- Servizio per i layout di pagina -->
6<#assign layoutLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.LayoutLocalService") />
7<#-- Servizio utile per ricavare i documenti della DM -->
8<#assign dlFileEntryLocalService = serviceLocator.findService('com.liferay.document.library.kernel.service.DLFileEntryLocalService') />
9
10<#-- Etichette -->
11<#assign label_vai_dettaglio = languageUtil.get(locale, "label_vai_dettaglio") />
12<#assign label_ordinamento = languageUtil.get(locale, "label_ordinamento") />
13<#assign label_numero_risultati = languageUtil.get(locale, "label_numero_risultati") />
14<#assign label_ricerca_testo = languageUtil.get(locale, "label_ricerca_testo") />
15<#assign label_placeholder_ricerca_testo = languageUtil.get(locale, "label_placeholder_ricerca_testo") />
16<#assign label_filtra = languageUtil.get(locale, "label_filtra") />
17<#assign label_tipologia = languageUtil.get(locale, "label_tipologia") />
18<#assign label_categorie = languageUtil.get(locale, "label_categorie") />
19<#assign label_categorie_tutte = languageUtil.get(locale, "label_categorie_tutte") />
20<#assign label_dal = languageUtil.get(locale, "label_dal") />
21<#assign label_al = languageUtil.get(locale, "label_al") />
22<#assign label_button_cerca = languageUtil.get(locale, "label_button_cerca") />
23
24<#assign label_affidamenti_data_pubblicazione = languageUtil.get(locale, "label_affidamenti_data_pubblicazione") />
25<#assign label_affidamenti_soggetto_affidatario = languageUtil.get(locale, "label_affidamenti_soggetto_affidatario") />
26<#assign label_affidamenti_cig = languageUtil.get(locale, "label_affidamenti_cig") />
27<#assign label_affidamenti_data_affidamento = languageUtil.get(locale, "label_affidamenti_data_affidamento") />
28<#assign label_affidamenti_importo_affidato = languageUtil.get(locale, "label_affidamenti_importo_affidato") />
29
30<#assign label_avvisi_selezione_data_pubblicazione = languageUtil.get(locale, "label_avvisi_selezione_data_pubblicazione") />
31<#assign label_avvisi_selezione_data_scadenza = languageUtil.get(locale, "label_avvisi_selezione_data_scadenza") />
32
33<#assign label_bandi_data_pubblicazione = languageUtil.get(locale, "label_bandi_data_pubblicazione") />
34<#assign label_bandi_data_scadenza = languageUtil.get(locale, "label_bandi_data_scadenza") />
35<#assign label_bandi_importo_base = languageUtil.get(locale, "label_bandi_importo_base") />
36
37<#-- Inclusione widget template con macros e relativi servizi -->
38<#include "${templatesPath}/RICERCA_COMMON_MACROS" />
39
40<#-- html -->
41<div class="col-12">
42 <div class="search-template search-template-globale">
43 <div class="container">
44 <div class="row">
45 <div class="col-12">
46
47 <#-- titolo principale -->
48 <h1 class="main-title mb-4">${themeDisplay.getLayout().getName(locale)}</h1>
49
50 <div class="row">
51 <#if entries?has_content>
52 <#list entries as curEntry>
53 <#-- colonna elenco risultati -->
54 <div class="order-last order-sm-last order-md-last order-lg-first col-lg-9">
55
56 <#-- barra ordinamento -->
57 <div class="row">
58 <div class="col-12">
59 <div class="d-flex justify-content-end">
60 <#-- ordinamento: ricordarsi del campo hidden che deve stare nel form -->
61 <div class="form-group">
62 <label for="orderBySelect" class="sr-only">${label_ordinamento}</label>
63 <select class="form-control form-control-orderBy" id="orderBySelect" name="orderBySelect" onchange="changeOrder(this);">
64 <#list enabledSortFieldsAsKeyValue?keys as prop>
65 <#assign isSelected = "" />
66 <#if searchInput.orderBy?has_content>
67 <#if searchInput.orderBy?string == prop>
68 <#assign isSelected = "selected" />
69 </#if>
70 </#if>
71 <option value="${prop}" ${isSelected}>${enabledSortFieldsAsKeyValue[prop]}</option>
72 </#list>
73 </select>
74 </div>
75 </div>
76 </div>
77 </div>
78
79 <#-- numero risultati -->
80 <div class="row">
81 <div class="col-12">
82 <p class="text-right">${label_numero_risultati}: <strong>${curEntry.paging.totalRecordsCount}</strong></p>
83 </div>
84 </div>
85
86 <#-- elenco risultati -->
87 <#if curEntry.records?has_content>
88 <div class="row">
89 <div class="col-12">
90 <#list curEntry.records as record>
91 <#if record.metadata?has_content>
92 <#-- assegno alla variabile il titolo di liferay o di struttura, ripulito dai caratteri accentati, da usare come alt o title -->
93 <#assign titoloScheda = "" />
94 <#if record.title?has_content>
95 <#assign titoloScheda = htmlUtil.escapeAttribute(record.title) />
96 </#if>
97 <#if record.metadata.title?has_content && record.metadata.title.value?has_content>
98 <#assign titoloScheda = htmlUtil.escapeAttribute(record.metadata.title.value) />
99 </#if>
100 <#-- uso la card, ha margin botto di default, per cui imposto i vari padding in modo da non avere troppo ingombro -->
101 <div class="card shadow-none border-0">
102 <#assign existImage = false />
103 <#-- immagine -->
104 <#-- richiamo l'immagine: fa parte di un fieldset ripetibile, e potrebbe essere una sequenza o una semplice stringa -->
105 <#if record.metadata.image?has_content && record.metadata.image.value?has_content>
106 <#-- caso in cui ci sono più immagini -->
107 <#if record.metadata.image.value?is_sequence>
108 <#assign numImg = 0 />
109 <#list record.metadata.image.value as curImage>
110 <#if curImage?? && curImage?has_content>
111 <#attempt>
112 <#assign existImage = true />
113 <#assign curImageJson = jsonFactoryUtil.createJSONObject(curImage) />
114 <#if curImageJson?? && curImageJson?has_content && curImageJson.uuid?? && curImageJson.groupId??>
115 <#assign numImg = numImg + 1 />
116 <#assign curImageDLFileEntry = dlFileEntryLocalService.getFileEntryByUuidAndGroupId(curImageJson.uuid,curImageJson.groupId?number) />
117 <#assign curImageUrl = "/documents/"+groupId+"/"+curImageDLFileEntry.getFolderId()+"/"+curImageDLFileEntry.getFileName()+"/"+curImageJson.uuid />
118
119 <img src="${curImageUrl}" class="image-fit-object h250" alt="${titoloScheda}">
120 </#if>
121 <#recover>
122 <#-- in caso di problemi sull'immagine, non visualizzo nulla -->
123 </#attempt>
124 </#if>
125 <#if numImg == 1>
126 <#break>
127 </#if>
128 </#list>
129 <#else>
130 <#-- caso in cui cè solo un'immagine -->
131 <#attempt>
132 <#assign imageJson = jsonFactoryUtil.createJSONObject(record.metadata.image.value) />
133 <#if imageJson?? && imageJson?has_content && imageJson.uuid?? && imageJson.groupId??>
134 <#assign imageDLFileEntry = dlFileEntryLocalService.getFileEntryByUuidAndGroupId(imageJson.uuid,imageJson.groupId?number) />
135 <#assign imageUrl = "/documents/"+groupId+"/"+imageDLFileEntry.getFolderId()+"/"+imageDLFileEntry.getFileName()+"/"+imageJson.uuid />
136 <#assign existImage = true />
137
138 <img src="${imageUrl}" class="image-fit-object h250" alt="${titoloScheda}">
139 </#if>
140 <#recover>
141 <#-- in caso di problemi sull'immagine, non visualizzo nulla -->
142 </#attempt>
143 </#if>
144 </#if>
145
146 <div class="card-body bg-white <#if existImage>px-0 pb-0<#else>p-0</#if>">
147
148 <#-- nome struttura + date: data di pubblicazione articolo -->
149 <div class="mb-2">
150 <#-- nome struttura -->
151 <strong class="mr-2">${record.structureName}</strong>
152
153 <#-- date:
154 News: data pubblicazione articolo
155 Avviso: data pubblicazione struttura
156 -->
157 <#if record.structureName == "News">
158 <#-- data di pubblicazione: metadato dell'articolo -->
159 <#if record.publishDate?has_content>
160 <#assign journalArticlePublishDate = dateUtil.getDate(record.publishDate, "dd MMM yyyy", locale) />
161 <span class="mr-2">-</span><span>${journalArticlePublishDate}</span>
162 </#if>
163 <#elseif record.structureName == "Avviso">
164 <#-- data di pubblicazione: struttura -->
165 <#if record.metadata.publicationDate?has_content && record.metadata.publicationDate.value?has_content>
166 <#assign publicationDate_DateObj = dateUtil.parseDate("yyyy-MM-dd", record.metadata.publicationDate.value, locale) />
167 <#assign publicationDate_str = dateUtil.getDate(publicationDate_DateObj, "dd MMM yyyy", locale) />
168
169 <#if validator.isNotNull(publicationDate_str) && publicationDate_str != "">
170 <span class="mr-2">-</span><span>${publicationDate_str}</span>
171 </#if>
172 </#if>
173 </#if>
174 </div>
175
176 <#-- titolo di struttura -->
177 <#if record.metadata.title?has_content && record.metadata.title.value?has_content>
178 <#if record.detailUrl?has_content>
179 <h1 class="h3 card-title check-highlight mb-2">
180 <a href="${record.detailUrl}" title="${label_vai_dettaglio} ${htmlUtil.escapeAttribute(record.metadata.title.value)}">${record.metadata.title.value}</a>
181 </h1>
182 <#else>
183 <h1 class="h3 card-title check-highlight mb-2">
184 ${record.metadata.title.value?trim}
185 </h1>
186 </#if>
187 </#if>
188
189 <#-- in alcuni casi cè abstract ed in altri la descrizione, per cui cerco il primo altrimenti la seconda -->
190 <#-- abstract -->
191 <#if record.metadata.abstract?has_content && record.metadata.abstract.value?has_content>
192 <div class="card-text check-highlight mb-2">${record.metadata.abstract.value}</div>
193 <#else>
194 <#-- description -->
195 <#if record.metadata.description?has_content && record.metadata.description.value?has_content>
196 <#assign description_ = htmlUtil.escape(record.metadata.description.value) />
197 <#assign descriptionlength = description_?length />
198 <#if descriptionlength gt 300>
199 <#assign description_ = description_?substring(0, 300) />
200 <div class="card-text check-highlight mb-2">${description_}...</div>
201 <#else>
202 <div class="card-text check-highlight mb-2">${record.metadata.description.value}</div>
203 </#if>
204 </#if>
205 </#if>
206
207 <#-- altre date e dati struttura:
208 Affidamento
209 Avviso selezione
210 Bando
211 -->
212 <#-- affidamento -->
213 <#if record.structureName == "Affidamento">
214 <#-- data di pubblicazione, soggetto affidatario, cig, data di affidamento e importo affidato -->
215 <#if (record.metadata.publicationDate?has_content && record.metadata.publicationDate.value?has_content) ||
216 (record.metadata.trustee?has_content && record.metadata.trustee.value?has_content) ||
217 (record.metadata.cig?has_content && record.metadata.cige.value?has_content) ||
218 (record.metadata.entrustingDate?has_content && record.metadata.entrustingDate.value?has_content) ||
219 (record.metadata.entrustedAmount?has_content && record.metadata.entrustedAmounte.value?has_content)>
220 <div class="bg-light rounded rounded-lg px-4 py-3 mb-2">
221 <#-- data di pubblicazione -->
222 <#if record.metadata.publicationDate?has_content && record.metadata.publicationDate.value?has_content>
223 <#assign publicationDate_DateObj = dateUtil.parseDate("yyyy-MM-dd", record.metadata.publicationDate.value, locale) />
224 <#assign publicationDate_str = dateUtil.getDate(publicationDate_DateObj, "dd MMMM yyyy", locale) />
225
226 <#if validator.isNotNull(publicationDate_str) && publicationDate_str != "">
227 <p class="my-2"><span class="text-uppercase font-sans-serif-barmeno-medium">${label_affidamenti_data_pubblicazione}</span>: <strong>${publicationDate_str}</strong></p>
228 </#if>
229 </#if>
230 <#-- soggetto affidatario -->
231 <#if record.metadata.trustee?has_content && record.metadata.trustee.value?has_content>
232 <p class="my-2"><span class="text-uppercase font-sans-serif-barmeno-medium">${label_affidamenti_soggetto_affidatario}</span>: <strong>${record.metadata.trustee.value}</strong></p>
233 </#if>
234 <#-- cig -->
235 <#if record.metadata.cig?has_content && record.metadata.cig.value?has_content>
236 <p class="my-2"><span class="text-uppercase font-sans-serif-barmeno-medium">${label_affidamenti_cig}</span>: <strong>${record.metadata.cig.value}</strong></p>
237 </#if>
238 <#-- data affidamento -->
239 <#if record.metadata.entrustingDate?has_content && record.metadata.entrustingDate.value?has_content>
240 <#assign entrustingDate_DateObj = dateUtil.parseDate("yyyy-MM-dd", record.metadata.entrustingDate.value, locale) />
241 <#assign entrustingDate_str = dateUtil.getDate(entrustingDate_DateObj, "dd MMMM yyyy", locale) />
242
243 <#if validator.isNotNull(entrustingDate_str) && entrustingDate_str != "">
244 <p class="my-2"><span class="text-uppercase font-sans-serif-barmeno-medium">${label_affidamenti_data_affidamento}</span>: <strong>${entrustingDate_str}</strong></p>
245 </#if>
246 </#if>
247 <#-- importo affidato -->
248 <#if record.metadata.entrustedAmount?has_content && record.metadata.entrustedAmount.value?has_content>
249 <p class="my-2"><span class="text-uppercase font-sans-serif-barmeno-medium">${label_affidamenti_importo_affidato}</span>: <strong>${record.metadata.entrustedAmount.value}</strong></p>
250 </#if>
251 </div>
252 </#if>
253 </#if>
254
255 <#-- avviso selezione -->
256 <#if record.structureName == "Avviso selezione">
257 <#-- data di pubblicazione, data di scadenza e importo base -->
258 <#if (record.metadata.publicationDate?has_content && record.metadata.publicationDate.value?has_content) ||
259 (record.metadata.expirationDate?has_content && record.metadata.expirationDate.value?has_content)>
260 <div class="bg-light rounded rounded-lg px-4 py-3 mb-2">
261 <#-- data di pubblicazione -->
262 <#if record.metadata.publicationDate?has_content && record.metadata.publicationDate.value?has_content>
263 <#assign publicationDate_DateObj = dateUtil.parseDate("yyyy-MM-dd", record.metadata.publicationDate.value, locale) />
264 <#assign publicationDate_str = dateUtil.getDate(publicationDate_DateObj, "dd MMMM yyyy", locale) />
265
266 <#if validator.isNotNull(publicationDate_str) && publicationDate_str != "">
267 <p class="my-2"><span class="text-uppercase font-sans-serif-barmeno-medium">${label_avvisi_selezione_data_pubblicazione}</span>: <strong>${publicationDate_str}</strong></p>
268 </#if>
269 </#if>
270 <#-- data di scadenza -->
271 <#if record.metadata.expirationDate?has_content && record.metadata.expirationDate.value?has_content>
272 <#assign expirationDate_DateObj = dateUtil.parseDate("yyyy-MM-dd", record.metadata.expirationDate.value, locale) />
273 <#assign expirationDate_str = dateUtil.getDate(expirationDate_DateObj, "dd MMMM yyyy", locale) />
274
275 <#if validator.isNotNull(expirationDate_str) && expirationDate_str != "">
276 <p class="my-2"><span class="text-uppercase font-sans-serif-barmeno-medium">${label_avvisi_selezione_data_scadenza}</span>: <strong>${expirationDate_str}</strong></p>
277 </#if>
278 </#if>
279 </div>
280 </#if>
281 </#if>
282
283 <#-- bando -->
284 <#if record.structureName == "Bando">
285 <#-- data di pubblicazione, data di scadenza e importo base -->
286 <#if (record.metadata.publicationDate?has_content && record.metadata.publicationDate.value?has_content) ||
287 (record.metadata.expirationDate?has_content && record.metadata.expirationDate.value?has_content) ||
288 (record.metadata.baseAmount?has_content && record.metadata.baseAmount.value?has_content)>
289 <div class="bg-light rounded rounded-lg px-4 py-3 mb-2">
290 <#-- data di pubblicazione -->
291 <#if record.metadata.publicationDate?has_content && record.metadata.publicationDate.value?has_content>
292 <#assign publicationDate_DateObj = dateUtil.parseDate("yyyy-MM-dd", record.metadata.publicationDate.value, locale) />
293 <#assign publicationDate_str = dateUtil.getDate(publicationDate_DateObj, "dd MMMM yyyy", locale) />
294
295 <#if validator.isNotNull(publicationDate_str) && publicationDate_str != "">
296 <p class="my-2"><span class="text-uppercase font-sans-serif-barmeno-medium">${label_bandi_data_pubblicazione}</span>: <strong>${publicationDate_str}</strong></p>
297 </#if>
298 </#if>
299 <#-- data di scadenza -->
300 <#if record.metadata.expirationDate?has_content && record.metadata.expirationDate.value?has_content>
301 <#assign expirationDate_DateObj = dateUtil.parseDate("yyyy-MM-dd", record.metadata.expirationDate.value, locale) />
302 <#assign expirationDate_str = dateUtil.getDate(expirationDate_DateObj, "dd MMMM yyyy", locale) />
303
304 <#if validator.isNotNull(expirationDate_str) && expirationDate_str != "">
305 <p class="my-2"><span class="text-uppercase font-sans-serif-barmeno-medium">${label_bandi_data_scadenza}</span>: <strong>${expirationDate_str}</strong></p>
306 </#if>
307 </#if>
308 <#-- importo base -->
309 <#if record.metadata.baseAmount?has_content && record.metadata.baseAmount.value?has_content>
310 <p class="my-2"><span class="text-uppercase font-sans-serif-barmeno-medium">${label_bandi_importo_base}</span>: <strong>${record.metadata.baseAmount.value}</strong></p>
311 </#if>
312 </div>
313 </#if>
314 </#if>
315
316 <#-- metodo tramite record (ricerca) -->
317 <#-- recupero l'elenco delle categorie dall'oggetto record anzichè passando dall'articolo -->
318 <#if record.categories?? && (record.categories?size > 0)>
319 <#list record.categories as key, value>
320 <#if (key?? && key != 0) && (value?? && value != "")>
321 <div class="chip chip-simple chip-primary chip-no-link">
322 <span class="chip-label">${value}</span>
323 </div>
324 </#if>
325 </#list>
326 </#if>
327
328 <#-- categorie: metodo tramite api - COMMENTATO -->
329 <#--
330 <#assign categorie = []>
331 <#assign categorie = getListCategoryByArticlePrimKey(record.entryClassPk) />
332 <#if categorie?? && (categorie?size > 0)>
333 <#list categorie as cur_cat>
334 <#if validator.isNotNull(cur_cat) && cur_cat != "">
335 <div class="chip chip-simple chip-primary chip-no-link">
336 <span class="chip-label">${cur_cat.getTitle(locale)}</span>
337 </div>
338 </#if>
339 </#list>
340 </#if>
341 -->
342 </div>
343 </div>
344 <#-- hr -->
345 <hr class="blue-hr bg-light my-4">
346 </#if>
347 </#list>
348 </div>
349 </div>
350 </#if>
351
352 <#-- paginazione mediante taglib-->
353 <div class="row">
354 <div class="col-12 text-center">
355 <@ricerca_components["ricerca-pagination"]
356 currentPage=curEntry.paging.page?number
357 totalPages=curEntry.paging.totalPagesCount?number
358 paginationUrl="${portletURL}"></@>
359 </div>
360 </div>
361 </div>
362
363 <#-- colonna form ricerca: dopo breakpoint lg viene visualizzata come prima colonna -->
364 <div class="order-first order-sm-first corder-md-first order-lg-last col-lg-3">
365
366 <#-- form ricerca -->
367 <@ricerca_components["ricerca-form"] searchUrl="${searchUrl}" method="get" id="search-globale-form">
368
369 <#-- campo hidden per ordinamento -->
370 <input type="hidden" value="${searchInput.orderBy}" name="orderBy" id="orderByInputHidden">
371
372 <#-- campo di ricerca testuale -->
373 <div class="form-group mb-4">
374 <label for="input-ricerca-q">${label_ricerca_testo}</label>
375 <@ricerca_components["ricerca-input-q"] cssClass="form-control"
376 value="${searchInput.q}"
377 placeholder="${label_placeholder_ricerca_testo}">
378 </@>
379 </div>
380
381 <#-- inizio collapse che racchiude tutti i filtri: categorie e date -->
382 <#if structuresAsKeyValue?has_content || ((ricercaPortletConfig.configSearchByCategories == true) && (categoriesAsKeyValue?size > 0)) || ricercaPortletConfig.configShowSearchByDates == true>
383 <div class="search-filters-wrapper mb-4">
384 <h2 class="h3"><a class="simple-collapse-button" data-toggle="collapse" href="#searchFilters" role="button" aria-expanded="true" aria-controls="searchFilters">${label_filtra}</a></h2>
385 <div class="collapse show" id="searchFilters">
386
387 <#-- elenco strutture -->
388 <#if structuresAsKeyValue?has_content>
389 <div class="form-group">
390 <h3 class="h4">${label_tipologia}</h3>
391 <ul class="list-unstyled ml-2">
392 <#list structuresAsKeyValue?keys as prop>
393 <#assign isChecked = "" />
394 <#if searchInput.ddmStructureKeys?has_content>
395 <#list searchInput.ddmStructureKeys as structureKey>
396 <#if structureKey == prop>
397 <#assign isChecked = "checked" />
398 </#if>
399 </#list>
400 </#if>
401 <li>
402 <div class="form-check search-form-check">
403 <input class="form-check-input" type="checkbox" name="searchStructureKeys" id="structures_${prop?index}" value="${prop}" ${isChecked}>
404 <label class="form-check-label" for="structures_${prop?index}">
405 ${structuresAsKeyValue[prop]}
406 </label>
407 </div>
408 </li>
409 </#list>
410 </ul>
411 </div>
412 </#if>
413
414 <#-- ricerca per categorie -->
415 <#if (ricercaPortletConfig.configSearchByCategories == true) && (categoriesAsKeyValue?size > 0)>
416 <div class="form-group">
417 <#if ricercaPortletConfig.configSelectMultipleCategories == true>
418 <#-- caso di elenco di categorie e sottocategorie indentate con nome vocabolario - sfrutta macro presente nel template RICERCA_COMMON_MACROS -->
419 <#if ricercaPortletConfig.configAllowVocabulariesLabelFilter == true>
420 <h3 class="h4">${label_categorie}</h3>
421 <ul class="list-unstyled ml-2">
422 <#list hierarchicalVocabulariesOptions as voKey, voValue>
423 <li>
424 <h4 class="h5">${voValue.value.label}</h4>
425 <@getAllCategories voValue.children />
426 </li>
427 </#list>
428 </ul>
429 <#else>
430 <#-- caso di elenco categorie e sottocategorie indentate ma senza nome vocabolario - sfrutta macro presente nel template RICERCA_COMMON_MACROS -->
431 <#if hierarchicalCategoriesOptions?? && hierarchicalCategoriesOptions?has_content>
432 <h3 class="h4">${label_categorie}</h3>
433 <@getAllCategories hierarchicalCategoriesOptions />
434 </#if>
435 </#if>
436 <#else>
437 <#-- visualizzo una select singola -->
438 <label for="select-ricerca-categorie">${label_categorie}</label>
439 <select name="categoryIds" class="form-control" id="select-ricerca-categorie">
440 <#list categoriesAsKeyValue?keys as prop>
441 <#assign isSelected = "" />
442 <#if searchInput.categoryIds?has_content>
443 <#list searchInput.categoryIds as categoryId>
444 <#if categoryId?string == prop>
445 <#assign isSelected = "selected" />
446 </#if>
447 </#list>
448 </#if>
449 <option value="${prop}" ${isSelected}>${categoriesAsKeyValue[prop]}</option>
450 </#list>
451 </select>
452 </#if>
453 </div>
454 </#if>
455
456 <#-- ricerca per date -->
457 <#if ricercaPortletConfig.configShowSearchByDates == true>
458 <div class="form-group">
459 <label for="input-dateFrom">${label_dal}</label>
460 <div class="input-group">
461 <input type="text" class="form-control" name="dateFrom"
462 id="input-dateFrom" autocomplete="off"
463 placeholder="gg/mm/aaaa"
464 <#if searchInput.dateFrom?has_content>
465 value="${dateUtil.getDate(searchInput.dateFrom?date, "dd/MM/yyyy", locale)}"
466 </#if>
467 >
468 <div class="input-group-append">
469 <span class="input-group-text bg-black text-white"><span class="far fa-calendar" aria-hidden="true"></span></span>
470 </div>
471 </div>
472 </div>
473 <div class="form-group">
474 <label for="input-dateTo">${label_al}</label>
475 <div class="input-group">
476 <input type="text" class="form-control" name="dateTo"
477 id="input-dateTo" autocomplete="off"
478 placeholder="gg/mm/aaaa"
479 <#if searchInput.dateTo?has_content>
480 value="${dateUtil.getDate(searchInput.dateTo?date, "dd/MM/yyyy", locale)}"
481 </#if>
482 >
483 <div class="input-group-append">
484 <span class="input-group-text bg-black text-white"><span class="far fa-calendar" aria-hidden="true"></span></span>
485 </div>
486 </div>
487 </div>
488 </#if>
489
490 </div>
491 </div>
492 </#if>
493
494 <#-- pulsante di ricerca -->
495 <div class="row">
496 <div class="col-12 text-center mb-4">
497 <button type="submit" class="btn btn-primary btn-block">${label_button_cerca}</button>
498 </div>
499 </div>
500 </@>
501 </div>
502 </#list>
503 </#if>
504 </div>
505
506 </div>
507 </div>
508 </div>
509 </div>
510</div>
511
512<script>
513 // funzione per cambiare ordinamento sull'onchange
514 function changeOrder(elem){
515 $("#orderByInputHidden").val($(elem).val());
516 $("#search-globale-form").submit();
517 }
518 $(document).ready(function(){
519 // funzioni di inizializzazione per i datepicker della ricerca per date
520 dateTimePickerInit('#input-dateFrom');
521 dateTimePickerInit('#input-dateTo');
522 $("#input-dateFrom").on("dp.change", function (e) {
523 $('#input-dateTo').data("DateTimePicker").minDate(e.date);
524 });
525 $("#input-dateTo").on("dp.change", function (e) {
526 $('#input-dateFrom').data("DateTimePicker").maxDate(e.date);
527 });
528 })
529</script>