An error occurred while processing the template.
The following has evaluated to null or missing:
==> assetRenderer.getURLViewInContext(themeDisplay, null) [in template "20096#20122#8022999" at line 436, column 52]
----
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: #assign viewURL = assetRenderer.getUR... [in template "20096#20122#8022999" at line 436, column 33]
----
1<!--AECID-CC-Eventos-->
2
3<style>
4 .estado {
5 -webkit-border-radius: 10px;
6 -moz-border-radius: 10px;
7 border-radius: 10px;
8 padding: .28rem .556rem;
9 display: block;
10 width: fit-content;
11 min-width: 7.4rem;
12 text-align: center;
13 }
14 .estado.neutro {
15 background-color: var(--gris-fondo);
16 }
17 .estado.verde {
18 background-color: #a4cb23;
19 color:#ffffff;
20 }
21 .estado.azul {
22 background-color: #4fc0fd;
23 color:#ffffff;
24 }
25 .estado.naranja {
26 background-color: #f39918;
27 color:#ffffff;
28 }
29 .estado.amarillo {
30 background-color: #feb71b;
31 color:#ffffff;
32 }
33 .estado.rojo {
34 background-color: #de0032;
35 color:#ffffff;
36 }
37 .estado.morado {
38 background-color: #540081;
39 color:#ffffff;
40 }
41
42 .Caja-bordeada-gris {
43 border: 2px solid #999999;
44 }
45
46 .Accesibilidad {background-color: #09861e; color:#ffffff;}
47 .Artes {background-color: #f5bce9; color:#ffffff;}
48 .Ciencia {background-color: #034ea2; color:#ffffff;}
49 .Cine {background-color: #540081; color:#ffffff;}
50 .Ciudadania {background-color: #33b6ba; color:#ffffff;}
51 .Cultura {background-color: #7d2721; color:#ffffff;}
52 .Debate {background-color: #8f98dc; color:#ffffff;}
53 .Diversidad {background-color: #ca09f1; color:#ffffff;}
54 .Escenicas {background-color: #f5c109; color:#ffffff;}
55 .Examenes {background-color: #ec0909; color:#ffffff;}
56 .Exposiciones {background-color: #000000; color:#ffffff;}
57 .Formacion {background-color: #e01451; color:#ffffff;}
58 .Infantil {background-color: #a4cb22; color:#ffffff;}
59 .Letras {background-color: #f39918; color:#ffffff;}
60 .Mediacion {background-color: #e5de8a; color:#ffffff;}
61 .Medioambiente {background-color: #3ec11a; color:#ffffff;}
62 .Musica {background-color: #4fc0fd; color:#ffffff;}
63 .Patrimonio {background-color: #d12929; color:#ffffff;}
64 .Radio {background-color: #f462d4; color:#ffffff;}
65
66</style>
67
68<#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") />
69<#assign journalArticleResourceLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleResourceLocalService") />
70<#assign assetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService") />
71<#assign assetVocabularyLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetVocabularyLocalService") />
72
73<#assign articleId = .vars['reserved-article-id'].data />
74<#assign journalArticleResourceLocalServiceUtil = staticUtil["com.liferay.journal.service.JournalArticleResourceLocalServiceUtil"]>
75<#assign assetCategoryLocalServiceUtil = staticUtil["com.liferay.asset.kernel.service.AssetCategoryLocalServiceUtil"]>
76<#assign articleResourcePK = journalArticleResourceLocalServiceUtil.getArticleResourcePrimKey(groupId, articleId)/>
77<!-- configurarlo desde el panel de control -> configuracion -> configuracion del sistema -> motores de plantilla (eliminar servicelocator de variables restringidas) -->
78<#assign assetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService")>
79<#--${assetEntryLocalService}-->
80<#assign assetEntryId = assetEntryLocalService.getEntry("com.liferay.journal.model.JournalArticle", articleResourcePK).getEntryId() />
81
82<!---------------------------------------------------------------------------->
83<!-- Obtener el servicio para obtener los id de los contenidos relacionados -->
84<!---------------------------------------------------------------------------->
85<#assign assetLinkLocalService = serviceLocator.findService("com.liferay.asset.link.service.AssetLinkLocalService")>
86<#assign assetEntry = assetEntryLocalService.getEntry("com.liferay.journal.model.JournalArticle", articleResourcePK)>
87<#assign assetLinks = assetLinkLocalService.getDirectLinks(assetEntry.getEntryId())>
88<!---------------------------------------------------------------------------->
89<!---------------------------------------------------------------------------->
90
91
92<#assign urlCodec = staticUtil["com.liferay.portal.kernel.util.URLCodec"] />
93<#assign htmlParserUtil = staticUtil["com.liferay.portal.kernel.util.HtmlParserUtil"] />
94<#assign htmlUtil = staticUtil["com.liferay.portal.kernel.util.HtmlUtil"] />
95
96<#function getJournalPriorityByArticleId articleId>
97 <#attempt>
98 <#local resourcePrimKey = journalArticleResourceLocalService.getArticleResourcePrimKey(themeDisplay.getScopeGroupId(), articleId) />
99 <#local assetEntry = assetEntryLocalService.getEntry("com.liferay.journal.model.JournalArticle", resourcePrimKey) />
100 <#return assetEntry.getPriority() />
101 <#recover>
102 </#attempt>
103 <#return "" />
104</#function>
105
106<#function getJournalPriority>
107 <#attempt>
108 <#return getJournalPriorityByArticleId(.vars['reserved-article-id'].data) />
109 <#recover>
110 </#attempt>
111 <#return "" />
112</#function>
113
114
115<#function getGroupVocabularyByName groupId vocabularyName >
116 <#attempt>
117 <#local vocabulary = assetVocabularyLocalService.getGroupVocabulary(groupId, vocabularyName) />
118 <#return vocabulary />
119 <#recover>
120 </#attempt>
121 <#return "" />
122</#function>
123
124<#function getCategoriesJournalArticle groupId articleId >
125 <#attempt>
126 <#local resourcePrimKey = journalArticleResourceLocalService.getArticleResourcePrimKey(groupId, articleId) />
127 <#local categories = assetCategoryLocalService.getCategories("com.liferay.journal.model.JournalArticle", resourcePrimKey) />
128 <#return categories />
129 <#recover>
130 </#attempt>
131 <#return "" />
132</#function>
133
134<#function obtenerCategoriasVocabulario articleId vocabularyId>
135 <#local categories = [] />
136 <#attempt>
137 <#local categoriesJ = getCategoriesJournalArticle(groupId, articleId) />
138 <#if categoriesJ?has_content && categoriesJ?size gt 0>
139 <#list categoriesJ as categoryA>
140 <#if categoryA.getVocabularyId() == vocabularyId >
141 <#local categories = categories + [categoryA] />
142 </#if>
143 </#list>
144 </#if>
145 <#recover>
146 </#attempt>
147 <#return categories />
148</#function>
149
150<#function obtenerCategoriasVocabularioNombre articleId vocabularyName>
151 <#local vocabulary = getGroupVocabularyByName(groupId, vocabularyName) />
152 <#return obtenerCategoriasVocabulario(articleId, vocabulary.getVocabularyId()) />
153</#function>
154
155
156
157<#function removeUrlParams url>
158 <#if url?contains("?") >
159 <#return url?substring(0, url?index_of("?")) />
160 </#if>
161 <#return url/>
162</#function>
163
164
165<#assign twitterAccount = ""/>
166<!-- valida también si no viene a null -->
167<#assign customFieldValue = themeDisplay.getSiteGroup().getExpandoBridge().getAttribute("AccountTwitter")!"">
168<#assign twitterAccount = customFieldValue/>
169<!--<p>--${twitterAccount}</p>-->
170
171<#assign URLPortal = themeDisplay.getURLPortal() />
172<#assign URLCurrent = themeDisplay.getURLCurrent() />
173<#assign URLComplete = URLPortal + URLCurrent />
174<#assign URLCompleteNoParams = removeUrlParams(URLComplete) />
175
176
177<!-- El id de las categorÃas de Categorias CC -->
178<!--<#assign vocabularyId = 1682640 />-->
179<#assign vocabularyId = 7623391 />
180
181
182
183<div class="container px-3 px-lg-0">
184 <#assign titulo = .vars['reserved-article-title'].data />
185 <div class="col-2-1-d">
186 <div class="col-izq">
187 <h1 class="tit-h3 txt-bold txt-primario mb-2">
188 <#-- Titulo del evento -->
189 <#if (title.getData())??>
190 ${title.getData()}
191 </#if>
192 </h1>
193 <#if (Subtitulo.getData())?? && Subtitulo.getData() != "">
194 <h2 class="tit-h4">${Subtitulo.getData()}</h2>
195 </#if>
196 <#if (image.getData())?? && image.getData() != "">
197 <#assign imgAltGS = image.getAttribute('alt')/>
198 <#if imgAltGS == "">
199 <#assign imgAltGS = title.getData()/>
200 </#if>
201 <img class="rounded mb-3" alt="${imgAltGS?truncate(150, '...')}" ${(imgAltGS?length > 150)?then('longdesc="' + imgAltGS + '"', '')} data-fileentryid="${image.getAttribute('fileEntryId')}" src="${image.getData()}" />
202 </#if>
203 <#--<#if (descripcionActualidadNoticia.getData())??>
204 <p>${descripcionActualidadNoticia.getData()}</p>
205 </#if>-->
206
207 </div>
208 <div class="col-content">
209 <#if (mainText.getData())??>
210 ${mainText.getData()}
211 </#if>
212
213 <#if (Poster.getData())?? && Poster.getData() != "">
214 <#if (VideoMP4.getData())?? && VideoMP4.getData() != "">
215
216 <div class="embed-responsive embed-responsive-16by9 bdr-radius">
217 <video controls="" poster="${Poster.getData()}">
218 <source src="${VideoMP4.getData()}" type="video/mp4" /> Su navegador no soporta la etiqueta de vídeo.
219 </video>
220 </div>
221
222 </#if>
223 </#if>
224
225 </div>
226
227 <div class="col-der">
228 <dl>
229 <!-- Categoria -->
230
231
232 <#assign categoryList=assetCategoryLocalServiceUtil.getCategories("com.liferay.journal.model.JournalArticle",articleResourcePK)>
233
234 <#assign PrimeraCategoria = 0 >
235 <#list categoryList as categoryList>
236
237 <#if categoryList?? && categoryList.getVocabularyId() == vocabularyId>
238 <#assign PrimeraCategoria = PrimeraCategoria + 1>
239 <#if PrimeraCategoria == 1>
240 <dt class="tit-h5 txt-uppercase txt-medi mb-2">Categoría</dt>
241 </#if>
242
243
244 <#assign categoriaFiltrada = categoryList.getName()>
245 <#assign categoriaFiltrada = categoriaFiltrada?trim>
246
247 <#switch categoriaFiltrada>
248 <#case "Accesibilidad / Inclusión">
249 <dd class="txt-uppercase"><span class="estado Accesibilidad">${categoriaFiltrada}</span></dd>
250 <#break>
251 <#case "Artes Visuales">
252 <dd class="txt-uppercase"><span class="estado Artes">${categoriaFiltrada}</span></dd>
253 <#break>
254 <#case "Ciencia / Tecnología">
255 <dd class="txt-uppercase"><span class="estado Ciencia">${categoriaFiltrada}</span></dd>
256 <#break>
257 <#case "Cine / Audiovisual">
258 <dd class="txt-uppercase"><span class="estado Cine">${categoriaFiltrada}</span></dd>
259 <#break>
260 <#case "Ciudadanía / Comunidad">
261 <dd class="txt-uppercase"><span class="estado Ciudadania">${categoriaFiltrada}</span></dd>
262 <#break>
263 <#case "Cultura para el Desarrollo">
264 <dd class="txt-uppercase"><span class="estado Cultura">${categoriaFiltrada}</span></dd>
265 <#break>
266 <#case "Debate / Pensamiento">
267 <dd class="txt-uppercase"><span class="estado Debate">${categoriaFiltrada}</span></dd>
268 <#break>
269 <#case "Diversidad / Géneros">
270 <dd class="txt-uppercase"><span class="estado Diversidad">${categoriaFiltrada}</span></dd>
271 <#break>
272 <#case "Escénicas">
273 <dd class="txt-uppercase"><span class="estado Escenicas">${categoriaFiltrada}</span></dd>
274 <#break>
275 <#case "Exámenes de español">
276 <dd class="txt-uppercase"><span class="estado Examenes">${categoriaFiltrada}</span></dd>
277 <#break>
278 <#case "Exposiciones">
279 <dd class="txt-uppercase"><span class="estado Exposiciones">${categoriaFiltrada}</span></dd>
280 <#break>
281 <#case "Formación">
282 <dd class="txt-uppercase"><span class="estado Formacion">${categoriaFiltrada}</span></dd>
283 <#break>
284 <#case "Infantil / Juvenil">
285 <dd class="txt-uppercase"><span class="estado Infantil">${categoriaFiltrada}</span></dd>
286 <#break>
287 <#case "Letras">
288 <dd class="txt-uppercase"><span class="estado Letras">${categoriaFiltrada}</span></dd>
289 <#break>
290 <#case "Mediación">
291 <dd class="txt-uppercase"><span class="estado Mediacion">${categoriaFiltrada}</span></dd>
292 <#break>
293 <#case "Medioambiente / Sostenibilidad">
294 <dd class="txt-uppercase"><span class="estado Medioambiente">${categoriaFiltrada}</span></dd>
295 <#break>
296 <#case "Música / Sonido">
297 <dd class="txt-uppercase"><span class="estado Musica">${categoriaFiltrada}</span></dd>
298 <#break>
299 <#case "Patrimonio">
300 <dd class="txt-uppercase"><span class="estado Patrimonio">${categoriaFiltrada}</span></dd>
301 <#break>
302 <#case "Radio / Pódcast">
303 <dd class="txt-uppercase"><span class="estado Radio">${categoriaFiltrada}</span></dd>
304 <#break>
305 <#default>
306 <dd class="txt-uppercase"><span class="estado neutro">${categoriaFiltrada}</span></dd>
307 <#break>
308 </#switch>
309 </#if>
310
311 </#list>
312
313 <#--<p class="eti-cat">${getJournalPriority()} -
314 <#assign categorias = obtenerCategoriasVocabularioNombre(.vars['reserved-article-id'].data, "Categorias AECID") />
315 <#if categorias?has_content && categorias?size gt 0>
316 ${categorias[0].getName()}
317 </#if>
318 </p>-->
319
320 <!---------------------------------------------------------------------------------------------------->
321 <!-- Si el campo de fechas repetido tiene contenido solo se pinta dichas fechas una detras de otra -->
322 <!-- si no tiene información se pintará la información de las fechas desde y hasta -->
323 <!---------------------------------------------------------------------------------------------------->
324 <#if Fechas.getSiblings()?has_content && Fechas.getSiblings()??>
325 <#if Fechas.getSiblings()?size gt 0 && Fechas.getSiblings()[0].getData() != "">
326 <dt class="tit-h5 txt-uppercase txt-medi mb-2">Fecha</dt>
327 <dd class="txt-uppercase">
328 <#list Fechas.getSiblings() as cur_Fechas>
329 <#assign cur_Fechas_Data = getterUtil.getString(cur_Fechas.getData())>
330
331 <#if validator.isNotNull(cur_Fechas_Data)>
332 <#assign cur_Fechas_DateObj = dateUtil.parseDate("yyyy-MM-dd", cur_Fechas_Data, locale)>
333
334 ${dateUtil.getDate(cur_Fechas_DateObj, "dd MMMM yyyy", locale)}<br>
335 </#if>
336
337 </#list>
338 </dd>
339 <#else>
340 <!-- Fecha desde/hasta -->
341 <#assign startDate_Data = getterUtil.getString(startDate.getData())>
342 <#assign endDate_Data = getterUtil.getString(endDate.getData())>
343 <#if validator.isNotNull(startDate_Data) && validator.isNotNull(endDate_Data)>
344 <#assign startDate_DateObj = dateUtil.parseDate("yyyy-MM-dd", startDate_Data, locale)>
345 <#assign endDate_DateObj = dateUtil.parseDate("yyyy-MM-dd", endDate_Data, locale)>
346 <dt class="tit-h5 txt-uppercase txt-medi mb-2">Fecha</dt>
347 <dd class="txt-uppercase">
348 <!-- Si la fecha desde es igual a la fecha hasta solo se pinta la fecha desde -->
349 <#if startDate_Data == endDate_Data>
350 ${dateUtil.getDate(startDate_DateObj, "dd MMMM yyyy", locale)}
351 <#else>
352 ${dateUtil.getDate(startDate_DateObj, "dd MMMM yyyy", locale)} - ${dateUtil.getDate(endDate_DateObj, "dd MMMM yyyy", locale)}
353 </#if>
354 </dd>
355 </#if>
356 </#if>
357 </#if>
358
359
360 <!-- Campo horario -->
361 <#if (schedule.getData())?? && (schedule.getData())?has_content>
362 <dt class="tit-h5 txt-uppercase txt-medi mb-2">Horario</dt>
363 <dd class="txt-uppercase"><span class="estado-neutro">${schedule.getData()}</span></dd>
364 </#if>
365
366 <!-- Lugar -->
367 <#if (Lugares.getData())?? && (Lugares.getData())?has_content>
368 <dt class="tit-h5 txt-uppercase txt-medi mb-2">Lugar</dt>
369 <dd class="txt-uppercase"><span class="estado-neutro">${Lugares.getData()}</span></dd>
370 </#if>
371
372 <!-- Colaborador -->
373 <#if (Colaborador.getData())?? && (Colaborador.getData())?has_content>
374 <dt class="tit-h5 txt-uppercase txt-medi mb-2">Colaboramos con</dt>
375 <dd class="txt-uppercase"><span class="estado-neutro">${Colaborador.getData()}</span></dd>
376 </#if>
377
378 <!-- Cupo -->
379 <#if (Cupo.getData())?? && (Cupo.getData())?has_content>
380 <dt class="tit-h5 txt-uppercase txt-medi mb-2">Cupo</dt>
381 <dd class="txt-uppercase">${Cupo.getData()}</dd>
382 </#if>
383
384 <!-- Organizador -->
385 <#if (Organizador.getData())?? && (Organizador.getData())?has_content>
386 <dt class="tit-h5 txt-uppercase txt-medi mb-2">Organizamos con</dt>
387 <dd class="txt-uppercase">${Organizador.getData()}</dd>
388 </#if>
389
390 <!-- Cierre de inscripciones -->
391 <#assign CierreDeInscripciones_Data = getterUtil.getString(CierreDeInscripciones.getData())>
392 <#if validator.isNotNull(CierreDeInscripciones_Data)>
393 <#assign CierreDeInscripciones_DateObj = dateUtil.parseDate("yyyy-MM-dd", CierreDeInscripciones_Data, locale)>
394 <dt class="tit-h5 txt-uppercase txt-medi mb-2">Cierre de inscripciones</dt>
395 <dd class="txt-uppercase">${dateUtil.getDate(CierreDeInscripciones_DateObj, "dd 'DE' MMMM 'DE' yyyy", locale)}</dd>
396 </#if>
397
398 <!-- Publicacion de admision -->
399 <#assign PublicacionDeAdmision_Data = getterUtil.getString(PublicacionDeAdmision.getData())>
400 <#if validator.isNotNull(PublicacionDeAdmision_Data)>
401 <#assign PublicacionDeAdmision_DateObj = dateUtil.parseDate("yyyy-MM-dd", PublicacionDeAdmision_Data, locale)>
402 <dt class="tit-h5 txt-uppercase txt-medi mb-2">Publicacion de Admision</dt>
403 <dd class="txt-uppercase">${dateUtil.getDate(PublicacionDeAdmision_DateObj, "dd 'DE' MMMM 'DE' yyyy", locale)}</dd>
404 </#if>
405
406 <div id="redes-sociales-share-container" class="mt-4">
407 <@compartirRedesSocialesImprimir text=titulo />
408 </div>
409 </dl>
410 </div>
411 </div>
412
413 <!---------------------------------------->
414 <!-- Pinta los contenidos relacionados -->
415 <!---------------------------------------->
416 <#if assetLinks?? && assetLinks?has_content>
417 <h2 class="mt-3">Contenido relacionado</h2>
418 <div class=" mt-5 cont-convo"> <!--fd-gris-fondo py-50 py-lg-100-->
419 <div class="container px-3 px-lg-0">
420 <div class="content-cards cols-items-4">
421 <#list assetLinks as assetLink>
422 <#-- Obtenemos el AssetEntry relacionado (el "to" de la relación) -->
423 <#assign relatedAssetEntry = assetEntryLocalService.getEntry(assetLink.getEntryId2())>
424
425 <#-- Obtenemos el JournalArticle si el contenido relacionado también es un WebContent -->
426 <#if relatedAssetEntry.getClassName() == "com.liferay.journal.model.JournalArticle">
427 <#assign journalArticle = journalArticleLocalService.getLatestArticle(relatedAssetEntry.getClassPK())>
428
429 <!----------------------------->
430 <!-- Para obtener el ViewURL -->
431 <!----------------------------->
432 <#setting url_escaping_charset='UTF-8'>
433 <#assign viewURLWithRedirect = "">
434 <#assign assetRenderer = relatedAssetEntry.getAssetRenderer()>
435 <#if themeDisplay??>
436 <#assign viewURL = assetRenderer.getURLViewInContext(themeDisplay, null)>
437 <#assign redirectURL = themeDisplay.getURLCurrent()>
438 <#assign viewURLWithRedirect = viewURL + (viewURL?contains("?")?then("&", "?")) + "redirect=" + redirectURL?url>
439 <#--<a href="${viewURLWithRedirect}">${assetRenderer.getTitle(locale)}</a>-->
440 <#-- <#else>
441 <span>${assetRenderer.getTitle(locale)}</span>-->
442 </#if>
443
444 <!-- Obtener los campos necesarios para pintar los campos del contenido relacionado -->
445 <#assign document = saxReaderUtil.read(journalArticle.getContentByLocale(locale))>
446 <#assign rootElement = document.getRootElement()>
447 <#assign dynamicElements = rootElement.elements("dynamic-element")>
448
449 <#list dynamicElements as element>
450 <!--<p class="sr-only"> entra ${element.attributeValue("name")}</p>-->
451 <#if element.attributeValue("name") == "Image46184462">
452 <#assign imgGS = element.element("dynamic-content").getText()>
453 <#if imgGS?? && imgGS != "" && imgGS?trim != "{}">
454 <#assign imgUuidGS = imgGS?eval.uuid!"" />
455 </#if>
456 <#if imgUuidGS?has_content>
457 <#assign imgNameGS = imgGS?eval.title />
458 <#assign imgGroupIdGS = imgGS?eval.groupId />
459 <#assign imgAltGS = imgGS?eval.alt/>
460 </#if>
461 </#if>
462
463 <#if element.attributeValue("name") == "Date80828384">
464 <#assign fechaIni = element.element("dynamic-content").getText()>
465 </#if>
466
467 <#if element.attributeValue("name") == "Date51740027">
468 <#assign fechaFin = element.element("dynamic-content").getText()>
469 </#if>
470 </#list>
471 <div class="mb-4 mb-xl-0 cardReco d-flex flex-column justify-content-between parentAssetViewUrl Caja-bordeada-gris">
472 <div class="h-100 d-flex flex-column gap-1r position-relative">
473 <div class="p-0">
474 <#if imgUuidGS?has_content>
475 <div class="card-reco-img-container">
476 <img class="w-100" alt="${imgAltGS}" src="/documents/${imgGroupIdGS}/0/${imgNameGS}/${imgUuidGS}" />
477 </div>
478 <#else>
479 <div class="card-reco-img-container">
480 <img class="w-100" alt="Logo de Cooperacion Española" src="/documents/d/${themeDisplay.getScopeGroup().getFriendlyURL()}/generica" />
481 </div>
482 </#if>
483 </div>
484 <div class="fecha-rango mt-2">
485 <#assign startDate_Data = getterUtil.getString(fechaIni)>
486 <#assign endDate_Data = getterUtil.getString(fechaFin)>
487 <#if startDate_Data?? && endDate_Data??>
488 <#assign startDate_DateObj = dateUtil.parseDate("yyyy-MM-dd", startDate_Data, locale)>
489 <#assign endDate_DateObj = dateUtil.parseDate("yyyy-MM-dd", endDate_Data, locale)>
490 <#if startDate_Data == endDate_Data>
491 ${dateUtil.getDate(startDate_DateObj, "dd MMMM yyyy", locale)}
492 <#else>
493 Desde ${dateUtil.getDate(startDate_DateObj, "dd MMMM yyyy", locale)} hasta ${dateUtil.getDate(endDate_DateObj, "dd MMMM yyyy", locale)}
494 </#if>
495 </#if>
496 </div>
497 <div class="card-text-cont">
498 <a class="title elipsis-3 enlace-total" href="${viewURLWithRedirect}" title="Ir a la recomendacion ${journalArticle.getTitle(locale)}"> ${journalArticle.getTitle(locale)}</a>
499 </div>
500 </div>
501 <div class="d-flex gap-1r flex-wrap">
502 <#-- Obtener el AssetEntry del contenido relacionado -->
503 <#assign assetEntry = assetEntryLocalService.getEntry("com.liferay.journal.model.JournalArticle", journalArticle.getResourcePrimKey()) />
504
505 <#-- Obtener las categorías -->
506 <#assign categoryIds = assetEntry.getCategoryIds() />
507 <#assign categories = [] />
508 <#list categoryIds as categoryId>
509 <#assign category = assetCategoryLocalService.fetchAssetCategory(categoryId) />
510 <#if category?? && category.getVocabularyId() == vocabularyId>
511 <#assign categories += [category] />
512 </#if>
513 </#list>
514
515 <#if categories?has_content>
516 <#list categories as category>
517
518 <#assign cat = category.getName() />
519
520 <#assign portalURL = themeDisplay.portalURL>
521 <#assign currentPageName = themeDisplay.layout.name>
522 <#assign siteFriendlyURL = themeDisplay.getScopeGroup().getFriendlyURL()>
523 <#assign siteName = siteFriendlyURL?substring(1)>
524 <#assign URLCategoria = portalURL + "/web/" + siteName + "/detalle-categorias/-/categories/" + category.getCategoryId()>
525
526 <#switch cat>
527 <#case "Accesibilidad / Inclusión">
528 <a class="cat-reco Accesibilidad" href="${URLCategoria}" title="Filtar Por ${cat}">${cat}</a>
529 <#break>
530 <#case "Artes Visuales">
531 <a class="cat-reco Artes" href="${URLCategoria}" title="Filtar Por ${cat}">${cat}</a>
532 <#break>
533 <#case "Ciencia / Tecnología">
534 <a class="cat-reco Ciencia" href="${URLCategoria}" title="Filtar Por ${cat}">${cat}</a>
535 <#break>
536 <#case "Cine / Audiovisual">
537 <a class="cat-reco Cine" href="${URLCategoria}" title="Filtar Por ${cat}">${cat}</a>
538 <#break>
539 <#case "Ciudadanía / Comunidad">
540 <a class="cat-reco Ciudadania" href="${URLCategoria}" title="Filtar Por ${cat}">${cat}</a>
541 <#break>
542 <#case "Cultura para el Desarrollo">
543 <a class="cat-reco Cultura" href="${URLCategoria}" title="Filtar Por ${cat}">${cat}</a>
544 <#break>
545 <#case "Debate / Pensamiento">
546 <a class="cat-reco Debate" href="${URLCategoria}" title="Filtar Por ${cat}">${cat}</a>
547 <#break>
548 <#case "Diversidad / Géneros">
549 <a class="cat-reco Diversidad" href="${URLCategoria}" title="Filtar Por ${cat}">${cat}</a>
550 <#break>
551 <#case "Escénicas">
552 <a class="cat-reco Escenicas" href="${URLCategoria}" title="Filtar Por ${cat}">${cat}</a>
553 <#break>
554 <#case "Exámenes de español">
555 <a class="cat-reco Examenes" href="${URLCategoria}" title="Filtar Por ${cat}">${cat}</a>
556 <#break>
557 <#case "Exposiciones">
558 <a class="cat-reco Exposiciones" href="${URLCategoria}" title="Filtar Por ${cat}">${cat}</a>
559 <#break>
560 <#case "Formación">
561 <a class="cat-reco Formacion" href="${URLCategoria}" title="Filtar Por ${cat}">${cat}</a>
562 <#break>
563 <#case "Infantil / Juvenil">
564 <a class="cat-reco Infantil" href="${URLCategoria}" title="Filtar Por ${cat}">${cat}</a>
565 <#break>
566 <#case "Letras">
567 <a class="cat-reco Letras" href="${URLCategoria}" title="Filtar Por ${cat}">${cat}</a>
568 <#break>
569 <#case "Mediación">
570 <a class="cat-reco Mediacion" href="${URLCategoria}" title="Filtar Por ${cat}">${cat}</a>
571 <#break>
572 <#case "Medioambiente / Sostenibilidad">
573 <a class="cat-reco Medioambiente" href="${URLCategoria}" title="Filtar Por ${cat}">${cat}</a>
574 <#break>
575 <#case "Música / Sonido">
576 <a class="cat-reco Musica" href="${URLCategoria}" title="Filtar Por ${cat}">${cat}</a>
577 <#break>
578 <#case "Patrimonio">
579 <a class="cat-reco Patrimonio" href="${URLCategoria}" title="Filtar Por ${cat}">${cat}</a>
580 <#break>
581 <#case "Radio / Pódcast">
582 <a class="cat-reco Radio" href="${URLCategoria}" title="Filtar Por ${cat}">${cat}</a>
583 <#break>
584
585 <#default>
586 <a class="cat-reco cat-neg" href="${URLCategoria}" title="Filtar Por ${cat}">${cat}</a>
587 <#break>
588 </#switch>
589 </#list>
590 </#if>
591 </div>
592 </div>
593 </#if>
594 </#list>
595 </div>
596 </div>
597 </div>
598 </#if>
599</div>
600
601<#macro compartirRedesSocialesImprimir url=URLCompleteNoParams text="" twitter=true facebook=true>
602
603 <#local urlEncoded = urlCodec.encodeURL(url) />
604
605 <#local textF= text />
606 <#if text?has_content >
607 <#local textF= htmlParserUtil.extractText(text)?trim />
608 </#if>
609
610 <!-- TWITTER -->
611 <#if twitter>
612 <#local twitterShareURL = "https://x.com/intent/tweet?url=" + urlEncoded />
613 <#if textF?has_content >
614 <#local textTwitter = textF?truncate(280, '...') />
615 <#local textTwitter = urlCodec.encodeURL(textTwitter) />
616 <#local twitterShareURL = twitterShareURL + "&text=" + textTwitter + "%0a%0a" />
617 </#if>
618 <#local twitterShareURL = twitterShareURL + "&via=" + twitterAccount />
619 </#if>
620 <#-- // -->
621
622 <#-- FACEBOOK -->
623 <#if facebook>
624 <#local facebookShareURL = "https://www.facebook.com/sharer/sharer.php?u=" + urlEncoded />
625 <#if textF?has_content >
626 <#local textFacebook = urlCodec.encodeURL(textF) />
627 <#local facebookShareURL = facebookShareURL + ""e=" + textFacebook />
628 </#if>
629 </#if>
630 <#-- // -->
631
632 <dt class="tit-h5 txt-uppercase txt-medi mb-2">Compartir</dt>
633 <dd>
634 <#if facebookShareURL?has_content >
635 <a class="no-ico" href="${facebookShareURL}" target="_blank" title="Compartir en facebook">
636 <img alt="icono facebook" src="/o/aecid-oces-theme/images/ico-facebook.svg" /></a>
637 </#if>
638
639 <#if twitterShareURL?has_content >
640 <a class="ml-2 no-ico" href="${twitterShareURL}" target="_blank" title="Compartir en X">
641 <img alt="icono X" src="/o/aecid-oces-theme/images/ico-x.svg" /></a>
642 </#if>
643 </dd>
644</#macro>