Se ha producido un error al procesar la plantilla.
The following has evaluated to null or missing: ==> request.getParameter("articulo") [in template "20096#20122#8051391" at line 163, column 25] ---- 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 myParamValue = request.getPar... [in template "20096#20122#8051391" at line 163, column 1] ----
1<!--AECID-CC-Publicador-Detalle-Noticias-->
2
3<style>
4 /**********************/
5 /* Estilos de las OCE */
6 /**********************/
7
8 .aecid-detalle a {
9 color: var(--brand-color-1);
10 }
11
12 .aecid-detalle a:hover,
13 .aecid-detalle .share-option:hover {
14 opacity: .5;
15 }
16
17 .aecid-detalle h2 {
18 color: var(--brand-color-1);
19 margin-bottom: 20px;
20 font-size: 24px;
21 }
22
23 .separador {
24 color: #000;
25 }
26
27 .fecha {
28 font-weight: bold;
29 }
30
31 .categoria {
32 color: #6f6f6f;
33 font-size: 0.85em;
34 text-transform: uppercase;
35 }
36
37 .resumen {
38 color: #6f6f6f;
39 font-size: 0.9em;
40 }
41
42 .aecid-detalle iframe {
43 width: 100%;
44 height: 30em;
45 }
46
47 .contenido {
48 font-family: Arial;
49 }
50
51 .contenido img {
52 margin-left: 0 !important;
53 max-width: 100% !important;
54 height: auto;
55 }
56
57 .pieFoto {
58 font-size: 14px;
59 }
60
61 .botonRRSS {
62 display: inline-block;
63 color: #fff;
64 vertical-align: middle;
65 cursor: pointer;
66 -webkit-user-select: none;
67 -moz-user-select: none;
68 user-select: none;
69 background-color: transparent;
70 border: 1px solid transparent;
71 padding: 0.375rem 0.75rem;
72 border-radius: 0.25rem;
73 transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out;
74 }
75
76 .share-option {
77 background-color: transparent;
78 border: none;
79 padding: 0;
80 }
81
82 .facebook {
83 background-color: #3B5998;
84 }
85
86 .fb-xfbml-parse-ignore {
87 background-color: transparent;
88 border: none;
89 }
90
91 .fb-xfbml-parse-ignore:hover {
92 opacity: .5;
93 }
94
95 .twitter {
96 background-color: #1D9BF0;
97 }
98
99 .mainImg {
100 max-height: 21rem;
101 object-fit: cover;
102 width: auto;
103 max-width: 100%;
104 }
105
106 @media screen and (max-width: 576px) {
107 .aecid-noticia {
108 padding-left: 10px;
109 padding-right: 10px;
110 }
111 }
112
113 /*************************************/
114 /* Estilos de los Centros Culturales */
115 /*************************************/
116 .detalle-noticia img {
117 max-width: 100%;
118 }
119 .detalle-noticia h2 {
120 font-size: 2.167rem;
121 }
122 .estado {
123 -webkit-border-radius: 10px;
124 -moz-border-radius: 10px;
125 border-radius: 10px;
126 padding: .28rem .556rem;
127 display: block;
128 width: fit-content;
129 min-width: 7.4rem;
130 text-align: center;
131 }
132 .estado.neutro {
133 background-color: var(--gris-fondo);
134 }
135 .estado.verde {
136 background-color: #a4cb23;
137 color:#ffffff;
138 }
139 .estado.azul {
140 background-color: #4fc0fd;
141 color:#ffffff;
142 }
143 .estado.naranja {
144 background-color: #f39918;
145 color:#ffffff;
146 }
147 .estado.amarillo {
148 background-color: #feb71b;
149 color:#ffffff;
150 }
151 .estado.rojo {
152 background-color: #de0032;
153 color:#ffffff;
154 }
155 .estado.morado {
156 background-color: #540081;
157 color:#ffffff;
158 }
159
160</style>
161
162
163<#assign myParamValue = request.getParameter("articulo")>
164<#assign grupostr = request.getParameter("sitio")>
165<#assign grupolong = grupostr?number >
166
167<#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") />
168<#assign journalArticleResourceLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleResourceLocalService") />
169<#assign assetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService") />
170<#assign articleId = request.getParameter("articulo")>
171<#assign article = journalArticleLocalService.getArticle(grupolong, articleId)>
172<#assign articleResource = journalArticleResourceLocalService.getArticleResource(article.getResourcePrimKey())>
173<#assign articleResourcePK = articleResource.getPrimaryKey()>
174<#assign assetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService")>
175<#assign assetCategoryPropertyLocalService = serviceLocator.findService("com.liferay.asset.category.property.service.AssetCategoryPropertyLocalService")>
176<#assign assetEntry = assetEntryLocalService.getEntry("com.liferay.journal.model.JournalArticle", articleResourcePK) />
177<#assign assetEntryId = assetEntry.getEntryId() />
178<#assign groupLocalService = staticUtil["com.liferay.portal.kernel.service.GroupLocalServiceUtil"]>
179<#assign assetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService") />
180
181<!-- Funciones -->
182<#function getJournalArticleRootElement journal>
183 <#attempt>
184 <#if journal?has_content>
185 <#local journalLocaleContent = journal.getContentByLocale(locale.toString()) />
186 <#local journalContentXml = saxReaderUtil.read(journalLocaleContent) />
187 <#local rootElementContent = journalContentXml.getRootElement() />
188 <#if rootElementContent?? && rootElementContent?has_content>
189 <#return rootElementContent />
190 </#if>
191 </#if>
192 <#recover >
193 </#attempt>
194 <#return "" />
195</#function>
196
197<#function getXmlTextElement rootElementContent fieldReference>
198 <#attempt>
199 <#local xPathSelector = saxReaderUtil.createXPath("dynamic-element[@field-reference='" + fieldReference + "']") />
200 <#local element = xPathSelector.selectSingleNode(rootElementContent) />
201 <#return element.getStringValue()?trim />
202 <#recover >
203 </#attempt>
204 <#return "" />
205</#function>
206
207<#function getXmlTextElement rootElementContent fieldReference>
208 <#attempt>
209 <#local xPathSelector = saxReaderUtil.createXPath("dynamic-element[@field-reference='" + fieldReference + "']") />
210 <#local element = xPathSelector.selectSingleNode(rootElementContent) />
211 <#return element.getStringValue()?trim />
212 <#recover >
213 </#attempt>
214 <#return "" />
215</#function>
216
217<#function getJournalArticle resourcePrimKey>
218 <#attempt>
219 <#local journal = journalArticleLocalService.getLatestArticle(resourcePrimKey, 0) />
220 <#return journal />
221 <#recover >
222 </#attempt>
223 <#return "" />
224</#function>
225
226<#function getJournalArticleByJsonElement elementJson>
227 <#attempt>
228 <#local resourcePrimKey = elementJson.classPK?number />
229 <#local journal = getJournalArticle(resourcePrimKey) />
230 <#return journal />
231 <#recover >
232 </#attempt>
233 <#return "" />
234</#function>
235
236<#function obtenerCamposRepetidos documentRoot fieldReference >
237 <#return documentRoot.selectNodes("dynamic-element[@field-reference='" + fieldReference + "']")/>
238</#function>
239
240<#function getFriendlyUrlJournal journal>
241 <#return "/-/" + journal.getUrlTitle() />
242</#function>
243
244<#function removeUrlParams url>
245 <#if url?contains("?") >
246 <#return url?substring(0, url?index_of("?")) />
247 </#if>
248 <#return url/>
249</#function>
250
251<#macro fechaPublicacionJournal pattern="MMMM '|' dd '|' yyyy" upperCase=true>
252 <#local date = getJournalArticleDisplayDate(article) />
253 <#if date?has_content>
254 <#local dateFormat = formatDate(date, pattern) />
255 ${upperCase?then(dateFormat?upper_case, dateFormat)}
256 </#if>
257</#macro>
258
259<#function getJournalArticleDisplayDate articulo>
260 <#local journalArticleDisplayDateF = "">
261 <#attempt>
262 <#local journalArticleDisplayDate = articulo.getDisplayDate() />
263 <#if journalArticleDisplayDate?has_content>
264 <#local journalArticleDisplayDateF = journalArticleDisplayDate />
265 <#local date = dateUtil.parseDate("EEE, dd MMM yyyy HH:mm:ss Z", journalArticleDisplayDate, localeUtil.getDefault()) />
266 <#local journalArticleDisplayDateF = date />
267 </#if>
268 <#recover>
269 </#attempt>
270 <#return journalArticleDisplayDateF />
271</#function>
272
273<#function formatDate date datePattern="EEEE, dd MMMM yyyy HH:mm">
274 <#attempt>
275 <#local timeZoneMadrid = timeZoneUtil.getTimeZone("Europe/Madrid") />
276 <#local dateFormat = dateUtil.getDate(date, datePattern, locale, timeZoneMadrid) />
277 <#return dateFormat />
278 <#recover>
279 </#attempt>
280 <#return "" />
281</#function>
282
283<#assign currentURL=themeDisplay.getPortalURL() + themeDisplay.getURLCurrent() />
284<#if (serviceLocator.findService("es.aecid.shorturl.service.AecidShortUrlService"))??>
285 <#assign shortUrlService=serviceLocator.findService("es.aecid.shorturl.service.AecidShortUrlService") />
286 <#assign currentShortURL=themeDisplay.getPortalURL() + '/' + shortUrlService.getShortUrl(currentURL, companyId, groupId, themeDisplay.getUserId()) />
287<#else>
288 <#assign currentShortURL=currentURL />
289</#if>
290
291
292<!-- Primero se comprueba que tipo de contenido, es decir, si el contenido es de un centro cultural o si viene de los centros de OCE -->
293<#assign site = groupLocalService.getGroup(grupolong)>
294<#assign NombreSite = site.getDescriptiveName(themeDisplay.getLocale())>
295<#assign NombreSite = NombreSite?split(" -")[0]>
296
297<!--<p> Nombre cortado ${NombreSite} </p>-->
298
299<!-- El id de las categorías de Categorias CC -->
300<#assign vocabularyId = 7623391 />
301
302<!-- Se obtiene el id de la estructura del contenido -->
303
304
305
306
307<!------------------------------------->
308<!-- obtener los datos de los campos -->
309<!------------------------------------->
310<#if NombreSite == 'CCE'>
311 <#assign journalRootElementCC = getJournalArticleRootElement(article) />
312 <#assign URLPortal = themeDisplay.getURLPortal() />
313 <#assign URLCurrent = themeDisplay.getURLCurrent() />
314 <#assign URLComplete = URLPortal + URLCurrent />
315 <#assign URLCompleteNoParams = removeUrlParams(URLComplete) />
316 <#assign twitterAccount = "AECID-CC-Argentina" />
317<#else>
318 <#assign journalRootElement = getJournalArticleRootElement(article) />
319</#if>
320
321<#assign contenido = article.getContent() />
322
323
324<#if journalRootElementCC?has_content>
325 <#assign ImagenCC = getXmlTextElement(journalRootElementCC, "image") />
326 <#assign SubtituloCC = getXmlTextElement(journalRootElementCC, "Subtitulo") />
327 <#assign ContenidoCC = getXmlTextElement(journalRootElementCC, "mainText") />
328 <#assign LugarCC = getXmlTextElement(journalRootElementCC, "Lugar") />
329 <#assign CupoCC = getXmlTextElement(journalRootElementCC, "Cupo") />
330 <#assign FechaDesdeCC = getXmlTextElement(journalRootElementCC, "startDate") />
331 <#assign FechaHastaCC = getXmlTextElement(journalRootElementCC, "endDate") />
332 <#assign AdmisionCC = getXmlTextElement(journalRootElementCC, "PublicacionDeAdmision") />
333 <#assign CierreCC = getXmlTextElement(journalRootElementCC, "CierreDeInscripciones") />
334 <#assign HorarioCC = getXmlTextElement(journalRootElementCC, "schedule") />
335 <#assign ColaboradorCC = getXmlTextElement(journalRootElementCC, "Colaborador") />
336 <#assign OrganizadorCC = getXmlTextElement(journalRootElementCC, "Organizador") />
337</#if>
338
339
340<#if journalRootElement?has_content>
341 <#assign video = getXmlTextElement(journalRootElement, "video") />
342 <#assign Resumen = getXmlTextElement(journalRootElement, "resumen") />
343 <#assign Imagen = getXmlTextElement(journalRootElement, "image") />
344 <#assign Contenido = getXmlTextElement(journalRootElement, "content") />
345</#if>
346
347<#assign redirectUrl = paramUtil.getString(request, "redirect", "") />
348<a class="back-button" href="${redirectUrl}">
349 <img src="${themeDisplay.getPathThemeImages()}/abajo.svg" alt="">
350 <span>Atrás</span>
351</a>
352
353
354<!-- Si el contenido que se va a visualizar es de un site de Centro Cultural se pintara de la siguiente forma-->
355<#if NombreSite == 'CCE'>
356
357 <!-------------------------------------------------------------------------->
358 <!--- Se visualiza el contenido con el diseño de los Centros Culturales ---->
359 <!-------------------------------------------------------------------------->
360
361 <div class="container px-3 px-lg-0 detalle-noticia">
362 <div class="col-2-1-d">
363 <div class="col-izq">
364 <h1 class="tit-h3 txt-bold txt-primario mb-4">${article.getTitle(locale)}</h1>
365
366 <#assign jsonFactory = serviceLocator.findService("com.liferay.portal.kernel.json.JSONFactory")>
367 <#assign jsonObject = jsonFactory.createJSONObject(ImagenCC)>
368 <#assign urlImagen = jsonObject.getString("url")>
369 <#assign urlImagenAlt = jsonObject.getString("alt")>
370
371 <img class="rounded mb-3" alt="${urlImagenAlt}" src="${urlImagen}" />
372 <#if SubtituloCC??>
373 <h2 class="mt-2 tit-h3">${SubtituloCC}</h2>
374 </#if>
375
376 <#if ContenidoCC??>
377 <div class="col-content">
378 ${ContenidoCC}
379 </div>
380 </#if>
381
382 </div>
383 <div class="col-der">
384 <dl>
385 <!-- Categoria -->
386
387
388 <#assign categoryIds = assetEntry.getCategoryIds() />
389 <#assign categories = [] />
390 <#list categoryIds as categoryId>
391 <#assign category = assetCategoryLocalService.fetchAssetCategory(categoryId) />
392 <#if category?? && category.getVocabularyId() == vocabularyId>
393 <#assign categories += [category] />
394 </#if>
395 </#list>
396
397 <#if categories?? && categories?has_content>
398 <dt class="tit-h5 txt-uppercase txt-medi mb-2">categoria</dt>
399 <#list categories as category>
400 <#assign categoriaFiltrada = category.getName() />
401
402 <#switch categoriaFiltrada>
403 <#case "Infantil">
404 <dd class="txt-uppercase"><span class="estado verde">${categoriaFiltrada}</span></dd>
405 <#break>
406 <#case "Musica">
407 <dd class="txt-uppercase"><span class="estado azul">${categoriaFiltrada}</span></dd>
408 <#break>
409 <#case "Letras">
410 <dd class="txt-uppercase"><span class="estado naranja">${categoriaFiltrada}</span></dd>
411 <#break>
412 <#case "Escenicas">
413 <dd class="txt-uppercase"><span class="estado amarillo">${categoriaFiltrada}</span></dd>
414 <#break>
415 <#case "Formacion">
416 <dd class="txt-uppercase"><span class="estado rojo">${categoriaFiltrada}</span></dd>
417 <#break>
418 <#case "Cine">
419 <dd class="txt-uppercase"><span class="estado morado">${categoriaFiltrada}</span></dd>
420 <#break>
421 <#default>
422 <dd class="txt-uppercase"><span class="estado neutro">${categoriaFiltrada}</span></dd>
423 <#break>
424 </#switch>
425 </#list>
426 </#if>
427
428 <!-- Fecha desde/hasta -->
429 <#assign startDate_Data = getterUtil.getString(FechaDesdeCC)>
430 <#assign endDate_Data = getterUtil.getString(FechaHastaCC)>
431 <#if startDate_Data?? && endDate_Data??>
432 <#assign startDate_DateObj = dateUtil.parseDate("yyyy-MM-dd", startDate_Data, locale)>
433 <#assign endDate_DateObj = dateUtil.parseDate("yyyy-MM-dd", endDate_Data, locale)>
434 <dt class="tit-h5 txt-uppercase txt-medi mb-2">Fecha</dt>
435 <dd class="txt-uppercase">
436 <#if startDate_Data == endDate_Data>
437 ${dateUtil.getDate(startDate_DateObj, "dd MMMM yyyy", locale)}
438 <#else>
439 ${dateUtil.getDate(startDate_DateObj, "dd MMMM yyyy", locale)} - ${dateUtil.getDate(endDate_DateObj, "MMMM yyyy", locale)}
440 </#if>
441 </dd>
442 </#if>
443
444 <!-- Campo horario -->
445 <#if (schedule.getData())?? && (schedule.getData())?has_content>
446 <dt class="tit-h5 txt-uppercase txt-medi mb-2">Horario</dt>
447 <dd class="txt-uppercase"><span class="estado-neutro">${schedule.getData()}</span></dd>
448 </#if>
449
450 <!-- Lugar -->
451 <#if LugarCC?? && LugarCC?has_content>
452 <dt class="tit-h5 txt-uppercase txt-medi mb-2">Lugar</dt>
453 <#switch LugarCC>
454 <#case "Opción94049536">
455 <dd class="txt-uppercase"><span class="estado neutro">Presencial</span></dd>
456 <#break>
457 <#case "Opción97760043">
458 <dd class="txt-uppercase"><span class="estado neutro">Online</span></dd>
459 <#break>
460 <#case "Opción36010935">
461 <dd class="txt-uppercase"><span class="estado neutro">Fuera del Centro</span></dd>
462 <#break>
463 </#switch>
464 </#if>
465
466 <!-- Colaborador -->
467 <#if ColaboradorCC?? && ColaboradorCC?has_content>
468 <dt class="tit-h5 txt-uppercase txt-medi mb-2">Colaborador</dt>
469 <dd class="txt-uppercase"><span class="estado-neutro">${ColaboradorCC}</span></dd>
470 </#if>
471
472 <!-- Cupo -->
473 <#if CupoCC?? && CupoCC?has_content>
474 <dt class="tit-h5 txt-uppercase txt-medi mb-2">Cupo</dt>
475 <dd class="txt-uppercase">${CupoCC}</dd>
476 </#if>
477
478 <!-- Organizador -->
479 <#if OrganizadorCC?? && OrganizadorCC?has_content>
480 <dt class="tit-h5 txt-uppercase txt-medi mb-2">Organizador</dt>
481 <dd class="txt-uppercase">${OrganizadorCC}</dd>
482 </#if>
483
484 <!-- Cierre de inscripciones -->
485 <#assign CierreDeInscripciones_Data = getterUtil.getString(CierreCC)?trim>
486 <#if CierreDeInscripciones_Data?has_content>
487 <#-- Intenta parsear solo si el valor tiene contenido y está en el formato correcto -->
488 <#assign CierreDeInscripciones_DateObj = dateUtil.parseDate("yyyy-MM-dd", CierreDeInscripciones_Data, locale)>
489 <dt class="tit-h5 txt-uppercase txt-medi mb-2">Cierre de inscripciones</dt>
490 <dd class="txt-uppercase">${dateUtil.getDate(CierreDeInscripciones_DateObj, "dd 'DE' MMMM 'DE' yyyy", locale)}</dd>
491 </#if>
492
493 <!-- Publicacion de admision -->
494 <#assign PublicacionDeAdmision_Data = getterUtil.getString(AdmisionCC)>
495 <#if validator.isNotNull(PublicacionDeAdmision_Data)>
496 <#assign PublicacionDeAdmision_DateObj = dateUtil.parseDate("yyyy-MM-dd", PublicacionDeAdmision_Data, locale)>
497 <dt class="tit-h5 txt-uppercase txt-medi mb-2">Publicacion de Admision</dt>
498 <dd class="txt-uppercase">${dateUtil.getDate(PublicacionDeAdmision_DateObj, "dd 'DE' MMMM 'DE' yyyy", locale)}</dd>
499 </#if>
500 </dl>
501 </div>
502 </div>
503 </div>
504
505<#else>
506 <div id="aecid-detalle-noticia" class="container p-0 aecid-detalle mt-5 mb-5">
507 <div class="row aecid-noticia px-3 px-md-0">
508 <!----------------------------------------------------------->
509 <!--- Se visualiza el contenido con el diseño de las OCE ---->
510 <!----------------------------------------------------------->
511 <div class="col-lg-6 col-12 row px-0">
512 <#assign jsonFactory = serviceLocator.findService("com.liferay.portal.kernel.json.JSONFactory")>
513 <#assign jsonObject = jsonFactory.createJSONObject(Imagen)>
514 <#assign urlImagen = jsonObject.getString("url")>
515 <#assign urlImagenAlt = jsonObject.getString("alt")>
516
517 <#assign ImagenRedes = "/documents/d/global/noticias-convocatoria">
518 <#if (video?has_content)>
519 <div class="col-12 p-0">
520 <div class="row justify-content-center">
521 <div class="col-12 p-0">
522 <#if video?contains("www.youtube.com/embed/")>
523 <iframe
524 title="Reproductor de vídeo YouTube" src="${video}" frameborder="0"
525 allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
526 allowfullscreen>
527 </iframe>
528
529 <#elseif video?contains("www.youtube.com/") && video?split("/")?size gte 2>
530 <iframe title="Reproductor de vídeo YouTube"
531 src="https://www.youtube.com/embed/${video?split("/")[3]}"
532 frameborder="0"
533 allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
534 allowfullscreen>
535 </iframe>
536
537 <#elseif video?contains("youtu.be")>
538 <a href="${friendlyURLs[themeDisplay.getLanguageId()]!""}" title="${languageUtil.get(locale, "lleva.a.pagina")} ${article.getTitle(locale)?truncate(100, '...')}">
539 <iframe tabindex="0" height="210px" title="Reproductor de vídeo YouTube"
540 src="https://www.youtube.com/embed/${video?split("/")[3]}?showinfo=0"
541 frameborder="0"
542 allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
543 allowfullscreen>
544 </iframe>
545 </a>
546
547 <#elseif video?contains("vimeo") && video?split("/")?size gte 2>
548 <iframe title="Reproductor de vídeo Vimeo"
549 src="https://player.vimeo.com/video/${video?split("/")[3]}?"
550 frameborder="0" allow="autoplay; fullscreen; picture-in-picture"
551 allowfullscreen>
552 </iframe>
553 </#if> <!-- Asegura que este cierre esté presente -->
554 </div>
555 </div>
556 </div>
557 <#else>
558 <#assign jsonFactory = serviceLocator.findService("com.liferay.portal.kernel.json.JSONFactory")>
559 <#assign jsonObject = jsonFactory.createJSONObject(Imagen)>
560 <#assign urlImagen = jsonObject.getString("url")>
561 <#assign urlImagenAlt = jsonObject.getString("alt")>
562 <div class="col-12 p-0">
563 <#if urlImagen?has_content>
564 <img alt="${urlImagenAlt}" src="${urlImagen}" class="mainImg w-100" />
565 <p class="pieFoto"><em tabindex="0"><span class="sr-only">${languageUtil.get(locale, "pie.de.foto")}: </span>
566 ${urlImagenAlt}
567 </em></p>
568 <#assign ImagenRedes = jsonObject.getString("url")>
569 <#else>
570 <img alt="Logo de AECID" src="/documents/d/global/noticias-convocatoria" class="mainImg w-100" />
571 <#assign ImagenRedes = "/documents/d/global/noticias-convocatoria">
572 </#if>
573 </div>
574 </#if>
575 </div>
576 <div class="col-lg-6 col-12 pl-lg-5 px-0 flex-column justify-content-center">
577 <div class="p-0">
578 <h2 tabindex="0">${article.getTitle(locale)}</h2>
579 </div>
580 <div class="p-0">
581 <p class="fecha" tabindex="0"><@fechaPublicacionJournal pattern="dd/MM/yyyy - HH:mm" upperCase=false/></p>
582 </div>
583 <div class="p-0">
584 <p tabindex="0"><span class="sr-only">${languageUtil.get(locale, "categorias.de.la.noticia")}</span>
585 <span class="categoria">
586 <#if categories?has_content>
587 <#list categories as category>
588 <#assign
589 numIdCategoria=category.getTreePath()?substring(category.getTreePath()?last_index_of("/")
590 - 5 , category.getTreePath()?length - 1) />
591 <span>${category.getName()}</span>
592 <span class="separador">
593 ${category?has_next?then(' | ', '')}
594 </span>
595 </#list>
596 </#if>
597 </span>
598 </p>
599 </div>
600 <div class="p-0">
601 <p class="resumen" tabindex="0"><span class="sr-only"> ${languageUtil.get(locale, "resumen.de.la.noticia")} </span>
602 <#if Resumen??>
603 ${Resumen}
604 </#if>
605 </p>
606 </div>
607 </div>
608
609 <div class="col-12 p-0">
610 <hr />
611 </div>
612 <div class="col-lg-10 col-12 p-0 ">
613 <div class="contenido" tabindex="0"><span class="sr-only">${languageUtil.get(locale, "contenido.de.la.noticia")} </span>
614 <#if Contenido??>
615 ${Contenido}
616 </#if>
617 </div>
618 </div>
619
620 <div class="col-2 d-lg-block d-none"></div>
621 <@liferay_util["html-top"]
622 outputKey="htmltop">
623 <!-- METAS RRSS -->
624 <meta property="og:url" content="${currentShortURL}" />
625 <meta property="og:site_name" content="SiteName" />
626 <meta property="og:type" content="website" />
627 <meta property="og:locale" content="gl_ES" />
628 <meta property="og:locale:alternate" content="gl_ES" />
629 <meta name="twitter:card" content="summary_large_image" />
630 <meta property="og:title" content="${article.getTitle(locale)}" />
631 <meta name="twitter:title" content="${article.getTitle(locale)}" />
632
633 <#if Resumen != "">
634 <meta property="og:description" content="${htmlUtil.stripHtml(Resumen)?replace("\"", "'" )}" />
635 <meta name="twitter:description" content="${htmlUtil.stripHtml(Resumen)?replace("\"", "'" )}" />
636 <#else>
637 <meta property="og:description" content="${article.getTitle(locale)}" />
638 <meta name="twitter:description" content="${article.getTitle(locale)}" />
639 </#if>
640
641 <meta property="og:image" content="${themeDisplay.getPortalURL()+ImagenRedes}" />
642 <meta property="og:image:secure_url" content="${themeDisplay.getPortalURL()+ImagenRedes}" />
643 <meta name="twitter:image" content="${themeDisplay.getPortalURL()+ImagenRedes}" />
644 <meta property="og:image:alt" content="Alt img og" />
645 <meta property="fb:app_id" content="???">
646 <meta property="fb:admins" content="https://www.facebook.com/Aecid.es">
647 <meta name="twitter:domain" content="${currentShortURL}" />
648 <meta name="twitter:site" content="@AECID_es" />
649 </@>
650 <div class="row col-12 p-0">
651 <!-- button visible facebook -->
652 <div class="col-flex mr-2">
653 <button class="fb-xfbml-parse-ignore" onClick="shareFacebook();" target="_blank" class="share-option"
654 index-social-media-list="0">
655 <div class="botonRRSS facebook">
656 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor"
657 class="bi bi-facebook" viewBox="0 0 16 16">
658 <path
659 d="M16 8.049c0-4.446-3.582-8.05-8-8.05C3.58 0-.002 3.603-.002 8.05c0 4.017 2.926 7.347 6.75 7.951v-5.625h-2.03V8.05H6.75V6.275c0-2.017 1.195-3.131 3.022-3.131.876 0 1.791.157 1.791.157v1.98h-1.009c-.993 0-1.303.621-1.303 1.258v1.51h2.218l-.354 2.326H9.25V16c3.824-.604 6.75-3.934 6.75-7.951z" />
660 </svg>
661 </div>
662 </button>
663 </div>
664 <!-- button visible twitter -->
665 <div class="col-flex mr-2">
666 <a href="https://twitter.com/intent/tweet?text=Mira esta noticia: ${article.getTitle(locale)} ${currentShortURL}"
667 class="twitter-share share-option no-ico" target="_blank" index-social-media-list="1">
668 <div class="botonRRSS twitter">
669 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor"
670 class="bi bi-twitter" viewBox="0 0 16 16">
671 <path
672 d="M5.026 15c6.038 0 9.341-5.003 9.341-9.334 0-.14 0-.282-.006-.422A6.685 6.685 0 0 0 16 3.542a6.658 6.658 0 0 1-1.889.518 3.301 3.301 0 0 0 1.447-1.817 6.533 6.533 0 0 1-2.087.793A3.286 3.286 0 0 0 7.875 6.03a9.325 9.325 0 0 1-6.767-3.429 3.289 3.289 0 0 0 1.018 4.382A3.323 3.323 0 0 1 .64 6.575v.045a3.288 3.288 0 0 0 2.632 3.218 3.203 3.203 0 0 1-.865.115 3.23 3.23 0 0 1-.614-.057 3.283 3.283 0 0 0 3.067 2.277A6.588 6.588 0 0 1 .78 13.58a6.32 6.32 0 0 1-.78-.045A9.344 9.344 0 0 0 5.026 15z" />
673 </svg>
674 </div>
675 </a>
676 </div>
677 </div>
678 </div>
679 </div>
680</#if>
681
682<#macro compartirRedesSocialesImprimir url=URLCompleteNoParams text="" twitter=true facebook=true>
683
684 <#local urlEncoded = urlCodec.encodeURL(url) />
685
686 <#local textF= text />
687 <#if text?has_content >
688 <#local textF= htmlParserUtil.extractText(text)?trim />
689 </#if>
690
691 <!-- TWITTER -->
692 <#if twitter>
693 <#local twitterShareURL = "https://x.com/intent/tweet?url=" + urlEncoded />
694 <#if textF?has_content >
695 <#local textTwitter = textF?truncate(280, '...') />
696 <#local textTwitter = urlCodec.encodeURL(textTwitter) />
697 <#local twitterShareURL = twitterShareURL + "&text=" + textTwitter + "%0a%0a" />
698 </#if>
699 <#local twitterShareURL = twitterShareURL + "&via=" + twitterAccount />
700 </#if>
701 <#-- // -->
702
703 <#-- FACEBOOK -->
704 <#if facebook>
705 <#local facebookShareURL = "https://www.facebook.com/sharer/sharer.php?u=" + urlEncoded />
706 <#if textF?has_content >
707 <#local textFacebook = urlCodec.encodeURL(textF) />
708 <#local facebookShareURL = facebookShareURL + ""e=" + textFacebook />
709 </#if>
710 </#if>
711 <#-- // -->
712
713 <dt class="tit-h5 txt-uppercase txt-medi mb-2">Compartir</dt>
714 <dd>
715 <#if facebookShareURL?has_content >
716 <a class="no-ico" href="${facebookShareURL}" target="_blank" title="Compartir en facebook">
717 <img alt="icono facebook" src="/o/aecid-oces-theme/images/ico-facebook.svg" /></a>
718 </#if>
719
720 <#if twitterShareURL?has_content >
721 <a class="ml-2 no-ico" href="${twitterShareURL}" target="_blank" title="Compartir en X">
722 <img alt="icono X" src="/o/aecid-oces-theme/images/ico-x.svg" /></a>
723 </#if>
724 </dd>
725</#macro>