An error occurred while processing the template.
The following has evaluated to null or missing: ==> country [in template "12187455#12187494#3138569" at line 59, column 50] ---- 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: ${country} [in template "12187455#12187494#3138569" at line 59, column 48] ----
1<style>
2@media(max-width: 990px){
3 .desktop-buttons{
4 display:none!important;
5 }
6
7}
8
9.desktop-buttons{
10 padding: 2%;
11}
12
13</style>
14
15<#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")>
16<#assign assetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService") />
17<#assign dlFileEntryLocalService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLFileEntryLocalService") />
18<#assign assetLinkLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetLinkLocalService") />
19
20<#assign currentArticle = journalArticleLocalService.getArticle(groupId, .vars['reserved-article-id'].data) />
21<#assign currentArticleResourcePrimKey = currentArticle.getResourcePrimKey() />
22<#assign currentArticleAssetEntry = assetEntryLocalService.getEntry("com.liferay.journal.model.JournalArticle", currentArticleResourcePrimKey) />
23<#assign currentArticleAssetEntryId = currentArticleAssetEntry.getEntryId() />
24<#assign currentArticleRelatedLinks = assetLinkLocalService.getDirectLinks(currentArticleAssetEntryId) />
25
26<#assign layoutLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.LayoutLocalService") />
27
28<div class="background-color--gray pb-5">
29 <section class="detail__banner">
30 <div class="detail__banner--image">
31 <#if sep_imagen_cabecera.imagen_cabecera.getData()?? && sep_imagen_cabecera.imagen_cabecera.getData() != "">
32 <img alt="${sep_imagen_cabecera.imagen_cabecera.getAttribute("alt")}" data-fileentryid="${sep_imagen_cabecera.imagen_cabecera.getAttribute("fileEntryId")}" src="${sep_imagen_cabecera.imagen_cabecera.getData()}" />
33 </#if>
34 </div>
35
36 <#assign categories = currentArticleAssetEntry.getCategories() >
37
38 <#if categories?? && (categories?size > 0) >
39 <#list categories as categoryElement>
40 <#if categoryElement.getPath(locale)?contains("Country") || categoryElement.getPath(locale)?contains("Pais") >
41 <#assign country = categoryElement.getTitle(locale) />
42 <#elseif categoryElement.getPath(locale)?contains("work") || categoryElement.getPath(locale)?contains("construccion") >
43 <#assign typeOfWork = categoryElement.getName() />
44 </#if>
45 </#list>
46 </#if>
47
48 <div class="container">
49 <div class="detail__banner--category">
50 <div class="detail__banner--category-icon"><span class="fcc-i_${createStyleIcon(typeOfWork)}"></span></div>
51 <#-- breadcrum -->
52 <div class="detail__banner--category-breadcrumb">
53 <@breadcrum/>
54 </div>
55 </div>
56
57 <p class="detail__banner--title">${.vars['reserved-article-title'].data}</p>
58
59 <p class="detail__banner--country">${country}</p>
60 </div>
61
62 <div class="detail__banner--featured">
63 <div class="container">
64 <div class="row">
65 <#if DatosDestacados?? && DatosDestacados.getSiblings()?has_content >
66 <#list DatosDestacados.getSiblings() as datoDestacado>
67 <div class="col-12 col-sm-3 item">
68 <p class="detail__banner--featured-data">${datoDestacado.TextoSuperior.getData()}</p>
69 <p class="detail__banner--featured-unit">${datoDestacado.TextoInferior.getData()}</p>
70 </div>
71 </#list>
72
73 </#if>
74 </div>
75 </div>
76 </div>
77
78 </section>
79
80
81 <#-- <p class="detail__slider--text d-lg-none">${.vars['reserved-article-description'].data} </p> -->
82 <section class="detail__slider container">
83 <div class="detail__slider--text d-lg-none">
84 ${.vars['reserved-article-description'].data}
85 </div>
86 <#if sep_galeria_medios?? && sep_galeria_medios.getSiblings()?has_content >
87 <div class="slick-container">
88 <div class="slick__pagination d-none d-lg-block">
89 ${.vars['reserved-article-description'].data}
90 <!-- Add Pagination -->
91 <p class="slick-fraction"></p>
92 <!-- Add Progress bar -->
93 <div class="slick-progress">
94 <div class="progress">
95 <div class="progress-bar" role="progressbar" aria-valuenow="" aria-valuemin="0" aria-valuemax="100"></div>
96 </div>
97 </div>
98 </div>
99 <div class="slick-wrapper">
100
101 <ul class="slick-active-slide">
102 <#list sep_galeria_medios.getSiblings() as galeria>
103 <#if galeria.galeria_medios?? && galeria.galeria_medios.data?has_content >
104 <li class="slick-slide">
105 <#if galeria.galeria_medios.data?contains('.tif/') || galeria.galeria_medios.data?contains('.TIF/') >
106 <a title="<@liferay.language_format arguments="${galeria.alt_galeria_medios.data}" key="show-x" />" href="${galeria.galeria_medios.data&imageThumbnail=1}" target="_blank">
107 <img src="${galeria.galeria_medios.data&imageThumbnail=1}" alt="${galeria.alt_galeria_medios.data}"/>
108 </a>
109 <#else>
110 <#assign imagen = galeria.galeria_medios.data />
111
112 <#if (imagen?has_content)>
113 <#assign imagenMap = imagen?eval />
114 <#assign imagenGroupId = imagenMap["groupId"]?number />
115 <#assign imagenUuid = imagenMap["uuid"] />
116 </#if>
117
118 <#assign urlImage = "" />
119 <#if (imagen?has_content) && (imagenGroupId != 0)>
120 <#assign dlElement = dlFileEntryLocalService.getDLFileEntryByUuidAndGroupId(imagenUuid, imagenGroupId) />
121 <#assign urlImage = portalUtil.getPortalURL(renderRequest) + '/documents/' + dlElement.getRepositoryId() + '/' + dlElement.getFolderId() + '/' + htmlUtil.escapeURL(dlElement.getTitle()) +'/' + dlElement.getUuid() + '?' + dlElement.getVersion() />
122 </#if>
123
124 <img src="${urlImage}" alt="${galeria.alt_galeria_medios.data}"/>
125
126 </#if>
127 </li>
128 </#if>
129 </#list>
130 </ul>
131
132 <ul class="slick-nav">
133 <#list sep_galeria_medios.getSiblings() as galeria>
134 <#if galeria.galeria_medios?? && galeria.galeria_medios.data?has_content >
135 <li class="slick-slide">
136 <#if galeria.galeria_medios.data?contains('.tif/') || galeria.galeria_medios.data?contains('.TIF/') >
137 <a title="<@liferay.language_format arguments="${galeria.alt_galeria_medios.data}" key="show-x" />" href="${galeria.galeria_medios.data&imageThumbnail=1}" target="_blank">
138 <img src="${galeria.galeria_medios.data&imageThumbnail=1}" alt="${galeria.alt_galeria_medios.data}"/>
139 </a>
140 <#else>
141 <#assign imagen = galeria.galeria_medios.data />
142
143 <#if (imagen?has_content)>
144 <#assign imagenMap = imagen?eval />
145 <#assign imagenGroupId = imagenMap["groupId"]?number />
146 <#assign imagenUuid = imagenMap["uuid"] />
147 </#if>
148
149 <#assign urlImage = "" />
150 <#if (imagen?has_content) && (imagenGroupId != 0)>
151 <#assign dlElement = dlFileEntryLocalService.getDLFileEntryByUuidAndGroupId(imagenUuid, imagenGroupId) />
152 <#assign urlImage = portalUtil.getPortalURL(renderRequest) + '/documents/' + dlElement.getRepositoryId() + '/' + dlElement.getFolderId() + '/' + htmlUtil.escapeURL(dlElement.getTitle()) +'/' + dlElement.getUuid() + '?' + dlElement.getVersion() />
153 </#if>
154
155 <img src="${urlImage}" alt="${galeria.alt_galeria_medios.data}"/>
156
157 </#if>
158 </li>
159 </#if>
160 </#list>
161 </ul>
162 </div>
163 <div class="slick__pagination-mobile d-lg-none">
164 <p class="slick-fraction"></p>
165 </div>
166
167 </div>
168 </#if>
169 <div class="desktop-buttons d-flex justify-content-between">
170 <button class="slick-prev slick-arrow" aria-label="Previous" type="button" style="">Previous</button>
171 <button class="slick-next slick-arrow" aria-label="Next" type="button" style="">Next</button>
172 </div>
173 </section>
174
175
176 <section class="detail__paragraph container">
177 <div class="row">
178 <div class="col-sm-8 col-sm-offset-2">
179 ${descripcion.getData()}
180 </div>
181 </div>
182 </section>
183
184 <#-- FICHAS DESTACADAS -->
185 <#if validator.isNotNull(FichasDestacadas.getSiblings()[0].TituloDestacado.getData()) >
186 <#if FichasDestacadas?? && FichasDestacadas.getSiblings()?has_content >
187 <section class="detail__featuredTag container">
188 <div class="row">
189 <#list FichasDestacadas.getSiblings() as fichaDestacada>
190 <div class="col-4">
191 <div class="detail__featuredTag-item">
192
193 <#if fichaDestacada.Icono.getData()?? && fichaDestacada.Icono.getData() != "">
194 <img alt="${fichaDestacada.Icono.getAttribute("alt")}" data-fileentryid="${fichaDestacada.Icono.getAttribute("fileEntryId")}" src="${fichaDestacada.Icono.getData()}" />
195 </#if>
196
197 <#if fichaDestacada.TituloDestacado?? && fichaDestacada.TituloDestacado.getData()?? && fichaDestacada.TituloDestacado.getData() != "">
198 <p class="detail__featuredTag-item--title">${fichaDestacada.TituloDestacado.getData()} </p>
199 </#if>
200
201 <#if fichaDestacada.DescripcionDestacado?? && fichaDestacada.DescripcionDestacado.getData()?? && fichaDestacada.DescripcionDestacado.getData() != "">
202 <p>${fichaDestacada.DescripcionDestacado.getData()} </p>
203 </#if>
204 </div>
205 </div>
206 </#list>
207 </div>
208 </section>
209 </#if>
210 </#if>
211 <section class="detail__paragraph container">
212 <div class="row">
213 <div class="col-sm-8 col-sm-offset-2">
214 <#if validator.isNotNull(HTMLLibre1.getData()) >
215 <#-- HTML LIBRE -->
216 ${HTMLLibre1.getData()}
217 </#if>
218 <#-- CITA -->
219 <div class="detail__paragraph--quote">
220 <#if existCitas(Cita) >
221 <span class="detail__paragraph--quote-icon fcc-opinion_ocio"></span>
222 <#list Cita.getSiblings() as cita>
223
224 <#if cita.Autor?? && cita.Autor.getData()?? && cita.Autor.getData() != "">
225 <p class="author">${cita.Autor.getData()} </p>
226 </#if>
227
228 <#if cita.Texto?? && cita.Texto.getData()?? && cita.Texto.getData() != "">
229 <p>${cita.Texto.getData()} </p>
230 </#if>
231 </#list>
232
233 </#if>
234 </div>
235
236 <#if validator.isNotNull(HTMLLibre2.getData()) >
237 <#-- HTML LIBRE -->
238 ${HTMLLibre2.getData()}
239 </#if>
240
241 </div>
242 </div>
243 </section>
244
245</div>
246
247
248
249<#if (currentArticleRelatedLinks?size > 0)>
250 <section class="related__projects container-fluid">
251 <h2>${languageUtil.get(locale, "construccion-tpl.related.projects")}</h2>
252 <div class="related__projects--wrapper">
253 <#list currentArticleRelatedLinks as related_entry>
254 <div class="related__projects-slide">
255 <#assign relatedAssetEntryId = related_entry.getEntryId2() />
256 <#assign relatedAssetEntry = assetEntryLocalService.getEntry(relatedAssetEntryId) />
257 <#assign relatedAssetEntryPrimKey = relatedAssetEntry.getClassPK() />
258 <#assign relatedArticle = journalArticleLocalService.getLatestArticle(relatedAssetEntryPrimKey) />
259
260 <#assign document = saxReaderUtil.read(relatedArticle.getContentByLocale(locale.toString())) />
261 <#assign rootElement = document.getRootElement() />
262 <#assign xPathSelector = saxReaderUtil.createXPath("//dynamic-element[@name='imagen']/dynamic-content") />
263 <#assign imagenRelatedArticulo = xPathSelector.selectSingleNode(rootElement).getStringValue() />
264
265 <#assign imagenRelatedArticuloFileEntryId = 0 />
266 <#if (imagenRelatedArticulo?has_content)>
267 <#assign imagenRelatedArticuloMap = imagenRelatedArticulo?eval />
268 <#assign imagenRelatedArticuloFileEntryId = imagenRelatedArticuloMap["fileEntryId"]?number />
269 </#if>
270
271 <#assign relatedJournalArticleResourcePrimKey = relatedArticle.getResourcePrimKey() />
272 <#assign relatedJournalArticleAssetEntry = assetEntryLocalService.getEntry("com.liferay.journal.model.JournalArticle", relatedJournalArticleResourcePrimKey) />
273 <#assign relatedCategoryList = relatedJournalArticleAssetEntry.getCategories() >
274
275
276
277 <#assign categories = currentArticleAssetEntry.getCategories() >
278
279 <#if relatedCategoryList?? && (relatedCategoryList?size > 0) >
280 <#list relatedCategoryList as categoryElement>
281 <#if categoryElement.getPath(locale)?contains("Country") || categoryElement.getPath(locale)?contains("Pais") >
282 <#assign relatedCountry = categoryElement.getTitle(locale) />
283 <#elseif categoryElement.getPath(locale)?contains("work") || categoryElement.getPath(locale)?contains("construccion") >
284 <#assign relatedTypeOfWork = categoryElement.getName() />
285 </#if>
286 </#list>
287 </#if>
288
289 <#-- Enlace proyecto relacionado -->
290 <a href="${themeDisplay.getURLPortal()}${themeDisplay.getURLCurrent()[0..themeDisplay.getURLCurrent()?index_of("/-/")+2]}${relatedArticle.getUrlTitle()}"></a>
291
292 <div class="related__projects-slide--img">
293 <span class="related__projects-slide--icon fcc-i_${createStyleIcon(relatedTypeOfWork)}"></span>
294 <#if (imagenRelatedArticuloFileEntryId != 0)>
295 <#assign dlElement = dlFileEntryLocalService.getDLFileEntry(imagenRelatedArticuloFileEntryId) />
296 <img src="${themeDisplay.getPortalURL()}/documents/${dlElement.getRepositoryId()}/${dlElement.getFolderId()}/${dlElement.getTitle()}/${dlElement.getUuid()}?${dlElement.getVersion()}" alt="${imagenRelatedArticuloMap["alt"]}">
297 <#else>
298 <#assign imagen_listado_defecto = layout.getGroup().getExpandoBridge().getAttribute("ciudad-fcc-construccion-listado") />
299 <img src="${imagen_listado_defecto}" alt="${relatedArticle.getTitle()}">
300 </#if>
301 </div>
302 <#-- Titulo y pais proyecto relacionado -->
303 <div class="related__projects-slide--text">
304 <p class="related__projects-slide--title">${relatedArticle.getTitle()} </p>
305 <p>${relatedCountry}</p>
306 </div>
307 </div>
308 </#list>
309 </div>
310 </section>
311</#if>
312
313<#macro breadcrum>
314
315 <#assign layout_actual = layout />
316 <#assign breadcrumbList = [] />
317
318 <#list 0..10 as i>
319 <#assign parentId = layout_actual.getParentPlid() />
320 <#if parentId == 0 >
321 <#break>
322 <#else>
323 <#assign layout_actual = layoutLocalService.getLayout(parentId) />
324 <#assign breadcrumbList = breadcrumbList + [layout_actual] />
325 </#if>
326 </#list>
327
328 <#assign size = breadcrumbList?size - 1/>
329
330 <#list breadcrumbList?reverse as breadcrumb>
331 <p>${breadcrumb.getName(locale)}</p>
332 <#--<#assign completeUrl = portalUtil.getLayoutFullURL(breadcrumb, themeDisplay) />
333 <li><a href="${completeUrl}">${breadcrumb.getName(locale)}</a></li>-->
334 </#list>
335
336</#macro>
337
338<#function createStyleIcon name>
339 <#return name?replace("á", "a")?replace("é","e")?replace("í","i")?replace("ó","o")?replace("ú","u")?replace(" ","")?lower_case >
340</#function>
341
342<#function existCitas Cita>
343 <#if Cita?? && Cita.getSiblings()?has_content >
344 <#list Cita.getSiblings() as cita>
345 <#if cita.Autor?? && cita.Autor.getData()?? && cita.Autor.getData() != "">
346 <#return true>
347 </#if>
348
349 <#if cita.Texto?? && cita.Texto.getData()?? && cita.Texto.getData() != "">
350 <#return true>
351 </#if>
352 </#list>
353 </#if>
354 <#return false>
355</#function>
356 <script>
357$('.slick-prev').on('click', function(){
358var slideIndex = $('.slick-active').attr('data-slick-index');
359var newind = parseInt(slideIndex) - 1;
360$('.slick-active-slide').slick("slickGoTo", parseInt(newind));
361});
362$('.slick-next').on('click', function(){
363var slideIndex = $('.slick-active').attr('data-slick-index');
364var newind = parseInt(slideIndex) + 1;
365$('.slick-active-slide').slick("slickGoTo", parseInt(newind));
366});
367
368</script>