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