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 432, 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 432, column 33] ----
1<!--AECID-CC-Evento-->
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 <img class="rounded mb-3" alt="${(image.getAttribute('alt')?html)!''}" data-fileentryid="${image.getAttribute('fileEntryId')}" src="${image.getData()}" />
198 </#if>
199 <#--<#if (descripcionActualidadNoticia.getData())??>
200 <p>${descripcionActualidadNoticia.getData()}</p>
201 </#if>-->
202
203 </div>
204 <div class="col-content">
205 <#if (mainText.getData())??>
206 ${mainText.getData()}
207 </#if>
208
209 <#if (Poster.getData())?? && Poster.getData() != "">
210 <#if (VideoMP4.getData())?? && VideoMP4.getData() != "">
211
212 <div class="embed-responsive embed-responsive-16by9 bdr-radius">
213 <video controls="" poster="${Poster.getData()}">
214 <source src="${VideoMP4.getData()}" type="video/mp4" /> Su navegador no soporta la etiqueta de vídeo.
215 </video>
216 </div>
217
218 </#if>
219 </#if>
220
221 </div>
222
223 <div class="col-der">
224 <dl>
225 <!-- Categoria -->
226
227
228 <#assign categoryList=assetCategoryLocalServiceUtil.getCategories("com.liferay.journal.model.JournalArticle",articleResourcePK)>
229
230 <#assign PrimeraCategoria = 0 >
231 <#list categoryList as categoryList>
232
233 <#if categoryList?? && categoryList.getVocabularyId() == vocabularyId>
234 <#assign PrimeraCategoria = PrimeraCategoria + 1>
235 <#if PrimeraCategoria == 1>
236 <dt class="tit-h5 txt-uppercase txt-medi mb-2">Categoría</dt>
237 </#if>
238
239
240 <#assign categoriaFiltrada = categoryList.getName()>
241 <#assign categoriaFiltrada = categoriaFiltrada?trim>
242
243 <#switch categoriaFiltrada>
244 <#case "Accesibilidad / Inclusión">
245 <dd class="txt-uppercase"><span class="estado Accesibilidad">${categoriaFiltrada}</span></dd>
246 <#break>
247 <#case "Artes Visuales">
248 <dd class="txt-uppercase"><span class="estado Artes">${categoriaFiltrada}</span></dd>
249 <#break>
250 <#case "Ciencia / Tecnología">
251 <dd class="txt-uppercase"><span class="estado Ciencia">${categoriaFiltrada}</span></dd>
252 <#break>
253 <#case "Cine / Audiovisual">
254 <dd class="txt-uppercase"><span class="estado Cine">${categoriaFiltrada}</span></dd>
255 <#break>
256 <#case "Ciudadanía / Comunidad">
257 <dd class="txt-uppercase"><span class="estado Ciudadania">${categoriaFiltrada}</span></dd>
258 <#break>
259 <#case "Cultura para el Desarrollo">
260 <dd class="txt-uppercase"><span class="estado Cultura">${categoriaFiltrada}</span></dd>
261 <#break>
262 <#case "Debate / Pensamiento">
263 <dd class="txt-uppercase"><span class="estado Debate">${categoriaFiltrada}</span></dd>
264 <#break>
265 <#case "Diversidad / Géneros">
266 <dd class="txt-uppercase"><span class="estado Diversidad">${categoriaFiltrada}</span></dd>
267 <#break>
268 <#case "Escénicas">
269 <dd class="txt-uppercase"><span class="estado Escenicas">${categoriaFiltrada}</span></dd>
270 <#break>
271 <#case "Exámenes de español">
272 <dd class="txt-uppercase"><span class="estado Examenes">${categoriaFiltrada}</span></dd>
273 <#break>
274 <#case "Exposiciones">
275 <dd class="txt-uppercase"><span class="estado Exposiciones">${categoriaFiltrada}</span></dd>
276 <#break>
277 <#case "Formación">
278 <dd class="txt-uppercase"><span class="estado Formacion">${categoriaFiltrada}</span></dd>
279 <#break>
280 <#case "Infantil / Juvenil">
281 <dd class="txt-uppercase"><span class="estado Infantil">${categoriaFiltrada}</span></dd>
282 <#break>
283 <#case "Letras">
284 <dd class="txt-uppercase"><span class="estado Letras">${categoriaFiltrada}</span></dd>
285 <#break>
286 <#case "Mediación">
287 <dd class="txt-uppercase"><span class="estado Mediacion">${categoriaFiltrada}</span></dd>
288 <#break>
289 <#case "Medioambiente / Sostenibilidad">
290 <dd class="txt-uppercase"><span class="estado Medioambiente">${categoriaFiltrada}</span></dd>
291 <#break>
292 <#case "Música / Sonido">
293 <dd class="txt-uppercase"><span class="estado Musica">${categoriaFiltrada}</span></dd>
294 <#break>
295 <#case "Patrimonio">
296 <dd class="txt-uppercase"><span class="estado Patrimonio">${categoriaFiltrada}</span></dd>
297 <#break>
298 <#case "Radio / Pódcast">
299 <dd class="txt-uppercase"><span class="estado Radio">${categoriaFiltrada}</span></dd>
300 <#break>
301 <#default>
302 <dd class="txt-uppercase"><span class="estado neutro">${categoriaFiltrada}</span></dd>
303 <#break>
304 </#switch>
305 </#if>
306
307 </#list>
308
309 <#--<p class="eti-cat">${getJournalPriority()} -
310 <#assign categorias = obtenerCategoriasVocabularioNombre(.vars['reserved-article-id'].data, "Categorias AECID") />
311 <#if categorias?has_content && categorias?size gt 0>
312 ${categorias[0].getName()}
313 </#if>
314 </p>-->
315
316 <!---------------------------------------------------------------------------------------------------->
317 <!-- Si el campo de fechas repetido tiene contenido solo se pinta dichas fechas una detras de otra -->
318 <!-- si no tiene información se pintará la información de las fechas desde y hasta -->
319 <!---------------------------------------------------------------------------------------------------->
320 <#if Fechas.getSiblings()?has_content && Fechas.getSiblings()??>
321 <#if Fechas.getSiblings()?size gt 0 && Fechas.getSiblings()[0].getData() != "">
322 <dt class="tit-h5 txt-uppercase txt-medi mb-2">Fecha</dt>
323 <dd class="txt-uppercase">
324 <#list Fechas.getSiblings() as cur_Fechas>
325 <#assign cur_Fechas_Data = getterUtil.getString(cur_Fechas.getData())>
326
327 <#if validator.isNotNull(cur_Fechas_Data)>
328 <#assign cur_Fechas_DateObj = dateUtil.parseDate("yyyy-MM-dd", cur_Fechas_Data, locale)>
329
330 ${dateUtil.getDate(cur_Fechas_DateObj, "dd MMMM yyyy", locale)}<br>
331 </#if>
332
333 </#list>
334 </dd>
335 <#else>
336 <!-- Fecha desde/hasta -->
337 <#assign startDate_Data = getterUtil.getString(startDate.getData())>
338 <#assign endDate_Data = getterUtil.getString(endDate.getData())>
339 <#if validator.isNotNull(startDate_Data) && validator.isNotNull(endDate_Data)>
340 <#assign startDate_DateObj = dateUtil.parseDate("yyyy-MM-dd", startDate_Data, locale)>
341 <#assign endDate_DateObj = dateUtil.parseDate("yyyy-MM-dd", endDate_Data, locale)>
342 <dt class="tit-h5 txt-uppercase txt-medi mb-2">Fecha</dt>
343 <dd class="txt-uppercase">
344 <!-- Si la fecha desde es igual a la fecha hasta solo se pinta la fecha desde -->
345 <#if startDate_Data == endDate_Data>
346 ${dateUtil.getDate(startDate_DateObj, "dd MMMM yyyy", locale)}
347 <#else>
348 ${dateUtil.getDate(startDate_DateObj, "dd MMMM yyyy", locale)} - ${dateUtil.getDate(endDate_DateObj, "dd MMMM yyyy", locale)}
349 </#if>
350 </dd>
351 </#if>
352 </#if>
353 </#if>
354
355
356 <!-- Campo horario -->
357 <#if (schedule.getData())?? && (schedule.getData())?has_content>
358 <dt class="tit-h5 txt-uppercase txt-medi mb-2">Horario</dt>
359 <dd class="txt-uppercase"><span class="estado-neutro">${schedule.getData()}</span></dd>
360 </#if>
361
362 <!-- Lugar -->
363 <#if (Lugares.getData())?? && (Lugares.getData())?has_content>
364 <dt class="tit-h5 txt-uppercase txt-medi mb-2">Lugar</dt>
365 <dd class="txt-uppercase"><span class="estado-neutro">${Lugares.getData()}</span></dd>
366 </#if>
367
368 <!-- Colaborador -->
369 <#if (Colaborador.getData())?? && (Colaborador.getData())?has_content>
370 <dt class="tit-h5 txt-uppercase txt-medi mb-2">Colaboramos con</dt>
371 <dd class="txt-uppercase"><span class="estado-neutro">${Colaborador.getData()}</span></dd>
372 </#if>
373
374 <!-- Cupo -->
375 <#if (Cupo.getData())?? && (Cupo.getData())?has_content>
376 <dt class="tit-h5 txt-uppercase txt-medi mb-2">Cupo</dt>
377 <dd class="txt-uppercase">${Cupo.getData()}</dd>
378 </#if>
379
380 <!-- Organizador -->
381 <#if (Organizador.getData())?? && (Organizador.getData())?has_content>
382 <dt class="tit-h5 txt-uppercase txt-medi mb-2">Organizamos con</dt>
383 <dd class="txt-uppercase">${Organizador.getData()}</dd>
384 </#if>
385
386 <!-- Cierre de inscripciones -->
387 <#assign CierreDeInscripciones_Data = getterUtil.getString(CierreDeInscripciones.getData())>
388 <#if validator.isNotNull(CierreDeInscripciones_Data)>
389 <#assign CierreDeInscripciones_DateObj = dateUtil.parseDate("yyyy-MM-dd", CierreDeInscripciones_Data, locale)>
390 <dt class="tit-h5 txt-uppercase txt-medi mb-2">Cierre de inscripciones</dt>
391 <dd class="txt-uppercase">${dateUtil.getDate(CierreDeInscripciones_DateObj, "dd 'DE' MMMM 'DE' yyyy", locale)}</dd>
392 </#if>
393
394 <!-- Publicacion de admision -->
395 <#assign PublicacionDeAdmision_Data = getterUtil.getString(PublicacionDeAdmision.getData())>
396 <#if validator.isNotNull(PublicacionDeAdmision_Data)>
397 <#assign PublicacionDeAdmision_DateObj = dateUtil.parseDate("yyyy-MM-dd", PublicacionDeAdmision_Data, locale)>
398 <dt class="tit-h5 txt-uppercase txt-medi mb-2">Publicacion de Admision</dt>
399 <dd class="txt-uppercase">${dateUtil.getDate(PublicacionDeAdmision_DateObj, "dd 'DE' MMMM 'DE' yyyy", locale)}</dd>
400 </#if>
401
402 <div id="redes-sociales-share-container" class="mt-4">
403 <@compartirRedesSocialesImprimir text=titulo />
404 </div>
405 </dl>
406 </div>
407 </div>
408
409 <!---------------------------------------->
410 <!-- Pinta los contenidos relacionados -->
411 <!---------------------------------------->
412 <#if assetLinks?? && assetLinks?has_content>
413 <h2 class="mt-3">Contenido relacionado</h2>
414 <div class=" mt-5 cont-convo"> <!--fd-gris-fondo py-50 py-lg-100-->
415 <div class="container px-3 px-lg-0">
416 <div class="content-cards cols-items-4">
417 <#list assetLinks as assetLink>
418 <#-- Obtenemos el AssetEntry relacionado (el "to" de la relación) -->
419 <#assign relatedAssetEntry = assetEntryLocalService.getEntry(assetLink.getEntryId2())>
420
421 <#-- Obtenemos el JournalArticle si el contenido relacionado también es un WebContent -->
422 <#if relatedAssetEntry.getClassName() == "com.liferay.journal.model.JournalArticle">
423 <#assign journalArticle = journalArticleLocalService.getLatestArticle(relatedAssetEntry.getClassPK())>
424
425 <!----------------------------->
426 <!-- Para obtener el ViewURL -->
427 <!----------------------------->
428 <#setting url_escaping_charset='UTF-8'>
429 <#assign viewURLWithRedirect = "">
430 <#assign assetRenderer = relatedAssetEntry.getAssetRenderer()>
431 <#if themeDisplay??>
432 <#assign viewURL = assetRenderer.getURLViewInContext(themeDisplay, null)>
433 <#assign redirectURL = themeDisplay.getURLCurrent()>
434 <#assign viewURLWithRedirect = viewURL + (viewURL?contains("?")?then("&", "?")) + "redirect=" + redirectURL?url>
435 <#--<a href="${viewURLWithRedirect}">${assetRenderer.getTitle(locale)}</a>-->
436 <#-- <#else>
437 <span>${assetRenderer.getTitle(locale)}</span>-->
438 </#if>
439
440 <!-- Obtener los campos necesarios para pintar los campos del contenido relacionado -->
441 <#assign document = saxReaderUtil.read(journalArticle.getContentByLocale(locale))>
442 <#assign rootElement = document.getRootElement()>
443 <#assign dynamicElements = rootElement.elements("dynamic-element")>
444
445 <#list dynamicElements as element>
446 <!--<p class="sr-only"> entra ${element.attributeValue("name")}</p>-->
447 <#if element.attributeValue("name") == "Image46184462">
448 <#assign imgGS = element.element("dynamic-content").getText()>
449 <#if imgGS?? && imgGS != "" && imgGS?trim != "{}">
450 <#assign imgUuidGS = imgGS?eval.uuid!"" />
451 </#if>
452 <#if imgUuidGS?has_content>
453 <#assign imgNameGS = imgGS?eval.title />
454 <#assign imgGroupIdGS = imgGS?eval.groupId />
455 <#assign imgAltGS = imgGS?eval.alt/>
456 </#if>
457 </#if>
458
459 <#if element.attributeValue("name") == "Date80828384">
460 <#assign fechaIni = element.element("dynamic-content").getText()>
461 </#if>
462
463 <#if element.attributeValue("name") == "Date51740027">
464 <#assign fechaFin = element.element("dynamic-content").getText()>
465 </#if>
466 </#list>
467 <div class="mb-4 mb-xl-0 cardReco d-flex flex-column justify-content-between parentAssetViewUrl Caja-bordeada-gris">
468 <div class="h-100 d-flex flex-column gap-1r position-relative">
469 <div class="p-0">
470 <#if imgUuidGS?has_content>
471 <div class="card-reco-img-container">
472 <img class="w-100" alt="${imgAltGS}" src="/documents/${imgGroupIdGS}/0/${imgNameGS}/${imgUuidGS}" />
473 </div>
474 <#else>
475 <div class="card-reco-img-container">
476 <img class="w-100" alt="Logo de Cooperacion Española" src="/documents/d/${themeDisplay.getScopeGroup().getFriendlyURL()}/generica" />
477 </div>
478 </#if>
479 </div>
480 <div class="fecha-rango mt-2">
481 <#assign startDate_Data = getterUtil.getString(fechaIni)>
482 <#assign endDate_Data = getterUtil.getString(fechaFin)>
483 <#if startDate_Data?? && endDate_Data??>
484 <#assign startDate_DateObj = dateUtil.parseDate("yyyy-MM-dd", startDate_Data, locale)>
485 <#assign endDate_DateObj = dateUtil.parseDate("yyyy-MM-dd", endDate_Data, locale)>
486 <#if startDate_Data == endDate_Data>
487 ${dateUtil.getDate(startDate_DateObj, "dd MMMM yyyy", locale)}
488 <#else>
489 Desde ${dateUtil.getDate(startDate_DateObj, "dd MMMM yyyy", locale)} hasta ${dateUtil.getDate(endDate_DateObj, "dd MMMM yyyy", locale)}
490 </#if>
491 </#if>
492 </div>
493 <div class="card-text-cont">
494 <a class="title elipsis-3 enlace-total" href="${viewURLWithRedirect}" title="Ir a la recomendacion ${journalArticle.getTitle(locale)}"> ${journalArticle.getTitle(locale)}</a>
495 </div>
496 </div>
497 <div class="d-flex gap-1r flex-wrap">
498 <#-- Obtener el AssetEntry del contenido relacionado -->
499 <#assign assetEntry = assetEntryLocalService.getEntry("com.liferay.journal.model.JournalArticle", journalArticle.getResourcePrimKey()) />
500
501 <#-- Obtener las categorías -->
502 <#assign categoryIds = assetEntry.getCategoryIds() />
503 <#assign categories = [] />
504 <#list categoryIds as categoryId>
505 <#assign category = assetCategoryLocalService.fetchAssetCategory(categoryId) />
506 <#if category?? && category.getVocabularyId() == vocabularyId>
507 <#assign categories += [category] />
508 </#if>
509 </#list>
510
511 <#if categories?has_content>
512 <#list categories as category>
513
514 <#assign cat = category.getName() />
515
516 <#assign portalURL = themeDisplay.portalURL>
517 <#assign currentPageName = themeDisplay.layout.name>
518 <#assign siteFriendlyURL = themeDisplay.getScopeGroup().getFriendlyURL()>
519 <#assign siteName = siteFriendlyURL?substring(1)>
520 <#assign URLCategoria = portalURL + "/web/" + siteName + "/detalle-categorias/-/categories/" + category.getCategoryId()>
521
522 <#switch cat>
523 <#case "Accesibilidad / Inclusión">
524 <a class="cat-reco Accesibilidad" href="${URLCategoria}" title="Filtar Por ${cat}">${cat}</a>
525 <#break>
526 <#case "Artes Visuales">
527 <a class="cat-reco Artes" href="${URLCategoria}" title="Filtar Por ${cat}">${cat}</a>
528 <#break>
529 <#case "Ciencia / Tecnología">
530 <a class="cat-reco Ciencia" href="${URLCategoria}" title="Filtar Por ${cat}">${cat}</a>
531 <#break>
532 <#case "Cine / Audiovisual">
533 <a class="cat-reco Cine" href="${URLCategoria}" title="Filtar Por ${cat}">${cat}</a>
534 <#break>
535 <#case "Ciudadanía / Comunidad">
536 <a class="cat-reco Ciudadania" href="${URLCategoria}" title="Filtar Por ${cat}">${cat}</a>
537 <#break>
538 <#case "Cultura para el Desarrollo">
539 <a class="cat-reco Cultura" href="${URLCategoria}" title="Filtar Por ${cat}">${cat}</a>
540 <#break>
541 <#case "Debate / Pensamiento">
542 <a class="cat-reco Debate" href="${URLCategoria}" title="Filtar Por ${cat}">${cat}</a>
543 <#break>
544 <#case "Diversidad / Géneros">
545 <a class="cat-reco Diversidad" href="${URLCategoria}" title="Filtar Por ${cat}">${cat}</a>
546 <#break>
547 <#case "Escénicas">
548 <a class="cat-reco Escenicas" href="${URLCategoria}" title="Filtar Por ${cat}">${cat}</a>
549 <#break>
550 <#case "Exámenes de español">
551 <a class="cat-reco Examenes" href="${URLCategoria}" title="Filtar Por ${cat}">${cat}</a>
552 <#break>
553 <#case "Exposiciones">
554 <a class="cat-reco Exposiciones" href="${URLCategoria}" title="Filtar Por ${cat}">${cat}</a>
555 <#break>
556 <#case "Formación">
557 <a class="cat-reco Formacion" href="${URLCategoria}" title="Filtar Por ${cat}">${cat}</a>
558 <#break>
559 <#case "Infantil / Juvenil">
560 <a class="cat-reco Infantil" href="${URLCategoria}" title="Filtar Por ${cat}">${cat}</a>
561 <#break>
562 <#case "Letras">
563 <a class="cat-reco Letras" href="${URLCategoria}" title="Filtar Por ${cat}">${cat}</a>
564 <#break>
565 <#case "Mediación">
566 <a class="cat-reco Mediacion" href="${URLCategoria}" title="Filtar Por ${cat}">${cat}</a>
567 <#break>
568 <#case "Medioambiente / Sostenibilidad">
569 <a class="cat-reco Medioambiente" href="${URLCategoria}" title="Filtar Por ${cat}">${cat}</a>
570 <#break>
571 <#case "Música / Sonido">
572 <a class="cat-reco Musica" href="${URLCategoria}" title="Filtar Por ${cat}">${cat}</a>
573 <#break>
574 <#case "Patrimonio">
575 <a class="cat-reco Patrimonio" href="${URLCategoria}" title="Filtar Por ${cat}">${cat}</a>
576 <#break>
577 <#case "Radio / Pódcast">
578 <a class="cat-reco Radio" href="${URLCategoria}" title="Filtar Por ${cat}">${cat}</a>
579 <#break>
580
581 <#default>
582 <a class="cat-reco cat-neg" href="${URLCategoria}" title="Filtar Por ${cat}">${cat}</a>
583 <#break>
584 </#switch>
585 </#list>
586 </#if>
587 </div>
588 </div>
589 </#if>
590 </#list>
591 </div>
592 </div>
593 </div>
594 </#if>
595</div>
596
597<#macro compartirRedesSocialesImprimir url=URLCompleteNoParams text="" twitter=true facebook=true>
598
599 <#local urlEncoded = urlCodec.encodeURL(url) />
600
601 <#local textF= text />
602 <#if text?has_content >
603 <#local textF= htmlParserUtil.extractText(text)?trim />
604 </#if>
605
606 <!-- TWITTER -->
607 <#if twitter>
608 <#local twitterShareURL = "https://x.com/intent/tweet?url=" + urlEncoded />
609 <#if textF?has_content >
610 <#local textTwitter = textF?truncate(280, '...') />
611 <#local textTwitter = urlCodec.encodeURL(textTwitter) />
612 <#local twitterShareURL = twitterShareURL + "&text=" + textTwitter + "%0a%0a" />
613 </#if>
614 <#local twitterShareURL = twitterShareURL + "&via=" + twitterAccount />
615 </#if>
616 <#-- // -->
617
618 <#-- FACEBOOK -->
619 <#if facebook>
620 <#local facebookShareURL = "https://www.facebook.com/sharer/sharer.php?u=" + urlEncoded />
621 <#if textF?has_content >
622 <#local textFacebook = urlCodec.encodeURL(textF) />
623 <#local facebookShareURL = facebookShareURL + ""e=" + textFacebook />
624 </#if>
625 </#if>
626 <#-- // -->
627
628 <dt class="tit-h5 txt-uppercase txt-medi mb-2">Compartir</dt>
629 <dd>
630 <#if facebookShareURL?has_content >
631 <a class="no-ico" href="${facebookShareURL}" target="_blank" title="Compartir en facebook">
632 <img alt="icono facebook" src="/o/aecid-oces-theme/images/ico-facebook.svg" /></a>
633 </#if>
634
635 <#if twitterShareURL?has_content >
636 <a class="ml-2 no-ico" href="${twitterShareURL}" target="_blank" title="Compartir en X">
637 <img alt="icono X" src="/o/aecid-oces-theme/images/ico-x.svg" /></a>
638 </#if>
639 </dd>
640</#macro>