Agenda
Hemen aurkituko dituzu kategorien arabera programatuta dauden jarduerak. Eguna, ordua, lekua eta prezioa agertuko dira, besteak beste.
Errorea gertatu da txantiloia prozesatzerakoan.
?substring(...) argument #2 had invalid value: The index mustn't be greater than the length of the string, 250, but it was 3932.
----
FTL stack trace ("~" means nesting-related):
- Failed at: #assign Descripcion = Descripcion?sub... [in template "43206317808343#1799609#40170" at line 240, column 17]
----
1<#assign JournalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") />
2<#assign AssetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService") />
3<#assign AssetVocabularyLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetVocabularyLocalService") />
4
5<#assign AssetEntryLocalServiceUtil = objectUtil("com.liferay.asset.kernel.service.AssetEntryLocalServiceUtil") />
6<#assign AssetEntryQuery = objectUtil("com.liferay.asset.kernel.service.persistence.AssetEntryQuery") />
7
8<#function formatHora horaStr>
9 <#assign num = horaStr?replace(",", ".")?number>
10 <#assign hour = num?int>
11 <#assign minutes = ((num - hour) * 100)?int>
12 <#return (hour?string("00") + ":" + minutes?string("00"))>
13</#function>
14
15<#-- Base URL seguro -->
16<#if themeDisplay??>
17 <#assign baseURL = themeDisplay.getScopeGroup().getFriendlyURL()>
18<#else>
19 <#assign baseURL = entryURL!"/">
20</#if>
21
22<section class="cabecera_color"></section>
23
24<section class="breadcrumbs container">
25 <ul class="nav_breadcrumbs">
26 <li>
27 <a href="${'/web' + baseURL}" class="link">${languageUtil.get(locale, "home")}</a> <span>></span>
28 </li>
29
30 <#if themeDisplay??>
31 <#list themeDisplay.getLayout().getAncestors()?reverse as AncestorLayout>
32 <li>
33 <#if AncestorLayout.getType() == "portlet">
34 <a href="${'/web' + baseURL + AncestorLayout.getFriendlyURL(locale)}" class="link">${AncestorLayout.getName(locale)}</a> <span>></span>
35 <#else>
36 ${AncestorLayout.getName(locale)} <span>></span>
37 </#if>
38 </li>
39 </#list>
40 </#if>
41
42 <li>
43 <p class="here">${.vars['reserved-article-title'].data}</p>
44 </li>
45 </ul>
46</section>
47
48<section class="title_section container">
49 <h1 class="title_first">${.vars['reserved-article-title'].data}</h1>
50 <div class="separator"></div>
51</section>
52
53<section class="content_new container">
54
55 <#-- Group ID seguro -->
56 <#if themeDisplay??>
57 <#assign groupId = themeDisplay.getScopeGroupId()>
58 <#else>
59 <#assign groupId = entryGroupId!0>
60 </#if>
61
62 <#assign JournalArticle = JournalArticleLocalService.getLatestArticle(groupId, .vars['reserved-article-id'].data) />
63 <#assign Categories = AssetCategoryLocalService.getCategories("com.liferay.journal.model.JournalArticle", JournalArticle.getResourcePrimKey()) />
64
65 <div class="features_new">
66
67 <#-- Fechas -->
68 <#if Fechas?? &&
69 Fechas.FechaInicio?? && Fechas.FechaInicio.FechaDesde?? && Fechas.FechaInicio.FechaDesde.getData()?? && Fechas.FechaInicio.FechaDesde.getData()?has_content &&
70 Fechas.FechaFin?? && Fechas.FechaFin.FechaHasta?? && Fechas.FechaFin.FechaHasta.getData()?? && Fechas.FechaFin.FechaHasta.getData()?has_content>
71
72 <div class="item">
73 <i class="fas fa-calendar-alt"></i>
74 <#if localeUtil.equals(localeUtil.getSiteDefault(), locale)>
75 <p>Del ${Fechas.FechaInicio.FechaDesde.getData()?trim?date("yyyy-MM-dd")?string("dd/MM/yyyy")} al ${Fechas.FechaFin.FechaHasta.getData()?trim?date("yyyy-MM-dd")?string("dd/MM/yyyy")}</p>
76 <#else>
77 <p>${Fechas.FechaInicio.FechaDesde.getData()?trim?date("yyyy-MM-dd")?string("yyyy/MM/dd")}tik ${Fechas.FechaFin.FechaHasta.getData()?trim?date("yyyy-MM-dd")?string("yyyy/MM/dd")}ra</p>
78 </#if>
79 </div>
80 </#if>
81
82 <#-- Horas -->
83 <#if Fechas?? &&
84 Fechas.FechaInicio?? && Fechas.FechaInicio.HoraDesde?? && Fechas.FechaInicio.HoraDesde.getData()?? && Fechas.FechaInicio.HoraDesde.getData()?has_content &&
85 Fechas.FechaFin?? && Fechas.FechaFin.HoraHasta?? && Fechas.FechaFin.HoraHasta.getData()?? && Fechas.FechaFin.HoraHasta.getData()?has_content>
86 <div class="item">
87 <i class="fas fa-history"></i>
88 <p>${formatHora(Fechas.FechaInicio.HoraDesde.getData())} - ${formatHora(Fechas.FechaFin.HoraHasta.getData())}</p>
89 </div>
90 </#if>
91
92 <#-- Ubicación -->
93 <#if Ubicacion?? && Ubicacion.getData()?? && Ubicacion.getData()?has_content>
94 <div class="item">
95 <i class="fas fa-map-marker-alt"></i>
96 <p>${Ubicacion.getData()}</p>
97 </div>
98 </#if>
99
100 <#-- Precio -->
101 <#if Precio?? && Precio.getData()?? && Precio.getData()?has_content>
102 <div class="item">
103 <i class="fas fa-euro-sign"></i>
104 <#if Precio.getData()?number lte 0>
105 <#if localeUtil.equals(localeUtil.getSiteDefault(), locale)>
106 <p>Gratuito</p>
107 <#else>
108 <p>Doako</p>
109 </#if>
110 <#else>
111 <p>${Precio.getData()}</p>
112 </#if>
113 </div>
114 </#if>
115
116 <#-- URL actual seguro -->
117 <#if themeDisplay??>
118 <#assign currentUrl = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent() />
119 <#else>
120 <#assign currentUrl = entryURL!"/">
121 </#if>
122
123 <div class="item">
124 <i class="fas fa-share-alt"></i>
125 <#if localeUtil.equals(localeUtil.getSiteDefault(), locale)>
126 <button type="button" class="share" id="share-new">Compartir</button>
127 <#else>
128 <button type="button" class="share" id="share-new">Partekatu</button>
129 </#if>
130 <ul class="share_rrss hidden">
131 <li><a href="https://www.facebook.com/sharer/sharer.php?p[title]=${.vars['reserved-article-title'].data}&u=${currentUrl}" target="_blank" class="icon"><i class="fab fa-facebook" aria-hidden="true"></i><span class="sr-only">Facebook</span></a></li>
132 <li><a href="http://twitter.com/share?text=${.vars['reserved-article-title'].data}&url=${currentUrl}" target="_blank" class="icon"><i class="fab fa-twitter" aria-hidden="true"></i><span class="sr-only">Twitter</span></a></li>
133 <li><a href="mailto:?subject=${.vars['reserved-article-title'].data}&body=${currentUrl}" target="_blank" class="icon"><i class="fas fa-envelope" aria-hidden="true"></i><span class="sr-only">email</span></a></li>
134 <li><a href="https://wa.me/?text=${currentUrl}" target="_blank" class="icon"><i class="fab fa-whatsapp" aria-hidden="true"></i><span class="sr-only">WhatsApp</span></a></li>
135 </ul>
136 </div>
137 </div>
138
139 <#-- Imagen Principal -->
140 <#if ImagenPrincipal?? && ImagenPrincipal.getData()?? && ImagenPrincipal.getData()?has_content>
141 <div class="firts_image">
142 <img src="${ImagenPrincipal.getData()}" alt="${ImagenPrincipal.getAttribute("alt")}" />
143 </div>
144 </#if>
145
146 <#-- Descripción -->
147 <#if Descripcion?? && Descripcion.getData()?? && Descripcion.getData()?has_content>
148 <div class="content_basic">
149 ${Descripcion.getData()}
150 </div>
151 </#if>
152
153 <#-- Enlace -->
154 <#if Enlace?? &&
155 Enlace.TextoEnlace?? && Enlace.TextoEnlace.getData()?? && Enlace.TextoEnlace.getData()?has_content &&
156 Enlace.UrlEnlace?? && Enlace.UrlEnlace.getData()?? && Enlace.UrlEnlace.getData()?has_content>
157 <a href="${Enlace.UrlEnlace.getData()}" class="link_default">${Enlace.TextoEnlace.getData()}</a>
158 </#if>
159</section>
160
161<#-- Eventos Similares -->
162<#assign EventosSimilaresList = "" />
163<#assign CategoryIds = AssetCategoryLocalService.getCategoryIds("com.liferay.journal.model.JournalArticle", JournalArticle.getResourcePrimKey()) />
164
165<#if CategoryIds?size gt 0>
166 ${AssetEntryQuery.setAllCategoryIds(CategoryIds)}
167 <#assign EventosSimilares = AssetEntryLocalServiceUtil.getEntries(AssetEntryQuery) />
168
169 <#list EventosSimilares as EventoSimilar>
170 <#assign assetRenderer = EventoSimilar.getAssetRenderer() />
171 <#assign journalArticle = assetRenderer.getArticle() />
172
173 <#if .vars['reserved-article-url-title'].data != journalArticle.getUrlTitle()>
174
175 <#-- viewURL seguro -->
176 <#if themeDisplay??>
177 <#assign viewURL = themeDisplay.getURLCurrent()?replace(.vars['reserved-article-url-title'].data, journalArticle.getUrlTitle()) />
178 <#else>
179 <#assign viewURL = entryURL!"/" + journalArticle.getUrlTitle() />
180 </#if>
181
182 <#-- Extraer contenido y fechas -->
183 <#assign document = saxReaderUtil.read(journalArticle.getContentByLocale(locale)) />
184 <#assign rootElement = document.getRootElement() />
185 <#assign fechasFieldSetNode = saxReaderUtil.createXPath("dynamic-element[@name='FechasFieldSet']").selectSingleNode(rootElement) />
186 <#assign fechaDesde = "" />
187 <#assign fechaHasta = "" />
188 <#if fechasFieldSetNode??>
189 <#assign fechasFieldSetFieldSetNode = saxReaderUtil.createXPath("dynamic-element[@name='FechasFieldSetFieldSet']").selectSingleNode(fechasFieldSetNode) />
190 <#if fechasFieldSetFieldSetNode??>
191 <#assign fechaInicioFieldSetNode = saxReaderUtil.createXPath("dynamic-element[@name='FechaInicioFieldSet']").selectSingleNode(fechasFieldSetFieldSetNode) />
192 <#if fechaInicioFieldSetNode??>
193 <#assign fechaInicioFieldSetFieldSetNode = saxReaderUtil.createXPath("dynamic-element[@name='FechaInicioFieldSetFieldSet']").selectSingleNode(fechaInicioFieldSetNode) />
194 <#if fechaInicioFieldSetFieldSetNode??>
195 <#assign fechaDesdeNode = saxReaderUtil.createXPath("dynamic-element[@name='FechaDesde']").selectSingleNode(fechaInicioFieldSetFieldSetNode) />
196 <#if fechaDesdeNode??>
197 <#assign fechaDesde = fechaDesdeNode.getStringValue()?trim?date("yyyy-MM-dd") />
198 </#if>
199 </#if>
200 </#if>
201 <#assign fechaFinFieldSetNode = saxReaderUtil.createXPath("dynamic-element[@name='FechaFinFieldSet']").selectSingleNode(fechasFieldSetFieldSetNode) />
202 <#if fechaFinFieldSetNode??>
203 <#assign fechaFinFieldSetFieldSetNode = saxReaderUtil.createXPath("dynamic-element[@name='FechaFinFieldSetFieldSet']").selectSingleNode(fechaFinFieldSetNode) />
204 <#if fechaFinFieldSetFieldSetNode??>
205 <#assign fechaHastaNode = saxReaderUtil.createXPath("dynamic-element[@name='FechaHasta']").selectSingleNode(fechaFinFieldSetFieldSetNode) />
206 <#if fechaHastaNode??>
207 <#assign fechaHasta = fechaHastaNode.getStringValue()?trim?date("yyyy-MM-dd") />
208 </#if>
209 </#if>
210 </#if>
211 </#if>
212 </#if>
213
214 <#-- Categorías -->
215 <#assign Categories = "" />
216 <#list EventoSimilar.getCategories() as Category>
217 <#assign Vocabulary = AssetVocabularyLocalService.getAssetVocabulary(Category.getVocabularyId()).getName()?trim />
218 <#if Vocabulary == "Tipo evento">
219 <#if Categories?has_content>
220 <#assign Categories += ", " + Category.getTitle(locale) />
221 <#else>
222 <#assign Categories = Category.getTitle(locale) />
223 </#if>
224 </#if>
225 </#list>
226
227 <#-- Ubicación y Descripción -->
228 <#assign UbicacionNode = saxReaderUtil.createXPath("dynamic-element[@name='Ubicacion']").selectSingleNode(rootElement) />
229 <#assign Ubicacion = "" />
230 <#if UbicacionNode??>
231 <#assign Ubicacion = UbicacionNode.getStringValue() />
232 </#if>
233
234 <#assign DescripcionNode = saxReaderUtil.createXPath("dynamic-element[@name='Descripcion']").selectSingleNode(rootElement) />
235 <#assign Descripcion = "" />
236 <#if DescripcionNode?? && DescripcionNode.getStringValue()?has_content>
237 <#assign Descripcion = DescripcionNode.getStringValue()?trim />
238 </#if>
239 <#if Descripcion?length gte 250>
240 <#assign Descripcion = Descripcion?substring(0, 250)?trim?substring(0, Descripcion?last_index_of(" ")) + "..." />
241 </#if>
242
243 <#-- Imagen principal -->
244 <#assign ImagenPrincipalNode = saxReaderUtil.createXPath("dynamic-element[@name='ImagenPrincipal']").selectSingleNode(rootElement) />
245 <#assign imagenPrincipalURL = "" />
246 <#if ImagenPrincipalNode??>
247 <#assign ImagenPrincipalJson = jsonFactoryUtil.createJSONObject(ImagenPrincipalNode.getStringValue()) />
248 <#assign imagenPrincipalURL = "/documents/" + ImagenPrincipalJson.groupId + "/" + ImagenPrincipalJson.uuid />
249 </#if>
250
251 <#assign EventosSimilaresList += '<li class="item col-12 col-lg-6"><a href="' + viewURL + '" class="link"><span class="sr-only">' + EventoSimilar.getTitle(locale) + '</span></a><div class="cards"><div class="image" style="background: url(' + imagenPrincipalURL + ');"><div class="fecha"><span class="dia">' + (fechaDesde?string("dd")) + '</span><span class="mes">' + (fechaDesde?string("MMM")?upper_case) + '</span><span class="dia">' + (fechaHasta?string("dd")) + '</span><span class="mes">' + (fechaHasta?string("MMM")?upper_case) + '</span></div></div><div class="content"><p class="category">' + Categories + '</p><p class="ubicacion"><i class="fas fa-map-marker-alt" aria-hidden="true"></i> ' + Ubicacion + '</p><hr><p class="title">' + EventoSimilar.getTitle(locale) + '</p><p class="summary">' + Descripcion + '</p></div></div></li>' />
252 </#if>
253 </#list>
254
255 <#if EventosSimilaresList?has_content>
256 <section class="title_section container">
257 <#if localeUtil.equals(localeUtil.getSiteDefault(), locale)>
258 <h2 class="title_second">Eventos similares</h2>
259 <#else>
260 <h2 class="title_second">Antzeko gertaerak</h2>
261 </#if>
262 <div class="separator"></div>
263 </section>
264 <section class="list_agenda container">
265 <ul class="list_items row">
266 ${EventosSimilaresList}
267 </ul>
268 </section>
269 </#if>
270</#if>