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 + "&quote=" + 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>