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