Se ha producido un error al procesar la plantilla.
Decreasing ranges aren't allowed for slicing strings (as it would give reversed text). The index range was: first = 122, last = 120
The blamed expression:
==> (fechaDesdeID+13)..<(fechaHastaID-3) [in template "8191648#8191687#PLANES" at line 166, column 104]
----
FTL stack trace ("~" means nesting-related):
- Failed at: #assign urlFechas = "\afechaDesde=${c... [in template "8191648#8191687#PLANES" at line 166, column 57]
----
1<#assign JournalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") />
2<#assign AssetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService") />
3<#assign AssetCategoryPropertyLocalService = serviceLocator.findService("com.liferay.asset.category.property.service.AssetCategoryPropertyLocalService") />
4<#assign AssetVocabularyLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetVocabularyLocalService") />
5<#assign DLAppService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLAppService") />
6<#assign LayoutLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.LayoutLocalService") />
7
8<#assign JournalArticle = JournalArticleLocalService.getArticle(themeDisplay.getScopeGroupId(), .vars['reserved-article-id'].data) />
9<#assign classPK = JournalArticle.getResourcePrimKey() />
10
11<#assign AssetEntry = AssetEntryLocalService.getEntry("com.liferay.journal.model.JournalArticle", classPK) />
12
13<#assign msYear = 31556952000 />
14<#assign dateFrom = .now?date />
15<#assign dateTo = (dateFrom?long + msYear)?number_to_date />
16
17<script>
18 document.addEventListener('lazybeforeunveil', function(e) {
19 var bg = e.target.getAttribute('data-bg');
20 if (bg) {
21 // Reemplazar paréntesis antes de codificar la URL
22 bg = bg.replace(/\(/g, '%28').replace(/\)/g, '%29');
23 var encodedBg = encodeURI(bg);
24 e.target.style.backgroundImage = 'url(' + encodedBg + ')';
25 }
26 });
27
28</script>
29<script src="https://cdnjs.cloudflare.com/ajax/libs/lazysizes/5.3.2/lazysizes.min.js" async=""></script>
30
31<#attempt>
32 <#assign redirect = themeDisplay.getURLCurrent()?split("=")[1] />
33 <#assign redirect = redirect?replace("%2F", "/") />
34 <#assign redirect = redirect?replace("%3F", "?") />
35 <#assign redirect = redirect?replace("%3D", "=") />
36 <#assign redirect = redirect?split("?")[0] />
37<#recover>
38 <#assign redirect = "" />
39</#attempt>
40
41<#if locale == "eu_ES">
42 <#assign literalempresa = "Konpainia" />
43 <#assign literalempresas = "Enpresak" />
44<#elseif locale == "en_US">
45 <#assign literalempresa = "Company" />
46 <#assign literalempresas = "Companys" />
47<#elseif locale == "fr_FR">
48 <#assign literalempresa = "Entreprise" />
49 <#assign literalempresas = "Entreprises" />
50<#else>
51 <#assign literalempresa = "Empresa" />
52 <#assign literalempresas = "Empresas" />
53</#if>
54
55<#assign lugar = "" />
56<#assign estado = "" />
57<#assign imagenActividad = "" />
58<#assign actividades = "" />
59<#assign subactividades = "" />
60<#assign idiomas = "" />
61<#assign duracion = "" />
62<#assign empresas = "" />
63<#assign keywords = "" />
64<#list AssetEntry.getCategories() as Category>
65 <#assign Vocabulary = AssetVocabularyLocalService.getAssetVocabulary(Category.getVocabularyId()).getName() />
66 <#if Vocabulary?contains("Lugar") && !Lugar.getData()?trim?has_content>
67 <#if !Category.getName()?lower_case?contains("zona")>
68 <#if lugar?has_content>
69 <#assign lugar += ", " + Category.getTitle(locale) />
70 <#else>
71 <#assign lugar = Category.getTitle(locale) />
72 </#if>
73 </#if>
74
75 <#elseif Vocabulary?contains("Actividad")>
76 <#if Category.isRootCategory()>
77 <#attempt>
78 <#assign CategoryIcon = AssetCategoryPropertyLocalService.getCategoryProperty(Category.getCategoryId(), "icono").getValue() />
79 <#recover>
80 <#assign CategoryIcon = "fas fa-circle" />
81 </#attempt>
82 <#assign CategoryUrl = redirect + "?lugar=&fechaDesde=" + dateFrom?string("yyyyMMdd") + "&fechaHasta=" + dateTo?string("yyyyMMdd") + "&actividades=" + Category.getCategoryId() + "&reserva=false&subactividades=&idioma=&duracion=&pagina=1&resultados=8" />
83 <#assign actividades += "<li><p><i class='" + CategoryIcon + "' title='" + Category.getTitle(locale) + "'></i> <a href='${CategoryUrl}' target='_blank'>" + Category.getTitle(locale) + "</a></p></li>" />
84 <#attempt>
85 <#assign fileEntryId = AssetCategoryPropertyLocalService.getCategoryProperty(Category.getCategoryId(), "imagen-detalle").getValue() />
86 <#assign fileEntry = DLAppService.getFileEntry(fileEntryId?number) />
87 <#assign imagenActividad = "/o/adaptive-media/image/" + fileEntry.getFileEntryId() + "/turismo-navarra-2600xauto/" + fileEntry.getTitle() />
88 <#recover>
89 <#assign imagenActividad = "" />
90 </#attempt>
91 <#else>
92 <#assign SubcategoryUrl = redirect + "?lugar=&fechaDesde=" + dateFrom?string("yyyyMMdd") + "&fechaHasta=" + dateTo?string("yyyyMMdd") + "&actividades=" + Category.getParentCategoryId() + "&reserva=false&subactividades=" + Category.getCategoryId() + "&idioma=&duracion=&pagina=1&resultados=8" />
93 <#assign subactividades += "<li><a href='${SubcategoryUrl}' target='_blank'>" + Category.getTitle(locale) + "</a></li>" />
94 </#if>
95
96 <#elseif Vocabulary?contains("Estado")>
97 <#assign colorEstado = "" />
98 <#if Category.getName() == "Cancelado">
99 <#assign colorEstado = "red" />
100 <#elseif Category.getName()?lower_case?contains("pendiente")>
101 <#assign colorEstado = "yellow" />
102 </#if>
103 <#assign estado = '<p class="estado ' + colorEstado + '">' + Category.getTitle(locale) + '</p>' />
104
105 <#elseif Vocabulary?contains("Idioma")>
106 <#assign idiomas += Category.getTitle(locale) + ", " />
107
108 <#elseif Vocabulary?contains("Dura")>
109 <#assign duracion = Category.getTitle(locale) />
110
111 <#elseif Vocabulary?contains("Empresas")>
112 <#if empresas?has_content>
113 <#assign empresas += "," + Category.getTitle(locale)?replace(",", " ") />
114 <#assign empresasID += "," + Category.getCategoryId() />
115 <#else>
116 <#assign empresas = Category.getTitle(locale)?replace(",", " ") />
117 <#assign empresasID = Category.getCategoryId() />
118 </#if>
119 </#if>
120
121 <#if !Vocabulary?contains("Estado")>
122 <#if keywords?has_content>
123 <#assign keywords += "," + Category.getTitle(locale) />
124 <#else>
125 <#assign keywords = Category.getTitle(locale) />
126 </#if>
127 </#if>
128</#list>
129
130<#if !lugar?has_content>
131 <#assign lugar = Lugar.getData()?trim />
132</#if>
133<#if idiomas?has_content>
134 <#assign idiomas = idiomas?trim?substring(0, idiomas?length - 2) />
135</#if>
136
137
138<#-- METAS -->
139${themeDisplay.getLayout().setTitle(.vars['reserved-article-title'].data + " - Planes | Visit Navarra - Web Oficial de Turismo de Navarra")}
140${themeDisplay.getLayout().setKeywords(keywords, themeDisplay.getLocale(), themeDisplay.getSiteDefaultLocale())}
141
142
143
144<!--<div class="componente-1c lazyload" aria-label="${.vars['reserved-article-title'].data}" data-bg="${imagenActividad}" >-->
145<div class="componente-1c lazyload" aria-label="${.vars['reserved-article-title'].data}" style="background-image: url('${imagenActividad}')" >
146 <div class="block-content">
147 <h1 class="calendas-title-large">${.vars['reserved-article-title'].data}</h1>
148 <ul class="breadcrumbs">
149 ${actividades}
150 </ul>
151 </div>
152</div>
153
154<div class="block-content-plan container">
155 <div class="row">
156 <div class="col-12 col-lg-8">
157 <div class="content-text-plan">
158 <div class="share-plan">
159 <#assign currentUrl = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent() />
160 <#-- Si se quiere mantener fechas del buscador activar, si no mostramos todos con fechas ficticias -->
161 <#assign fechaDesdeID = currentUrl?index_of("fechaDesde%") />
162 <#assign fechaHastaID = currentUrl?index_of("fechaHasta%") />
163 <#if (fechaDesdeID == -1) || (fechaHastaID == -1)>
164 <#assign urlFechas = "#search-results" />
165 <#else>
166 <#assign urlFechas = "&fechaDesde=${currentUrl[(fechaDesdeID+13)..<(fechaHastaID-3)]}&fechaHasta=${currentUrl[(fechaHastaID+13)..<(fechaHastaID+21)]}#search-results" />
167 </#if>
168
169 <#-- Con fechas ficticias para mostrar todos
170 <#assign urlFechas = "&fechaDesde=19000101&fechaHasta=99991221#search-results" />
171 -->
172
173 <div><p><i class="fas fa-share-alt"></i>Compartir:</p></div>
174
175 <ul>
176 <li><a href="https://www.facebook.com/sharer/sharer.php?p[title]=${.vars['reserved-article-title'].data}&u=${currentUrl}" target="_blank"><i class="fab fa-facebook-square"></i><span class="sr-only">Facebook</span></a></li>
177 <li><a href="http://twitter.com/share?text=${.vars['reserved-article-title'].data}&url=${currentUrl}" target="_blank"><svg xmlns="http://www.w3.org/2000/svg" height="1em" viewBox="0 0 512 512"><!--! Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><style>svg{fill:#000000}</style><path d="M389.2 48h70.6L305.6 224.2 487 464H345L233.7 318.6 106.5 464H35.8L200.7 275.5 26.8 48H172.4L272.9 180.9 389.2 48zM364.4 421.8h39.1L151.1 88h-42L364.4 421.8z"/></svg><span class="sr-only">Twitter</span></a></li>
178 <li><a href="mailto:?subject=${.vars['reserved-article-title'].data}&body=${currentUrl}" target="_blank"><i class="fas fa-envelope"></i><span class="sr-only">Correo electrónico</span></a></li>
179 <li><a href="whatsapp://send?text=${currentUrl}" target="_blank"><i class="fab fa-whatsapp"></i><span class="sr-only">WhatsApp</span></a></li>
180 </ul>
181 </div>
182
183 <#if idiomas?has_content || empresas?has_content>
184 <ul class="features_description_plan">
185 <#--
186 <li>
187 <p><i class="fas fa-asterisk"></i> <strong>Tipo de plan:</strong> ...</p>
188 </li>
189 -->
190 <#if empresas?has_content>
191 <#if empresas?contains(",")>
192 <#assign final = false />
193 <#assign numeroEmpresa = empresas?split(",")?size - 1 />
194 <li>
195 <p><i class="fas fa-building"></i>
196 <strong>${literalempresas}:</strong>
197 <#list 0..numeroEmpresa as i>
198 <#if i == numeroEmpresa>
199 <#assign final = true />
200 </#if>
201 <#assign empresa1 = empresas?split(",")[i] />
202 <#assign empresaID = empresasID?split(",")[i] />
203 <a href="https://www.visitnavarra.es/es/planes?lugar=${empresaID}${urlFechas}"
204 style="text-decoration:auto;">
205 ${empresa1}${final?then("", ", ")}
206 </a>
207 </#list>
208 </p>
209 </li>
210 <#else>
211 <li>
212 <p>
213 <i class="fas fa-building"></i>
214 <strong>${literalempresa}:</strong>
215 <a href="https://www.visitnavarra.es/es/planes?lugar=${empresasID}${urlFechas}"
216 style="text-decoration:auto;">
217 ${empresas}
218 </a>
219 </p>
220 </li>
221 </#if>
222 </#if>
223 <#if idiomas?has_content>
224 <li>
225 <p><i class="fas fa-volume-up"></i> <strong>Idiomas:</strong> ${idiomas}</p>
226 </li>
227 </#if>
228 <#-- <#if duracion?has_content>
229 <li>
230 <p><i class="fas fa-clock"></i> <strong>Duración:</strong> ${duracion}</p>
231 </li>
232 </#if> -->
233 </ul>
234 </#if>
235
236 <div id="content_container" class="text paragraph-base">
237 <div id="content_text">
238 ${Descripcion.getData()}
239 </div>
240 </div>
241
242 <#--
243 <script>
244 if(document.getElementById('content_text').getBoundingClientRect().height > 350) {
245
246 var contentContainer = document.getElementById('content_container');
247
248 var contentButtons = document.createElement('div');
249 contentButtons.setAttribute('id', 'content_buttons');
250 contentButtons.setAttribute('class', 'see-all-content');
251
252 var buttonOpen = document.createElement('a');
253 buttonOpen.setAttribute('class', '');
254 buttonOpen.setAttribute('href', 'javascript:seeAllContent(document.getElementById(\'content_buttons\'), \'\', true)');
255 buttonOpen.innerHTML = 'Ver más...<span class="sr-only">Mostrar todo el contenido del plan</span>';
256
257 var buttonClose = document.createElement('a');
258 buttonClose.setAttribute('class', 'hidden');
259 buttonClose.setAttribute('href', 'javascript:seeAllContent(document.getElementById(\'content_buttons\'), \'\', false)');
260 buttonClose.innerHTML = 'Ver menos...<span class="sr-only">Ocultar parte del contenido del plan</span>';
261
262 contentButtons.appendChild(buttonOpen);
263 contentButtons.appendChild(buttonClose);
264 contentContainer.parentNode.appendChild(contentButtons);
265 }
266 </script>
267 -->
268 </div>
269 </div>
270 <div class="col-12 col-lg-4">
271 <div class="content-card-plan">
272 <div class="card-plan">
273 <#assign imagenTarjeta = "" />
274 <#if Imagen.getSiblings()?has_content>
275 <#if Imagen.getSiblings()?size gt 1>
276 <#assign imagenTarjeta = "/o/adaptive-media/image/" + Imagen.getSiblings()[1].getAttribute("fileEntryId") + "/turismo-navarra-600xauto/" + Imagen.getSiblings()[1].getAttribute("name") />
277 <#else>
278 <#assign imagenTarjeta = "/o/adaptive-media/image/" + Imagen.getSiblings()[0].getAttribute("fileEntryId") + "/turismo-navarra-600xauto/" + Imagen.getSiblings()[0].getAttribute("name") />
279 </#if>
280 </#if>
281 <div class="image lazyload" style="background-image: url('${imagenTarjeta}')" ></div>
282 <div class="content">
283
284 <#if Fechas?? && Fechas.getSiblings()?has_content>
285 <#assign fecha = "" />
286 <#assign anyos = "" />
287 <#assign anyo = .now?string("yyyy") />
288 <#list Fechas.getSiblings() as bloqueFechas>
289 <#list bloqueFechas.getChildren()?chunk(2) as curFechas>
290
291 <#assign fechaInicio = curFechas[0].getData() />
292 <#assign fechaFin = curFechas[1].getData() />
293
294 <#if curFechas?is_first>
295 <#assign anyo = fechaInicio?date("yyyy-MM-dd")?string("yyyy")?number />
296 <#if estado?contains("{0}")>
297 <#assign anyos = anyo - 1 />
298 <#else>
299 <#assign anyos = anyo />
300 </#if>
301 </#if>
302 <#if curFechas?is_last>
303 <#if fechaFin?has_content>
304 <#assign aux = fechaFin?date("yyyy-MM-dd")?string("yyyy")?number />
305 <#else>
306 <#assign aux = fechaInicio?date("yyyy-MM-dd")?string("yyyy")?number />
307 </#if>
308 <#if estado?contains("{0}")>
309 <#assign aux = aux - 1 />
310 </#if>
311 <#if anyos != aux>
312 <#assign anyo = aux />
313 <#assign anyos += " - " + aux />
314 </#if>
315 </#if>
316
317 <#assign fecha += fechaInicio?date("yyyy-MM-dd")?string("dd MMM") />
318 <#if fechaFin?has_content>
319 <#assign fecha += " - " + fechaFin?date("yyyy-MM-dd")?string("dd MMM") />
320 </#if>
321
322 <#if fecha?has_content>
323 <#assign fecha += "</br>" />
324 </#if>
325 </#list>
326 </#list>
327 <#else>
328 <#assign fecha = FechaInicio.getData()?date("yyyy-MM-dd")?string("dd MMM") />
329 <#assign anyo = FechaInicio.getData()?date("yyyy-MM-dd")?string("yyyy")?number />
330 <#if estado?contains("{0}")>
331 <#assign anyos = anyo - 1 />
332 <#else>
333 <#assign anyos = anyo />
334 </#if>
335 <#if FechaFin.getData()?has_content>
336 <#assign aux = FechaFin.getData()?date("yyyy-MM-dd")?string("dd MMM") />
337 <#if fecha != aux>
338 <#assign fecha += " - " + aux />
339 </#if>
340 <#assign aux = FechaFin.getData()?date("yyyy-MM-dd")?string("yyyy")?number />
341 <#if estado?contains("{0}")>
342 <#assign aux = aux - 1 />
343 </#if>
344 <#if anyos != aux>
345 <#assign anyo = aux />
346 <#assign anyos += " - " + aux />
347 </#if>
348 </#if>
349 </#if>
350
351 <#if Type?? && Type.getData()?trim == "agenda">
352 ${estado?replace("{0}", anyo)}
353 </#if>
354 <#if Fecha?? && Fecha.getData()?has_content>
355 <p class="fecha">${Fecha.getData()}</p>
356 <#else>
357 <p class="fecha">${fecha}</p>
358 <#if anyos?has_content>
359 <p class="anus">${anyos}</p>
360 </#if>
361 </#if>
362 </div>
363 <div class="footer">
364 <i class="fas fa-map-marker-alt"></i>
365 <p class="location">${lugar}</p>
366 <#if EnlaceReservas.getData()?has_content>
367 <a href="${EnlaceReservas.getData()}" target="_blank">Reservar entradas</a>
368 </#if>
369
370 <#if EnlaceMasInformacion.getData()?has_content>
371 <a href="${EnlaceMasInformacion.getData()}" class="red">
372 <#if TextoMasInformacion?? && TextoMasInformacion.getData()?has_content>
373 ${TextoMasInformacion.getData()}
374 <#else>
375 Más información
376 </#if>
377 </a>
378 </#if>
379 </div>
380 </div>
381 </div>
382 </div>
383 </div>
384</div>
385
386<#if Imagen.getSiblings()?has_content>
387 <div class="componente-slider-images">
388 <div class="container">
389 <div id="carousel" class="carrousel">
390 <div id="carouselIndicators" class="carousel slide" data-ride="carousel" data-interval="false">
391 <#if Imagen.getSiblings()?size gt 1 >
392 <a class="carousel-control-prev" id="carousel_control_prev" href="#carouselIndicators" role="button" data-slide="prev" onclick="indicatorPrevImage('');">
393 <span class="sr-only"><@liferay.language key="previous" /></span>
394 <#list Imagen.getSiblings() as curImagen>
395 <#if curImagen.getData()?? && curImagen.getData() != "">
396 <#assign aa = .vars['reserved-article-title'].data />
397 <#if curImagen.Accesibilidad?? && curImagen.Accesibilidad.getData()?has_content>
398 <#assign aa = curImagen.Accesibilidad.getData() />
399 </#if>
400
401 <img class="image <#if curImagen?is_last>active</#if>" alt="${aa}" src="/o/adaptive-media/image/${curImagen.getAttribute("fileEntryId")}/turismo-navarra-400xauto/${curImagen.getAttribute("name")}" loading="lazy" />
402 </#if>
403 </#list>
404 </a>
405 </#if>
406 <div class="carousel-inner">
407 <#list Imagen.getSiblings() as curImagen>
408 <div class="carousel-item<#if curImagen?is_first> active</#if>">
409 <div class="card-content">
410 <#if curImagen.getData()?? && curImagen.getData() != "">
411 <img class="image" alt="" src="/o/adaptive-media/image/${curImagen.getAttribute("fileEntryId")}/turismo-navarra-1400xauto/${curImagen.getAttribute("name")}" loading="lazy" />
412 </#if>
413 </div>
414 </div>
415 </#list>
416 </div>
417 <#if Imagen.getSiblings()?size gt 1 >
418 <a class="carousel-control-next" id="carousel_control_next" href="#carouselIndicators" role="button" data-slide="next" onclick="indicatorNextImage('');">
419 <span class="sr-only"><@liferay.language key="next" /></span>
420 <#list Imagen.getSiblings() as curImagen>
421 <#if curImagen.getData()?? && curImagen.getData() != "">
422 <img class="image <#if curImagen?index == 1>active</#if>" alt="" src="/o/adaptive-media/image/${curImagen.getAttribute("fileEntryId")}/turismo-navarra-400xauto/${curImagen.getAttribute("name")}" loading="lazy" />
423 </#if>
424 </#list>
425 </a>
426 </#if>
427 </div>
428 </div>
429 </div>
430 </div>
431</#if>
432
433<#if subactividades?has_content>
434 <div class="block-tags-plan">
435 <ul>
436 ${subactividades}
437 </ul>
438 </div>
439</#if>
440
441<#if Type?? && Type.getData()?has_content>
442 <#if Type.getData()?contains("agenda")>
443 <@liferay_portlet["runtime"]
444 instanceId="BANNER_AGENDA"
445 portletName="com_liferay_journal_content_web_portlet_JournalContentPortlet"
446 />
447 <#else>
448 <@liferay_portlet["runtime"]
449 instanceId="BANNER_PLANES"
450 portletName="com_liferay_journal_content_web_portlet_JournalContentPortlet"
451 />
452 </#if>
453<#else>
454 <@liferay_portlet["runtime"]
455 instanceId="BANNER_PLANES"
456 portletName="com_liferay_journal_content_web_portlet_JournalContentPortlet"
457 />
458</#if>