Sommerliche Trüffel-Crostini
Fehler bei der Verarbeitung der Vorlage.
The following has evaluated to null or missing:
==> relatedResult.getImg().getAlt() [in template "20099#20135#79292" at line 511, column 106]
----
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: ${relatedResult.getImg().getAlt()} [in template "20099#20135#79292" at line 511, column 104]
----
1<#--
2Template ID: 79293
3Template Key: 79292
4Type: display
5Mode: None
6-->
7
8<#--RICETTA 24092025-->
9<#assign elasticService = serviceLocator.findService("it.inera.elastic.service.ElasticService")>
10<#assign journalArticleConverter = serviceLocator.findService("it.inera.journalarticleconverter.service.JournalArticleConverter")>
11<#assign searchService = serviceLocator.findService("it.inera.structure.search.service.SearchService")>
12<#assign structureService = serviceLocator.findService("it.inera.structure.service.StructureService")>
13
14<#assign assetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService")>
15<#assign assetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService") />
16<#assign dlAppServiceUtil = serviceLocator.findService("com.liferay.document.library.kernel.service.DLAppService")/>
17<#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") />
18
19<#assign ricettaStructureKey = structureService.getStructureRicettaKey()>
20<#assign ricettaStructureId = structureService.getStructureRicettaId()>
21<#assign journalArticleId = .vars['reserved-article-id'].data/>
22
23<#assign vocabularyIdUmbria = structureService.getVocabularyIdByVocabularyName("Vocabolario Umbria") >
24
25<#assign currentArticle = journalArticleLocalService.getArticle(groupId, journalArticleId) />
26
27<#-- GESTIONE RALATED ASSETS VALORIZZAZIONE ARRAY-->
28<#assign currentObject = journalArticleConverter.getRicetta(currentArticle, themeDisplay.getLocale())>
29<#assign relatedAssets = currentObject.getDirectRelatedAssets()>
30<#assign relatedResults = []>
31<#if relatedAssets?? && relatedAssets?has_content>
32 <#assign relatedResult = searchService.getResponse(relatedAssets, themeDisplay.getLocale(), null, themeDisplay)>
33 <#if relatedResult?? && relatedResult?has_content>
34 <#assign relatedResults = relatedResult.getData()>
35 </#if>
36</#if>
37
38<#-- GESTIONE ASSET LINGUA DI DEFAULT -->
39<#assign currentObjectDefaultLanguage = journalArticleConverter.getRicetta(currentArticle, localeUtil.getDefault())>
40
41<#-- GESTIONE RALATED ASSETS VALORIZZAZIONE ARRAY-->
42<#assign currentArticleResourcePrimKey = currentArticle.getResourcePrimKey() />
43<#assign currentArticleAssetEntry = assetEntryLocalService.getEntry("com.liferay.journal.model.JournalArticle", currentArticleResourcePrimKey) />
44<#assign currentArticleAssetEntryId = currentArticleAssetEntry.getEntryId() />
45
46<#assign assetRenderer = currentArticleAssetEntry.getAssetRenderer() />
47<#assign assetObject = assetRenderer.getAssetObject() />
48<#assign categoryList = assetCategoryLocalService.getCategories("com.liferay.journal.model.JournalArticle", assetObject.resourcePrimKey) />
49
50<#assign categoryListIds = [] >
51<#list categoryList as category>
52 <#if category.getCategoryId()??>
53 <#assign categoryListIds = categoryListIds + [category.getCategoryId()?long]>
54 </#if>
55</#list>
56
57<#assign results = []>
58<#if elasticService??>
59 <#assign results = (elasticService.getRelatedArticlesOrderByPriority(
60 themeDisplay,
61 (ricettaStructureKey?string)!,
62 (ricettaStructureId?string)!,
63 themeDisplay.getLanguageId(),
64 "6",
65 "",
66 null,
67 (journalArticleId?string)!,
68 null,
69 null,
70 null
71 ))![] />
72</#if>
73
74
75<#-- per categoria -->
76
77<#assign categoryArray=[]>
78<#assign assetVocabularyLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetVocabularyLocalService")>
79<#assign vocabularyName = "Vocabolario Umbria"/>
80<#assign specificVocabulary = assetVocabularyLocalService.getGroupVocabulary(themeDisplay.getCompany().getGroupId(), vocabularyName)/>
81<#if validator.isNotNull(specificVocabulary)>
82 <#assign cats = specificVocabulary.getCategories()/>
83</#if>
84
85<#assign categories = (assetEntryLocalService.getAssetEntryAssetCategories(currentArticleAssetEntryId))![] />
86
87<#--<#assign categories = assetCategoryLocalService.getAssetEntryAssetCategories(currentArticleAssetEntryId) />-->
88<#if validator.isNotNull(cats)>
89 <#list cats as cat>
90 <#list categories as cate>
91 <#if cat == cate>
92 <#assign categoryArray = categoryArray + [cat]>
93 </#if>
94 </#list>
95 </#list>
96</#if>
97
98<#assign titleCategory = "">
99<#if categoryArray?? && categoryArray?has_content>
100 <#assign firstCategory = categoryArray[0] />
101 <#assign titleCategory = firstCategory.getTitle(themeDisplay.getLocale())>
102</#if>
103<#-- per categoria FINE -->
104
105<#assign urlBanner = immagine_banner.getData() >
106<#assign fileEntryIdBanner = immagine_banner.getAttribute("fileEntryId")!immagine_banner.getAttribute("classPK")!"">
107<#assign testAlternativoImmagineBanner = testo_alternativo_immagine_banner.getData() >
108<#if ((currentObjectDefaultLanguage.getImmagineBanner())!)?has_content>
109 <#assign urlBanner = currentObjectDefaultLanguage.getImmagineBanner().getPublicUrl()!urlBanner >
110 <#assign fileEntryIdBanner = currentObjectDefaultLanguage.getImmagineBanner().getFileEntryId()!currentObjectDefaultLanguage.getImmagineBanner().getClassPK()!"" >
111</#if>
112<#if ((currentObjectDefaultLanguage.getTestoAlternativoImmagineBanner())!)?has_content>
113 <#assign testAlternativoImmagineBanner = currentObjectDefaultLanguage.getTestoAlternativoImmagineBanner() >
114</#if>
115
116<#attempt>
117 <#list categoryList as category>
118 <#if vocabularyIdUmbria == category.getVocabularyId() >
119 <#assign titleCategory = category.getTitle(themeDisplay.getLocale())>
120 <#assign parentCategoryId = category.getParentCategoryId()>
121 <#assign titleParentCategory = "">
122 <#if parentCategoryId?? && parentCategoryId?has_content>
123 <#assign pc = assetCategoryLocalService.getCategory(parentCategoryId) >
124 <#if pc?? && pc?has_content>
125 <#assign titleParentCategory = pc.getTitle("it_IT")>
126 </#if>
127 </#if>
128 <#if titleCategory?? && titleCategory?has_content>
129 <span class="hidden" id="tagmanager_init_pagegroup">${titleParentCategory}</span>
130 <span class="hidden" id="tagmanager_init_pagecategory">${titleCategory}</span>
131 </#if>
132 </#if>
133 </#list>
134 <#recover>
135</#attempt>
136
137<div class="container-fluid">
138 <div class="row">
139 <div class="header-block header-under-nav header-block-image-layer header-block-1 header-block-image-main header-block-tagged">
140 <img class="bg" src="${urlBanner}"
141 data-fileentryid="${fileEntryIdBanner}"
142 alt="${testAlternativoImmagineBanner}">
143 <div class="container title title-main">
144 <div class="row">
145 <div class="col-12">
146 <#if titleCategory?? && titleCategory?has_content>
147 <div class="badge badge-light badge-uppercase">
148 ${titleCategory}
149 </div>
150 </#if>
151 <h1 class="title-1 margin-top-em-0 margin-bottom-em-0">
152 ${titolo.getData()}
153 </h1>
154 </div>
155 </div>
156 </div>
157 </div>
158 </div>
159</div>
160<#assign categoryArray=[]>
161
162<#assign number = 0 />
163<#if (dosi?? && dosi.getData()?has_content) >
164 <#assign number = number + 1 />
165</#if>
166<#if (tempo_di_cottura?? && tempo_di_cottura.getData()?has_content) >
167 <#assign number = number + 1 />
168</#if>
169<#if (tempo_di_preparazione?? && tempo_di_preparazione.getData()?has_content) >
170 <#assign number = number + 1 />
171</#if>
172<#if (prezzo?? && prezzo.getData()?has_content) >
173 <#assign number = number + 1 />
174</#if>
175<#if (difficolta?? && difficolta.getData()?has_content) >
176 <#assign number = number + 1 />
177</#if>
178
179<#-- <#assign divisore = 0 /> -->
180<#if number gt 0 >
181 <#assign divisore = 12/number />
182</#if>
183
184
185<div class="container-fluid bg-white">
186 <#if (dosi?? && dosi.getData()?has_content) || (tempo_di_cottura?? && tempo_di_cottura.getData()?has_content) || (prezzo?? && prezzo.getData()?has_content)>
187 <div class="row">
188 <div class="container bridge bridge-sm-top margin-top-em-2 margin-bottom-em-4 margin-top-sm-em-0 margin-bottom-sm-em-0">
189 <div class="row">
190 <div class="col-12">
191 <div class="card-bar card-bar-1 card-bar-dark">
192 <div class="card-row">
193 <#if dosi?? && dosi.getData()?has_content>
194 <div class="col-${divisore}">
195 <div class="card card-horizontal card-3">
196 <div class="card-row">
197 <div class="card-icon card-item-first">
198 <i class="fas fa-users"></i>
199 </div>
200 <div class="card-body">
201 <div class="row">
202 <div class="col-12">
203 <div class="card-subtitle title-6">
204 <@liferay.language key="label.porzioni"/>
205 </div>
206 </div>
207 <div class="col-12">
208 <div class="card-title">
209 ${dosi.getData()}
210 </div>
211 </div>
212 </div>
213 </div>
214 </div>
215 </div>
216 </div>
217 </#if>
218 <#if tempo_di_preparazione?? && tempo_di_preparazione.getData()?has_content>
219 <div class="col-${divisore}">
220 <div class="card card-horizontal card-3">
221 <div class="card-row">
222 <div class="card-icon card-item-first">
223 <i class="fas fa-clock"></i>
224 </div>
225 <div class="card-body">
226 <div class="row">
227 <div class="col-12">
228 <div class="card-subtitle title-6">
229 <@liferay.language key="label.preparazione"/>
230 </div>
231 </div>
232 <div class="col-12">
233 <div class="card-title">
234 ${tempo_di_preparazione.getData()}
235 </div>
236 </div>
237 </div>
238 </div>
239 </div>
240 </div>
241 </div>
242 </#if>
243 <#if tempo_di_cottura?? && tempo_di_cottura.getData()?has_content>
244 <div class="col-${divisore}">
245 <div class="card card-horizontal card-3">
246 <div class="card-row">
247 <div class="card-icon card-item-first">
248 <i class="fas fa-clock"></i>
249 </div>
250 <div class="card-body">
251 <div class="row">
252 <div class="col-12">
253 <div class="card-subtitle title-6">
254 <@liferay.language key="label.cottura"/>
255 </div>
256 </div>
257 <div class="col-12">
258 <div class="card-title">
259 ${tempo_di_cottura.getData()}
260 </div>
261 </div>
262 </div>
263 </div>
264 </div>
265 </div>
266 </div>
267 </#if>
268
269 <#if difficolta?? && difficolta.getData()?has_content>
270 <div class="col-${divisore}">
271 <div class="card card-horizontal card-3">
272 <div class="card-row">
273 <div class="card-icon card-item-first">
274 <i class="fas fa-star"></i>
275 </div>
276 <div class="card-body">
277 <div class="row">
278 <div class="col-12">
279 <div class="card-subtitle title-6">
280 <@liferay.language key="label.difficolta"/>
281 </div>
282 </div>
283 <div class="col-12">
284 <div class="card-title">
285 <#if (difficolta.getData() == "1")>
286 <@liferay.language key="label.facile"/>
287 <#elseif (difficolta.getData() == "2" || difficolta.getData() == "3")>
288 <@liferay.language key="label.media"/>
289 <#elseif (difficolta.getData() == "4" || difficolta.getData() == "5")>
290 <@liferay.language key="label.difficile"/>
291 <#else>
292 <@liferay.language key="label.facile"/>
293 </#if>
294 </div>
295 </div>
296 </div>
297 </div>
298 </div>
299 </div>
300 </div>
301 </#if>
302 <#if prezzo?? && prezzo.getData()?has_content>
303 <div class="col-${divisore}">
304 <div class="card card-horizontal card-3">
305 <div class="card-row">
306 <div class="card-icon card-item-first">
307 <i class="fas fa-euro-sign"></i>
308 </div>
309 <div class="card-body">
310 <div class="row">
311 <div class="col-12">
312 <div class="card-subtitle title-6">
313 <@liferay.language key="label.costo"/>
314 </div>
315 </div>
316 <div class="col-12">
317 <div class="card-title">
318 ${prezzo.getData()}
319 </div>
320 </div>
321 </div>
322 </div>
323 </div>
324 </div>
325 </div>
326 </#if>
327 </div>
328 </div>
329 </div>
330 </div>
331 </div>
332 </div>
333 </#if>
334 <div class="row">
335 <article class="container padding-bottom-em-3 padding-top-em-1">
336 <div class="row flex-column-reverse flex-md">
337 <div class="col-12 col-md-8" id="preparazione">
338 <#if descrizione?? && descrizione.getData()?has_content>
339 <div class="text-block text-block-left">
340 <div class="text">
341 ${descrizione.getData()}
342 </div>
343 </div>
344 </#if>
345
346 <#list descrizione_videoFieldSet.getSiblings()![] as cur_video>
347
348 <#if ((cur_video.descrizione_video.getData())!)?has_content>
349 <div class="title-4 padding-bottom-em-1">
350 ${cur_video.descrizione_video.getData()}
351 </div>
352 </#if>
353
354 <#if ((cur_video.video.getData())!)?has_content>
355 <div class="hytPlayerWrap">
356 <iframe allowfullscreen="" frameborder="0" height="auto" src="${cur_video.video.getData()}" style="display:none;" width="auto">
357 </iframe>
358 </div>
359 <div class="embed-responsive embed-responsive-16by9">
360 <iframe allowfullscreen="" class="embed-responsive-item" src="${cur_video.video.getData()}"></iframe>
361 </div>
362 </#if>
363 </#list>
364
365 <div class="text-block text-block-left">
366 <div class="title-4 padding-bottom-em-1">
367 <@liferay.language key="label.preparazione"/>
368 </div>
369 <div class="text">
370 ${preparazione.getData()}
371 </div>
372 </div>
373 </div>
374 <aside class="col-12 col-md-4 margin-bottom-em-3 margin-bottom-md-em-0">
375 <div class="sidebar" id="ingredients">
376 <div class="text-block-1 padding-top-xsi-2">
377 <div class="text-block-left">
378 <div id="ingredients-list">
379 <div class="title-4 padding-bottom-em-1">
380 <@liferay.language key="label.ingredienti"/>
381 </div>
382 <div class="text">
383 ${ingredienti.getData()}
384 </div>
385 </div>
386 </div>
387 </div>
388 </div>
389 </aside>
390 </div>
391 </article>
392 </div>
393</div>
394
395
396<#if ((descrizione_immagineFieldSet.getSiblings()[0].immagine.getData())!)?has_content>
397 <div class="container-fluid bg-white">
398 <div class="row">
399 <div class="carousel-container carousel-no-ctrl transparent margin-bottom-em-1 tns-overflow-show carousel-image-slide carousel-draggable">
400 <div class="tns-carousel tns-carousel-no-ctrl" data-tns-config="{"autoWidth":true,"items":2,"autoplay":false,"responsive":{"768":{"items":3},"992":{"items":4}}}">
401 <#list descrizione_immagineFieldSet.getSiblings()![] as cur_immagine>
402 <#if ((cur_immagine.immagine.getData()?trim)!)?has_content >
403 <div class="item-with-caption">
404 <img class="slide-image" src="${cur_immagine.immagine.getData()}"
405 data-fileentryid="${cur_immagine.immagine.getAttribute("fileEntryId")!cur_immagine.immagine.getAttribute("classPK")!""}"
406 alt="${cur_immagine.testo_alternativo.getData()}">
407 <#if ((cur_immagine.didascalia.getData()?trim)!)?has_content &&
408 cur_immagine.didascalia.getData()?trim != "null">
409 <p class="caption">${cur_immagine.didascalia.getData()}</p>
410 </#if>
411 </div>
412 </#if>
413 </#list>
414 </div>
415 </div>
416 </div>
417 </div>
418<#else>
419 <#attempt>
420 <#if currentObjectDefaultLanguage?? && currentObjectDefaultLanguage?has_content && currentObjectDefaultLanguage.getImmagini()?has_content>
421 <div class="container-fluid bg-white">
422 <div class="row">
423 <div class="carousel-container carousel-no-ctrl transparent margin-bottom-em-1 tns-overflow-show carousel-image-slide carousel-draggable">
424 <div class="tns-carousel tns-carousel-no-ctrl" data-tns-config="{"autoWidth":true,"items":2,"autoplay":false,"responsive":{"768":{"items":3},"992":{"items":4}}}">
425 <#list currentObjectDefaultLanguage.getImmagini() as imm>
426 <div class="item-with-caption">
427 <#if ((imm.getImmagine().getPublicUrl())!)?has_content>
428 <img class="slide-image" src="${imm.getImmagine().getPublicUrl()}"
429 data-fileentryid="${imm.getImmagine().getFileEntryId()!imm.getImmagine().getClassPK()!""}"
430 alt="${imm.getTestoAlternativo()!}">
431 <#if ((imm.getDidascalia()?trim)!)?has_content && imm.getDidascalia()?trim != "null">
432 <p class="caption">${imm.getDidascalia()}</p>
433 </#if>
434 </#if>
435 </div>
436 </#list>
437 </div>
438 </div>
439 </div>
440 </div>
441 </#if>
442 <#recover>
443
444 </#attempt>
445</#if>
446
447
448<#assign titolo1 = "" />
449<#assign testo1 = "" />
450<#if currentArticle.getExpandoBridge()?? && currentArticle.getExpandoBridge().getAttribute("titolo_fascia_1")?has_content>
451 <#assign titolo1_custom_field = currentArticle.getExpandoBridge().getAttribute("titolo_fascia_1") />
452 <#list titolo1_custom_field?keys as key>
453 <#if key == locale>
454 <#assign titolo1 = titolo1_custom_field?values[key_index] />
455 </#if>
456 </#list>
457</#if>
458
459<#if currentArticle.getExpandoBridge()?? && currentArticle.getExpandoBridge().getAttribute("testo_fascia_1")?has_content>
460 <#assign testo1_custom_field = currentArticle.getExpandoBridge().getAttribute("testo_fascia_1") />
461 <#list testo1_custom_field?keys as key>
462 <#if key == locale>
463 <#assign testo1 = testo1_custom_field?values[key_index] />
464 </#if>
465 </#list>
466</#if>
467
468
469<#if results?size gt 0 || relatedResults?size gt 0>
470 <div class="container-fluid bg-gray">
471 <div class="row">
472 <aside class="container padding-top-em-3 padding-bottom-em-5">
473 <div class="row">
474 <div class="col-12 col-md-10 offset-md-1 margin-bottom-em-2 margin-bottom-lg-em-minus-1">
475 <div class="text-block text-block-center">
476 <div class="title-2">
477 <#if titolo1?has_content && titolo1?trim?length gt 0 >
478 ${titolo1}
479 <#else>
480 <@liferay.language key="label.potrebbe.interessarti.anche" />
481 </#if>
482 </div>
483 <div class="text">
484 <#if testo1?has_content && testo1?trim?length gt 0 >
485 ${testo1}
486 <#else>
487
488 </#if>
489 </div>
490 </div>
491 </div>
492 <div class="col-12">
493 <div class="d-flex flex-justify-content-end">
494 <a class="link-showall" href="/ricette">
495 <@liferay.language key="label.scopri.tutte"/>
496 <i class="fas fa-angle-right"></i>
497 </a>
498 </div>
499 </div>
500
501 <div class="col-12 same-heigh-cards">
502 <div class="carousel-container transparent carousel-controls-bottom margin-top-em-1 carousel-draggable">
503 <div class="tns-carousel tns-carousel-default tns-nav-off">
504 <#-- GESTIONE RALATED ASSETS RENDERIZZAZIONE (relatedResults da searchService) -->
505 <#list relatedResults as relatedResult>
506 <div>
507 <div class="card card-1 card-1-styled card-offerta">
508 <a class="card-link" href="${relatedResult.getHref()}"></a>
509 <div class="card-header">
510 <div class="card-header-bg aspect-ratio aspect-ratio-4-3">
511 <img src="${relatedResult.getImg().getSrc()}" alt="${relatedResult.getImg().getAlt()}">
512 </div>
513 <button class="link link-tripplanner link-tripplanner-top-right margin-top-em-2 margin-right-em-1 link-tripplanner-styled"
514 aria-label="aggiungi/elimina dal tuo viaggio"
515 data-id="${relatedResult.getId()}" data-tom="false">
516 <i class="far fa-heart text-red" data-prefix="far"></i>
517 <i class="fas fa-heart text-red" data-prefix="fas" style="display:none;"></i>
518 </button>
519 <div class="card-header-info">
520 <#assign categoryNames = relatedResult.getHeader().getInfo() >
521 <#list categoryNames as categoryName>
522 <div class="badge badge-trasparent-white">
523 ${categoryName}
524 </div>
525 </#list>
526 </div>
527 </div>
528 <div class="card-body">
529 <a class="card-body-title title-4" href="${relatedResult.getHref()}">
530 ${relatedResult.getTitle()}
531 </a>
532 <div class="card-body-subtitle">
533 <#if relatedResult.getSubtitle()?? && relatedResult.getSubtitle()?has_content && relatedResult.getSubtitle()?trim?length gt 0 && relatedResult.getSubtitle()?trim != "null">
534 ${relatedResult.getSubtitle()}
535 </#if>
536 </div>
537 </div>
538 <div class="card-info mt-4">
539 </div>
540 </div>
541 </div>
542 </#list>
543 <#-- GESTIONE RALATED ASSETS FINE RENDERIZZAZIONE-->
544
545 <#-- GESTIONE results da elasticService -->
546 <#list results as related>
547 <#assign langId = themeDisplay.getLanguageId() />
548 <#assign contentByLocale = related.getContentByLocale(themeDisplay.getLanguageId()) />
549 <#assign document = saxReaderUtil.read(contentByLocale) >
550 <#assign rootElement = document.getRootElement()>
551
552 <#assign xPathTitolo = saxReaderUtil.createXPath("dynamic-element[@name='titolo']")>
553 <#assign relatedTitolo = xPathTitolo.selectSingleNode(rootElement).getStringValue()>
554
555 <#assign xPathSottotitolo = saxReaderUtil.createXPath("dynamic-element[@name='sottotitolo']")>
556 <#assign relatedSottotitolo = xPathSottotitolo.selectSingleNode(rootElement).getStringValue()>
557
558 <#assign xPathImmagineBanner = saxReaderUtil.createXPath("dynamic-element[@name='immagine_banner']")>
559 <#assign relatedImmagineBanner = (xPathImmagineBanner.selectSingleNode(rootElement).getStringValue())!"">
560 <#assign relatedImmagineBannerId = 0>
561
562 <#if relatedImmagineBanner?has_content>
563 <#assign relatedImmagineBannerJson = relatedImmagineBanner?eval_json>
564 <#assign relatedImmagineBannerId = (relatedImmagineBannerJson.fileEntryId!relatedImmagineBannerJson.classPK!0)?number>
565 </#if>
566
567 <#assign xPathTestoAlternativoImmagineBanner = saxReaderUtil.createXPath("dynamic-element[@name='testo_alternativo_immagine_banner']")>
568 <#assign relatedTestoAlternativoImmagineBanner = xPathTestoAlternativoImmagineBanner.selectSingleNode(rootElement).getStringValue()>
569
570 <#assign resourcePrimKey = related.getResourcePrimKey() />
571 <#assign assetEntry = assetEntryLocalService.getEntry("com.liferay.journal.model.JournalArticle", resourcePrimKey) />
572 <#assign assetEntryId = assetEntry.getEntryId() />
573
574 <#assign categories = (assetCategoryLocalService.getCategories("com.liferay.journal.model.JournalArticle", resourcePrimKey))![] />
575
576 <#assign categoryNames = [] >
577
578 <#list categories as category>
579 <#if vocabularyIdUmbria == category.getVocabularyId() >
580 <#assign categoryNames = categoryNames + [category.getTitle(themeDisplay.getLanguageId())] >
581 </#if>
582 </#list>
583
584 <div>
585 <div class="card card-1 card-1-styled card-offerta">
586 <a class="card-link" href="/-/${related.getUrlTitle(locale)}"></a>
587 <div class="card-header">
588 <div class="card-header-bg aspect-ratio aspect-ratio-4-3">
589 <#if relatedImmagineBannerId gt 0>
590 <@adaptive_media_image["img"]
591 alt=relatedTestoAlternativoImmagineBanner
592 fileVersion=dlAppServiceUtil.getFileEntry(relatedImmagineBannerId).getFileVersion()/>
593 </#if>
594 </div>
595 <button class="link link-tripplanner link-tripplanner-top-right margin-top-em-2 margin-right-em-1 link-tripplanner-styled"
596 aria-label="aggiungi/elimina dal tuo viaggio"
597 href="/-/${related.getUrlTitle(locale)}"
598 data-id="${related.getArticleId()}" data-tom="false">
599 <i class="far fa-heart text-red" data-prefix="far"></i>
600 <i class="fas fa-heart text-red" data-prefix="fas" style="display:none;"></i>
601 </button>
602 <div class="card-header-info">
603 <#list categoryNames as categoryName>
604 <div class="badge badge-trasparent-white">
605 ${categoryName}
606 </div>
607 <div class="hidden" id="tagmanager_item_">
608 <span id="tagmanager_item_id">${related.getArticleId()}</span>
609 <span id="tagmanager_item_category">${categoryName}</span>
610 <span id="tagmanager_item_name">${relatedTitolo}</span>
611 <span id="tagmanager_item_list_name">${titleCategory}</span>
612 <span id="tagmanager_item_list_id"></span>
613 <span id="tagmanager_item_brand">${categoryName}</span>
614 <span id="tagmanager_index">${related_index}</span>
615 </div>
616 </#list>
617 </div>
618 </div>
619 <div class="card-body">
620 <a class="card-body-title title-4" href="/-/${related.getUrlTitle(locale)}">
621 ${relatedTitolo}
622 </a>
623 <div class="card-body-subtitle">
624 ${relatedSottotitolo}
625 </div>
626 </div>
627 <div class="card-info mt-4">
628 </div>
629 </div>
630 </div>
631 <#assign categoryNames = [] >
632 <#assign categories = [] >
633 </#list>
634 </div>
635 </div>
636 </div>
637
638 </div>
639 </aside>
640 </div>
641 </div>
642</#if>
643<!-- Go to www.addthis.com/dashboard to customize your tools -->
644<script type="text/javascript" src="//s7.addthis.com/js/300/addthis_widget.js#pubid=ra-5c629e6303f68c9f"></script>