Se ha producido un error al procesar la plantilla.
The following has evaluated to null or missing:
==> saxReaderUtil.createXPath("dynamic-element[@name='Entradilla']").selectSingleNode(rootES) [in template "8191648#8191687#22791224" at line 91, column 41]
----
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 entradillaES = saxReaderUtil... [in template "8191648#8191687#22791224" in macro "printApartado" at line 91, column 17]
- Reached through: @printApartado "", Noticias [in template "8191648#8191687#22791224" at line 223, column 9]
----
1<#assign JournalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") />
2<#assign serviceContext = staticUtil["com.liferay.portal.kernel.service.ServiceContextThreadLocal"].getServiceContext() />
3<#assign themeDisplay = serviceContext.getThemeDisplay() />
4
5<#macro printApartado apartado contenidos>
6
7 <#if contenidos.getSiblings()?has_content>
8
9 <#assign imgTitulo = "" />
10 <#assign imgSeparador = "https://turismoprofesional.navarra.es/documents/8257989/22745023/linea-black.jpg" />
11 <#assign bgColor = "#ffffff" />
12 <#assign txtColor = "#000000" />
13
14
15 <#if apartado?lower_case?contains("ayudas")>
16 <#assign imgTitulo = "https://turismoprofesional.navarra.es/documents/8257989/22745023/titulo_ayudas.jpg" />
17 <#assign imgSeparador = "https://turismoprofesional.navarra.es/documents/8257989/22745023/linea-blue.jpg" />
18 <#assign bgColor = "#51a7d8" />
19 <#assign txtColor = "#ffffff" />
20 <#elseif apartado?lower_case?contains("sostenibles")>
21 <#assign imgTitulo = "https://turismoprofesional.navarra.es/documents/8257989/22745023/titulo_sostenibles.jpg/dbad7b94-479a-62e0-f15d-f7fb0625467c?t=1676467659834" />
22 <#assign imgSeparador = "https://turismoprofesional.navarra.es/documents/8257989/22745023/linea-green.jpg" />
23 <#assign bgColor = "#7fa366" />
24 <#assign txtColor = "#ffffff" />
25 <#elseif apartado?lower_case?contains("breves")>
26 <#assign imgTitulo = "https://turismoprofesional.navarra.es/documents/8257989/22745023/titulo_breves.jpg" />
27 <#assign imgSeparador = "https://turismoprofesional.navarra.es/documents/8257989/22745023/linea-gray.jpg" />
28 <#assign bgColor = "#eeeeee" />
29 <#assign txtColor = "#000000" />
30 </#if>
31
32
33 <#list contenidos.getSiblings() as curContenido>
34
35 <#if apartado?lower_case?contains("ayudas")>
36 <#assign jsonArticle = jsonFactoryUtil.createJSONObject(curContenido.Ayudas_Contenido.getData()) />
37 <#assign botonTextoES = curContenido.Ayudas_Boton.Ayudas_Boton_TextoES.getData() />
38 <#assign botonTextoEU = curContenido.Ayudas_Boton.Ayudas_Boton_TextoEU.getData() />
39 <#assign botonUrlES = curContenido.Ayudas_Boton.Ayudas_Boton_UrlES.getData() />
40 <#assign botonUrlEU = curContenido.Ayudas_Boton.Ayudas_Boton_UrlEU.getData() />
41 <#assign botonColor = curContenido.Ayudas_Boton.Ayudas_Boton_Color.getData() />
42 <#elseif apartado?lower_case?contains("sostenibles")>
43 <#assign jsonArticle = jsonFactoryUtil.createJSONObject(curContenido.NoticiasSostenibles_Contenido.getData()) />
44 <#assign botonTextoES = curContenido.NoticiasSostenibles_Boton.NoticiasSostenibles_Boton_TextoES.getData() />
45 <#assign botonTextoEU = curContenido.NoticiasSostenibles_Boton.NoticiasSostenibles_Boton_TextoEU.getData() />
46 <#assign botonUrlES = curContenido.NoticiasSostenibles_Boton.NoticiasSostenibles_Boton_UrlES.getData() />
47 <#assign botonUrlEU = curContenido.NoticiasSostenibles_Boton.NoticiasSostenibles_Boton_UrlEU.getData() />
48 <#assign botonColor = curContenido.NoticiasSostenibles_Boton.NoticiasSostenibles_Boton_Color.getData() />
49 <#elseif apartado?lower_case?contains("breves")>
50 <#assign jsonArticle = jsonFactoryUtil.createJSONObject(curContenido.Breves_Contenido.getData()) />
51 <#assign botonTextoES = curContenido.Breves_Boton.Breves_Boton_TextoES.getData() />
52 <#assign botonTextoEU = curContenido.Breves_Boton.Breves_Boton_TextoEU.getData() />
53 <#assign botonUrlES = curContenido.Breves_Boton.Breves_Boton_UrlES.getData() />
54 <#assign botonUrlEU = curContenido.Breves_Boton.Breves_Boton_UrlEU.getData() />
55 <#assign botonColor = curContenido.Breves_Boton.Breves_Boton_Color.getData() />
56 <#else>
57 <#assign jsonArticle = jsonFactoryUtil.createJSONObject(curContenido.Noticias_Contenido.getData()) />
58 <#assign botonTextoES = curContenido.Noticias_Boton.Noticias_Boton_TextoES.getData() />
59 <#assign botonTextoEU = curContenido.Noticias_Boton.Noticias_Boton_TextoEU.getData() />
60 <#assign botonUrlES = curContenido.Noticias_Boton.Noticias_Boton_UrlES.getData() />
61 <#assign botonUrlEU = curContenido.Noticias_Boton.Noticias_Boton_UrlEU.getData() />
62 <#assign botonColor = curContenido.Noticias_Boton.Noticias_Boton_Color.getData() />
63 </#if>
64
65 <#if jsonArticle != "{}">
66 <#if curContenido?is_first && imgTitulo?has_content>
67 <tr>
68 <td colspan="2" bgcolor="${bgColor}" style="background-color: ${bgColor}; padding: 0;">
69 <img src="${imgTitulo}" alt="${apartado}" style="width: 650px; max-width: 100%;">
70 </td>
71 </tr>
72 <#elseif !curContenido?is_first>
73 <tr>
74 <td colspan="2" bgcolor="${bgColor}" style="padding: 0;">
75 <img src="${imgSeparador}" alt="" style="width: 650px; max-width: 100%;">
76 </td>
77 </tr>
78 </#if>
79
80 <#assign resourcePrimKey = jsonArticle.classPK?number />
81 <#assign curArticle = JournalArticleLocalService.fetchLatestArticle(resourcePrimKey) />
82 <#assign viewURL = themeDisplay.getPortalURL() + "/es/-/" + curArticle.getUrlTitle() />
83 <#assign viewURLEU = themeDisplay.getPortalURL() + "/eu/-/" + curArticle.getUrlTitle() />
84
85 <#assign rootES = saxReaderUtil.read(curArticle.getContentByLocale("es_ES")).getRootElement() />
86 <#assign rootEU = saxReaderUtil.read(curArticle.getContentByLocale("eu_ES")).getRootElement() />
87
88 <#assign tituloES = curArticle.getTitle("es_ES") />
89 <#assign tituloEU = curArticle.getTitle("eu_ES") />
90
91 <#assign entradillaES = saxReaderUtil.createXPath("dynamic-element[@name='Entradilla']").selectSingleNode(rootES).getStringValue()?trim />
92 <#assign entradillaEU = saxReaderUtil.createXPath("dynamic-element[@name='Entradilla']").selectSingleNode(rootEU).getStringValue()?trim />
93
94 <#assign imagen = saxReaderUtil.createXPath("dynamic-element[@name='Imagenes']/dynamic-content").selectSingleNode(rootES).getStringValue()?trim />
95 <#if imagen?has_content>
96 <#assign imagenJson = jsonFactoryUtil.createJSONObject(imagen) />
97 <#assign imagenURL = "https://turismoprofesional.navarra.es/documents/" + imagenJson.groupId + "/" + imagenJson.uuid />
98
99 <#if !imgTitulo?has_content && curContenido?is_first>
100 <tr>
101 <td colspan="2">
102 <img src="${imagenURL}" width="650">
103 </td>
104 </tr>
105 <#else>
106 <tr>
107 <td colspan="2" bgcolor="${bgColor}" style="background-color: ${bgColor}; padding: 0 20px 0 20px;">
108 <img src="${imagenURL}" width="610">
109 </td>
110 </tr>
111 </#if>
112 </#if>
113
114 <tr>
115 <td colspan="1" bgcolor="${bgColor}" style="width: 50%; padding: 30px 20px 30px 20px; vertical-align: initial;">
116 <a href="${viewURL}" style="text-decoration: none;">
117 <p style="font-family: 'Bould', Arial, sans-serif; color: ${txtColor}; font-size: 24px; font-weight: 500; margin: 0 0 20px 0;">
118 ${tituloES}
119 </p>
120 <#if entradillaES?has_content>
121 <p style="font-family: 'Bould', Arial, sans-serif; color: ${txtColor}; font-size: 16px; margin: 20px 0 30px 0;">
122 ${entradillaES}
123 </p>
124 </#if>
125 </a>
126 <@printBoton botonTextoES botonUrlES botonColor bgColor txtColor />
127 </td>
128 <td colspan="1" bgcolor="${bgColor}" style="width: 50%; padding: 30px 20px 30px 20px; vertical-align: initial;">
129 <a href="${viewURLEU}" style="text-decoration: none;">
130 <p style="font-family: 'Bould', Arial, sans-serif; color: ${txtColor}; font-size: 24px; font-weight: 500; margin: 0 0 20px 0;">
131 ${tituloEU}
132 </p>
133 <#if entradillaEU?has_content>
134 <p style="font-family: 'Bould', Arial, sans-serif; color: ${txtColor}; font-size: 16px; margin: 20px 0 30px 0;">
135 ${entradillaEU}
136 </p>
137 </#if>
138 </a>
139 <@printBoton botonTextoEU botonUrlEU botonColor bgColor txtColor />
140 </td>
141 </tr>
142
143 <#if curContenido?is_last>
144 <tr>
145 <td colspan="2" bgcolor="#ffffff" style="height: 30px; background-color: #ffffff;"></td>
146 </tr>
147 </#if>
148 </#if>
149 </#list>
150 </#if>
151</#macro>
152
153<#macro printBoton botonTexto botonUrl botonColor bgColor txtColor>
154 <#if botonTexto?has_content && botonUrl?has_content && botonColor?has_content>
155 <#if botonColor == "white">
156 <div colspan="1" bgcolor="#ffffff" style="text-align: center; padding: 0.5em 1em; vertical-align: initial; background-color:#ffffff; border-radius: 25px;">
157 <a href="${botonUrl}" title="${botonTexto}" bgcolor="#ffffff" style="font-family: 'Bould', Arial, sans-serif; background-color: #ffffff; color: #000000; font-size: 16px; font-weight: 500; margin: 20px 0 0 0; text-decoration: none; padding: 0.5em 1em;">
158 ${botonTexto}
159 </a>
160 </div>
161 <#elseif botonColor == "black">
162 <div colspan="1" bgcolor="#000000" style="text-align: center; vertical-align: initial; background-color:#000000; border:10px solid #000000">
163 <a href="${botonUrl}" title="${botonTexto}" bgcolor="#000000" style="font-family: 'Bould', Arial, sans-serif; background: #000000; color: #ffffff; font-size: 16px; font-weight: 500; margin: 20px 0 0 0; text-decoration: none; padding: 0.5em 1em; ">
164 ${botonTexto}
165 </a>
166 </div>
167 <#elseif botonColor == "gray">
168 <div colspan="1" bgcolor="#eeeeee" style="text-align: center; padding: 0.5em 1em; vertical-align: initial; background-color:#eeeeee; border-radius: 25px;">
169 <a href="${botonUrl}" title="${botonTexto}" bgcolor="#eeeeee" style="font-family: 'Bould', Arial, sans-serif; background-color: #eeeeee; color: #000000; font-size: 16px; font-weight: 500; margin: 20px 0 0 0; text-decoration: none; padding: 0.5em 1em;">
170 ${botonTexto}
171 </a>
172 </div>
173 <#elseif botonColor == "transparent">
174 <div colspan="1" bgcolor="${bgColor}" style="text-align: center; padding: 0.5em 1em; vertical-align: initial; background-color:${bgColor}; border: 2px solid ${txtColor}; border-radius: 25px;">
175 <a href="${botonUrl}" title="${botonTexto}" bgcolor="${bgColor}" style="font-family: 'Bould', Arial, sans-serif; background-color: ${bgColor}; color: ${txtColor}; font-size: 16px; font-weight: 500; margin: 20px 0 0 0; text-decoration: none; padding: 0.5em 1em;">
176 ${botonTexto}
177 </a>
178 </div>
179 <#elseif botonColor == "none">
180 <a href="${botonUrl}" title="${botonTexto}" style="font-family: 'Bould', Arial, sans-serif; color: ${txtColor}; font-size: 16px; font-weight: 500; margin: 20px 0 0 0; text-decoration: none;">
181 » ${botonTexto}
182 </a>
183 </#if>
184 </#if>
185</#macro>
186
187
188<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
189<html xmlns="http://www.w3.org/1999/xhtml">
190 <head>
191 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
192 <title>Newsletter Turismo Profesional</title>
193 <meta name="viewport" content="width=device-width, initial-scale=1.0" />
194 </head>
195</html>
196
197<body style="margin: 0; padding: 0;" >
198 <table border="0" cellpadding="0" cellspacing="0" width="650" style="border-collapse: collapse; margin: 0 auto;" >
199 <tr>
200 <td colspan="2">
201 <small style="display: block; text-align: center; font-family: 'Bould', Arial, sans-serif; font-size: 0.7em; color: #aaa; padding: 0em 0em 1em 0em">Si no puede ver bien este boletín haga click <a href="https://turismoprofesional.navarra.es/es/ultimo-boletin" title="Último boletín de Turismo Profesional">aquí</a></small>
202 <h1 style="margin: 0;">
203 <a href="https://turismoprofesional.navarra.es/" title="Página de Turismo Profesional">
204 <img width="650" src="https://turismoprofesional.navarra.es/documents/8257989/22745023/header.png/35f208b5-e4aa-87c1-fec2-868e27e27bf2?t=1718784306754" alt="Reyno de Navarra | Nafarroa ko Erresuma" style="width: 650px; max-width: 100%;">
205 </a>
206 </h1>
207 </td>
208 </tr>
209
210 <tr>
211 <td colspan="1" bgcolor="#000000" style="background-color: #000000; padding: 5px 20px 5px 20px;">
212 <p style="font-family: 'Bould', Arial, sans-serif; color: #ffffff; font-size: 16px; font-weight: 500; text-align: left; margin: 0em 0em 0.5em 0em;">
213 ${Cabecera.Fecha.getData()?date("yyyy-MM-dd")?string("dd/MM/yyyy")}
214 </p>
215 </td>
216 <td colspan="1" bgcolor="#000000" style="background-color: #000000; padding: 5px 20px 5px 20px;">
217 <p style="font-family: 'Bould', Arial, sans-serif; color: #ffffff; font-size: 16px; font-weight: 500; text-align: right; margin: 0em 0em 0.5em 0em;">
218 ${Cabecera.Fecha.getData()?date("yyyy-MM-dd")?string("yyyy/MM/dd")}
219 </p>
220 </td>
221 </tr>
222
223 <@printApartado "" Noticias />
224 <@printApartado "Ayudas, planes y proyectos" Ayudas />
225 <@printApartado "Noticias sostenibles" NoticiasSostenibles />
226 <@printApartado "Breves" Breves />
227
228 <#if Pie.Banner.getSiblings()?has_content>
229 <#list Pie.Banner.getSiblings() as banner>
230 <#if banner.Pie_Banner_Imagen.getData()?has_content && banner.Pie_Banner_Url.getData()?has_content>
231 <#if !banner?is_first>
232 <tr>
233 <td colspan="2" bgcolor="#ffffff" style="height: 30px; background-color: #ffffff;"></td>
234 </tr>
235 </#if>
236
237 <tr>
238 <td colspan="2">
239 <a href="${banner.Pie_Banner_Url.getData()}" title="${banner.Pie_Banner_Imagen.getAttribute('alt')}">
240 <img src="https://turismoprofesional.navarra.es${banner.Pie_Banner_Imagen.getData()}" alt="" style="width: 650px; max-width: 100%;">
241 </a>
242 </td>
243 </tr>
244
245 <#if banner?is_last>
246 <tr>
247 <td colspan="2" bgcolor="#ffffff" style="height: 30px; background-color: #ffffff;"></td>
248 </tr>
249 </#if>
250 </#if>
251 </#list>
252 </#if>
253
254 <tr>
255 <td colspan="2" bgcolor="#ffffff" style="padding: 20px; text-align: center;">
256 <a href="https://es.linkedin.com/showcase/turismopro/" title="Linkedin @turismopro" style="text-decoration: none; padding: 0 15px 0 15px;">
257 <img src="https://turismoprofesional.navarra.es/documents/8257989/22745023/linkedin.svg/d383342e-9f3c-2163-d2d0-c19d5f2c289e?t=1718258156893" width="50" style="width: 50px">
258 </a>
259 <a href="https://twitter.com/turismopro_na" title="Twitter @turismopro_na" style="text-decoration: none; padding: 0 15px 0 15px;">
260 <img src="https://turismoprofesional.navarra.es/documents/8257989/22745023/square-x-twitter.svg/448dc8ec-7dcd-c021-21a7-8ac9e1f5eb68?t=1718258157103" width="50" style="width: 50px">
261 </a>
262 <a href="https://www.youtube.com/playlist?list=PLbw-FEcX7Pe9QBO57H2tE8Ea74MK90SbD" title="@visitnavarra" style="text-decoration: none; padding: 0 15px 0 15px;">
263 <img src="https://turismoprofesional.navarra.es/documents/8257989/22745023/square-youtube.svg/1dffb1bf-df0a-9048-9282-2f0b748be17c?t=1718258157254" width="50" style="width: 50px">
264 </a>
265 </td>
266 </tr>
267
268 <tr>
269 <td colspan="2" bgcolor="#ffffff" style="background-color: #ffffff;">
270 <p style="font-family: 'Bould', Arial, serif; color: #000000; font-size: 13px; text-align: center;">Haz clic <a href="@unsubscribe_url@" style="color: #000000;">aquí</a> para darte de baja de la suscripción.</p>
271 </td>
272 </tr>
273 </table>
274</body>