Elenco servizi - Comune di Carmiano
Servizi
Tutti i servizi comunali per i cittadini, disponibili online o a sportello, per richiedere documenti e permessi, iscriversi a graduatorie ed effettuare pagamenti.
Si è verificato un errore nell'elaborarazione del modello.
The following has evaluated to null or missing:
==> ricerca_components["ricerca-pagination"] [in template "281621#281649#297105" at line 181, column 63]
----
Tip: It's the final [] step 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: @ricerca_components["ricerca-paginati... [in template "281621#281649#297105" at line 181, column 61]
----
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_elenco = languageUtil.get(locale, "label_elenco") />
12<#assign label_leggi_piu = languageUtil.get(locale, "label_leggi_piu") />
13<#assign label_ordinamento = languageUtil.get(locale, "label_ordinamento") />
14<#assign label_numero_risultati = languageUtil.get(locale, "label_numero_risultati") />
15<#assign label_ricerca_testo = languageUtil.get(locale, "label_ricerca_testo") />
16<#assign label_placeholder_ricerca_testo = languageUtil.get(locale, "label_placeholder_ricerca_testo") />
17<#assign label_filtra = languageUtil.get(locale, "label_filtra") />
18<#assign label_categorie = languageUtil.get(locale, "label_categorie") />
19<#assign label_categorie_tutte = languageUtil.get(locale, "label_categorie_tutte") />
20<#assign label_button_cerca = languageUtil.get(locale, "label_button_cerca") />
21<#assign label_dal = languageUtil.get(locale, "label_dal") />
22<#assign label_al = languageUtil.get(locale, "label_al") />
23<#assign argumentsCategoryIds = [294358,294361,294364,294367,294370,294373,294376,294379,294382,294385,294388,294391,294394,294397,294400,294403,294406,294409,294412,294415,294418,294421,294424,294427,294430,294433,294436,294439,294442,294445,294448,294451,294454,294457,294460,294463,294466,294469,294472,294475,294481,294484,294487,294490,294493,294496,294499,294502,294505,294508,294511,294514,294517,294520,294523,294526,294529,294532,294535,294538,294541,357541] />
24
25<#-- Inclusione widget template con macros e relativi servizi -->
26<#include "${templatesPath}/RICERCA_COMMON_MACROS" />
27
28<#-- html -->
29<div class="col-12 mt-5">
30 <div class="search-template search-template-servizi">
31 <div class="container">
32
33 <div class="row">
34 <div class="col-12">
35 <h2 class="mb-4">${themeDisplay.getLayout().getName(locale)}</h2>
36 </div>
37 </div>
38
39 <div class="row">
40 <#if entries?has_content>
41 <#list entries as curEntry>
42 <#-- colonna elenco risultati -->
43 <div class="order-last order-sm-last order-md-last order-lg-first col-lg-9">
44
45 <#-- barra ordinamento -->
46 <div class="row">
47 <div class="col-12">
48 <div class="d-flex justify-content-between align-items-center">
49 <div></div>
50 <#-- ordinamento: ricordarsi del campo hidden che deve stare nel form -->
51 <div class="form-group">
52 <label for="orderBySelect" class="sr-only">${label_ordinamento}</label>
53 <select class="form-control form-control-orderBy" id="orderBySelect" name="orderBySelect" onchange="changeOrder(this);">
54 <#list enabledSortFieldsAsKeyValue?keys as prop>
55 <#assign isSelected = "" />
56 <#if searchInput.orderBy?has_content>
57 <#if searchInput.orderBy?string == prop>
58 <#assign isSelected = "selected" />
59 </#if>
60 </#if>
61 <option value="${prop}" ${isSelected}>${enabledSortFieldsAsKeyValue[prop]}</option>
62 </#list>
63 </select>
64 </div>
65 </div>
66 </div>
67 </div>
68
69 <#-- numero risultati -->
70 <div class="row">
71 <div class="col-12">
72 <p class="text-right">${label_numero_risultati}: <strong>${curEntry.paging.totalRecordsCount}</strong></p>
73 </div>
74 </div>
75
76 <#-- elenco risultati -->
77 <#if curEntry.records?has_content>
78 <div class="row">
79 <#list curEntry.records as record>
80 <#if record.metadata?has_content>
81 <div class="col-12 col-lg-6">
82 <#-- start card -->
83 <article class="card-wrapper card-space">
84 <div class="card card-bg card-img rounded shadow">
85
86 <#-- immagine principale -->
87 <#if record.metadata.image?has_content && record.metadata.image.value?has_content>
88 <#attempt>
89 <#assign imageJson = jsonFactoryUtil.createJSONObject(record.metadata.image.value) />
90 <#if imageJson?? && imageJson?has_content && imageJson.uuid?? && imageJson.groupId??>
91 <#assign imageDLFileEntry = dlFileEntryLocalService.getFileEntryByUuidAndGroupId(imageJson.uuid,imageJson.groupId?number) />
92 <#assign imageUrl = "/documents/"+groupId+"/"+imageDLFileEntry.getFolderId()+"/"+imageDLFileEntry.getFileName()+"/"+imageJson.uuid />
93
94 <div class="img-responsive-wrapper">
95 <div class="img-responsive img-responsive-panoramic">
96 <figure class="img-wrapper">
97 <img src="${imageUrl}" alt="${htmlUtil.escapeAttribute(record.metadata.title.value)}">
98 </figure>
99 </div>
100 </div>
101 </#if>
102 <#recover>
103 <#-- in caso di problemi sull'immagine, non visualizzo nulla -->
104 </#attempt>
105 </#if>
106
107 <div class="card-body p-4">
108 <#-- categoria -->
109 <div class="category-top">
110 <svg class="icon icon-sm">
111 <use href="/o/portale-istituzionale-theme/svg/sprite.svg#it-pa"></use>
112 </svg>
113 <span class="category">${record.structureName}</span>
114 </div>
115
116 <#-- titolo di struttura -->
117 <#if record.metadata.title?has_content && record.metadata.title.value?has_content>
118 <#if record.detailUrl?has_content>
119 <h3 class="card-title check-highlight mb-2">
120 <a href="${record.detailUrl}" title="${label_leggi_piu}: ${htmlUtil.escapeAttribute(record.metadata.title.value)}">${record.metadata.title.value}</a>
121 </h3>
122 <#else>
123 <h3 class="card-title check-highlight mb-2">
124 ${record.metadata.title.value?trim}
125 </h3>
126 </#if>
127 </#if>
128
129 <#-- abstract -->
130 <#if record.metadata.abstract?has_content && record.metadata.abstract.value?has_content>
131 <div class="card-text check-highlight mb-2">${record.metadata.abstract.value}</div>
132 </#if>
133
134 <#-- metodo tramite record (ricerca) -->
135 <#-- recupero l'elenco delle categorie dall'oggetto record anzichè passando dall'articolo -->
136 <#if record.categories?? && (record.categories?size > 0)>
137 <#list record.categories as key, value>
138 <#if (key?? && key != 0 && !(argumentsCategoryIds?seq_contains(key))) && (value?? && value != "" && value?substring(0,1) != PREFIX_SERVICE_CATEGORY)>
139 <div class="chip chip-simple chip-primary chip-no-link">
140 <span class="chip-label">${value}</span>
141 </div>
142 </#if>
143 </#list>
144 </#if>
145
146
147 <#-- categorie: metodo tramite api - COMMENTATO -->
148 <#--
149 <#assign categorie = []>
150 <#assign categorie = getListCategoryByArticlePrimKey(record.entryClassPk) />
151 <#if categorie?? && (categorie?size > 0)>
152 <#list categorie as cur_cat>
153 <#if validator.isNotNull(cur_cat) && cur_cat != "">
154 <div class="chip chip-simple chip-primary chip-no-link">
155 <span class="chip-label">${cur_cat.getTitle(locale)}</span>
156 </div>
157 </#if>
158 </#list>
159 </#if>
160
161 <#-- read-more link -->
162 <a class="read-more" href="${record.detailUrl}" data-element="service-link" title="${label_leggi_piu}: ${htmlUtil.escapeAttribute(record.metadata.title.value)}">
163 <span class="text">${label_leggi_piu}</span>
164 <svg class="icon">
165 <use xlink:href="/o/portale-istituzionale-theme/svg/sprite.svg#it-arrow-right"></use>
166 </svg>
167 </a>
168
169 </div>
170 </div>
171 </article>
172 </div>
173 </#if>
174 </#list>
175 </div>
176 </#if>
177
178 <#-- paginazione mediante taglib-->
179 <div class="row">
180 <div class="col-12 text-center">
181 <@ricerca_components["ricerca-pagination"]
182 currentPage=curEntry.paging.page?number
183 totalPages=curEntry.paging.totalPagesCount?number
184 paginationUrl="${portletURL}"></@>
185 </div>
186 </div>
187 </div>
188
189 <#-- colonna form ricerca: dopo breakpoint lg viene visualizzata come prima colonna -->
190 <div class="order-first order-sm-first corder-md-first order-lg-last col-lg-3">
191
192 <#-- form ricerca -->
193 <@ricerca_components["ricerca-form"] searchUrl="${searchUrl}" method="get" id="search-servizi-form">
194
195 <#-- campo hidden per ordinamento -->
196 <input type="hidden" value="${searchInput.orderBy}" name="orderBy" id="orderByInputHidden">
197
198 <#-- campo di ricerca testuale -->
199 <div class="form-group">
200 <label for="input-ricerca-q" class="sr-only">${label_ricerca_testo}</label>
201 <@ricerca_components["ricerca-input-q"] cssClass="form-control form-control-search-rounded-input"
202 value="${searchInput.q}"
203 placeholder="${label_placeholder_ricerca_testo}">
204 </@>
205 </div>
206
207 <#-- inizio collapse che racchiude tutti i filtri: poichè ci sono solo categorie, il controllo è unico a monte di tutto -->
208 <#-- leggo valore impostato a livello di configurazione sulla ricerca per categorie -->
209 <#if (ricercaPortletConfig.configSearchByCategories == true) && (categoriesAsKeyValue?size > 0)>
210 <a class="simple-collapse-button" data-toggle="collapse" href="#searchFilters" role="button" aria-expanded="true" aria-controls="searchFilters">
211 <strong>${label_filtra}</strong>
212 </a>
213 <div class="collapse show" id="searchFilters">
214
215 <#-- ricerca per categorie -->
216 <div class="form-group">
217 <#if ricercaPortletConfig.configSelectMultipleCategories == true>
218
219 <#-- caso di elenco di categorie e sottocategorie indentate con nome vocabolario - sfrutta macro presente nel template RICERCA_COMMON_MACROS -->
220 <#if ricercaPortletConfig.configAllowVocabulariesLabelFilter == true>
221 <strong>${label_categorie}</strong>
222 <ul class="list-unstyled ml-2">
223 <#list hierarchicalVocabulariesOptions as voKey, voValue>
224 <li>
225 <strong>${voValue.value.label}</strong>
226 <@getAllCategories voValue.children />
227 </li>
228 </#list>
229 </ul>
230 <#else>
231 <#-- caso di elenco categorie e sottocategorie indentate ma senza nome vacabolario - sfrutta macro presente nel template RICERCA_COMMON_MACROS -->
232 <#if hierarchicalCategoriesOptions?? && hierarchicalCategoriesOptions?has_content>
233 <strong>${label_categorie}</strong>
234 <@getAllCategories hierarchicalCategoriesOptions />
235 </#if>
236 </#if>
237 <#else>
238 <#-- visualizzo una select singola -->
239 <label for="select-ricerca-categorie">${label_categorie}</label>
240 <select name="categoryIds" class="form-control" id="select-ricerca-categorie">
241 <#list categoriesAsKeyValue?keys as prop>
242 <#assign isSelected = "" />
243 <#if searchInput.categoryIds?has_content>
244 <#list searchInput.categoryIds as categoryId>
245 <#if categoryId?string == prop>
246 <#assign isSelected = "selected" />
247 </#if>
248 </#list>
249 </#if>
250 <option value="${prop}" ${isSelected}>${categoriesAsKeyValue[prop]}</option>
251 </#list>
252 </select>
253 </#if>
254 </div>
255 </div>
256 </#if>
257
258 <#-- pulsante di ricerca -->
259 <div class="row">
260 <div class="col-12 text-center mt-4 mb-4">
261 <button type="submit" class="btn btn-primary btn-block">${label_button_cerca}</button>
262 </div>
263 </div>
264 </@>
265 </div>
266 </#list>
267 </#if>
268 </div>
269
270 </div>
271 </div>
272</div>
273
274<script>
275 // funzione per cambiare ordinamento sull'onchange
276 function changeOrder(elem){
277 $("#orderByInputHidden").val($(elem).val());
278 $("#search-servizi-form").submit();
279 }
280</script>
Esplora per categoria
Quanto sono chiare le informazioni su questa pagina?
Grazie, il tuo parere ci aiuterà a migliorare il servizio!