The following has evaluated to null or missing: ==> cur_foto.imagen.getAttribute("fileEntryId") [in template "42020#42061#69198" at line 36, column 144] ---- 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: ${cur_foto.imagen.getAttribute("fileE... [in template "42020#42061#69198" at line 36, column 142] ----
1<style>
2 #map {
3 height: 100%;
4 position: relative;
5 overflow: visible;
6 }
7</style>
8<#if ! themeDisplay ? has_content>
9 <#assign liferay_theme = PortletJspTagLibs["/META-INF/liferay-theme.tld"] />
10 <@liferay_theme["defineObjects"] />
11</#if>
12<h1 class="title">${themeDisplay.getLayout().getName(locale)}</h1>
13<div class="wrap-content mB30 clearfix">
14 <#assign firstImageNotEmpty = false />
15 <#if galeriaImagenes.foto?has_content>
16 <#if galeriaImagenes.foto.getSiblings()?size == 1>
17 <#assign firstImage = galeriaImagenes.foto.getSiblings()?first>
18 <#if firstImage??>
19 <#if (firstImage.imagen?? && firstImage.imagen.getData()?? && firstImage.imagen.getData() != "")>
20 <#assign firstImageNotEmpty = true />
21 </#if>
22 </#if>
23 <#else>
24 <#assign firstImageNotEmpty = true />
25 </#if>
26 </#if>
27 <#if firstImageNotEmpty || descripcionProyecto.getData()?has_content>
28 <div class="col-magic-slider mB20">
29 <#if firstImageNotEmpty>
30 <div class="pull-right w-50 mL20 mB20">
31 <section class="slider-minOwl">
32 <div id="slider-minOwl" class="owl-carousel owl-theme">
33 <#list galeriaImagenes.foto.getSiblings() as cur_foto>
34 <#if galeriaImagenes.foto.imagen.getData()?? && galeriaImagenes.foto.imagen.getData() != "">
35 <div class="item">
36 <img class="img-responsive w-100 cornerBR" data-fileentryid="${cur_foto.imagen.getAttribute("fileEntryId")}" alt="${cur_foto.imagen.getAttribute("alt")}" src="${cur_foto.imagen.getData()}" />
37 <#if cur_foto.nombre.getData()?has_content>
38 <div class="minwc">
39 <p>${cur_foto.nombre.getData()}</p>
40 </div>
41 </#if>
42 </div>
43 </#if>
44 </#list>
45 </div>
46 </section>
47 </div>
48 </#if>
49 <div>
50 <#if descripcionProyecto.getData()?has_content>
51 ${descripcionProyecto.getData()}
52 </#if>
53 <#if nombreProyecto.getData()?has_content || sociedadAdjudicataria.getData()?has_content || cliente.getData()?has_content || fechaEjecucion.getData()?has_content>
54 <ul>
55 <#if nombreProyecto.getData()?has_content>
56 <li><strong><@liferay.language key="nombreProyectoCol" />: </strong>${nombreProyecto.getData()}</li>
57 </#if>
58 <#if sociedadAdjudicataria.getData()?has_content>
59 <li><strong><@liferay.language key="sociedadCol" />: </strong>${sociedadAdjudicataria.getData()}</li>
60 </#if>
61 <#if cliente.getData()?has_content>
62 <li><strong><@liferay.language key="clienteCol" />: </strong>${cliente.getData()}</li>
63 </#if>
64 <#if fechaEjecucion.getData()?has_content>
65 <li><strong><@liferay.language key="fechaCol" />: </strong>${fechaEjecucion.getData()}</li>
66 </#if>
67 <ul>
68 </#if>
69 </div>
70 </div>
71 </#if>
72</div>
73<#if datosSignificativos.dato?has_content>
74 <#if datosSignificativos.dato.getSiblings()?has_content>
75 <#assign firstDatoNotEmpty = false />
76 <#if datosSignificativos.dato.getSiblings()?size == 1>
77 <#assign firstDato = datosSignificativos.dato.getSiblings()?first>
78 <#if firstDato??>
79 <#if (firstDato.icono?? && firstDato.icono.getData()?? && firstDato.icono.getData() != "") || (firstDato.nombreDato?? && firstDato.nombreDato.getData()?? && firstDato.nombreDato.getData() != "")
80 || (firstDato.subtituloDato.getData()?? && firstDato.subtituloDato.getData() != "")>
81 <#assign firstDatoNotEmpty = true />
82 </#if>
83 </#if>
84 <#else>
85 <#assign firstDatoNotEmpty = true />
86 </#if>
87 <#if firstDatoNotEmpty>
88 <div class="pB35">
89 <div class="flexbox">
90 <#if datosSignificativos.dato.getSiblings()?has_content>
91 <#list datosSignificativos.dato.getSiblings() as cur_dato>
92 <div class="flexColumna blueBox cornerBR">
93 <#if cur_dato.iconoDato.getData()?? && cur_dato.iconoDato.getData() != "">
94 <div class="blueBox-image">
95 <img data-fileentryid="${cur_dato.iconoDato.getAttribute("fileEntryId")}" alt="${cur_dato.iconoDato.getAttribute("alt")}" src="${cur_dato.iconoDato.getData()}" class="img46" />
96 </div>
97 </#if>
98 <div class="blueBox-text">
99 <h4 class="txtAzulOscuro">${cur_dato.nombreDato.getData()}</h4>
100 <p>${cur_dato.subtituloDato.getData()}</p>
101 </div>
102 </div>
103 </#list>
104 </#if>
105 </div>
106 </div>
107 </#if>
108 </#if>
109</#if>
110<#if video.linkVideoExterno.getData()?? || video.linkVideoExterno.getData() != "">
111 <div class="row pB35">
112 <div class="col-12">
113 <h2 class="title mB10">${video.tituloVideo.getData()}</h2>
114 <p>${video.subtituloVideo.getData()}</p>
115 </div>
116 <#if video.linkVideoExterno.getData()?? && video.linkVideoExterno.getData() != "">
117 <div class="col-12 col-md-6">
118 <div class="embed-responsive embed-responsive-16by9">
119 <iframe class="embed-responsive-item" src="${video.linkVideoExterno.getData()}" allowfullscreen="allowfullscreen"></iframe>
120 </div>
121 </div>
122 </#if>
123 <#if video.linkVideoInterno.getData()?? && video.linkVideoInterno.getData() != "">
124 <div class="col-12 col-md-6">
125 <div class="embed-responsive embed-responsive-16by9">
126 <#if video.imagenVideo??>
127 <#if video.imagenVideo.getData()?? && video.imagenVideo.getData() != "">
128 <video controls poster="${video.imagenVideo.getData()}" preload="metadata">
129 <source src="${video.linkVideoInterno.getData()}" type="video/mp4">
130 <source src="${video.linkVideoInterno.getData()}" type="video/ogg" />
131 <source src="${video.linkVideoInterno.getData()}" type="video/webm" />
132 </video>
133 <#else>
134 <video controls preload="metadata">
135 <source src="${video.linkVideoInterno.getData()}#t=1" type="video/mp4">
136 <source src="${video.linkVideoInterno.getData()}#t=1" type="video/ogg" />
137 <source src="${video.linkVideoInterno.getData()}#t=1" type="video/webm" />
138 </video>
139 </#if>
140 <#else>
141 <video controls preload="metadata">
142 <source src="${video.linkVideoInterno.getData()}#t=1" type="video/mp4">
143 <source src="${video.linkVideoInterno.getData()}#t=1" type="video/ogg" />
144 <source src="${video.linkVideoInterno.getData()}#t=1" type="video/webm" />
145 </video>
146 </#if>
147 </div>
148 </div>
149 </#if>
150 </div>
151</#if>
152<#assign latitude = 0>
153<#assign longitude = 0>
154
155<#if (geolocalizacion.getData() != "")>
156
157 <#assign geolocationJSONObject = jsonFactoryUtil.createJSONObject(geolocalizacion.getData())>
158
159 <#assign latitude = geolocationJSONObject.getDouble("latitude")>
160 <#assign longitude = geolocationJSONObject.getDouble("longitude")>
161</#if>
162<#if separadorCoordenadas?has_content>
163 <#if separadorCoordenadas.latitud.getData() != "" && separadorCoordenadas.longitud.getData() != "">
164 <#assign latitude = separadorCoordenadas.latitud.getData()?replace(",", ".")>
165 <#assign longitude = separadorCoordenadas.longitud.getData()?replace(",", ".")>
166 </#if>
167</#if>
168<#if (geolocalizacion.getData() != "") || (separadorCoordenadas?has_content && separadorCoordenadas.latitud.getData() != "" && separadorCoordenadas.longitud.getData() != "")>
169 <#assign PortalPreferencesUtil = staticUtil["com.liferay.portal.kernel.service.PortalPreferencesLocalServiceUtil"] />
170 <#assign portletPreferences = PortalPreferencesUtil.getPreferences(companyId, 1) />
171 <#assign googleMapsAPIKey = themeDisplay.getScopeGroup().getTypeSettingsProperties().getProperty("googleMapsAPIKey", "") />
172 <div class="row pB35">
173 <div class="wrap-content mT30 mB60 clearfix col-12">
174
175 <div id="traza-maps" class="js-maptraza" style="position: relative; overflow: hidden;">
176 <div class="lfr-map yui3-widget lfrmapgoogle" id="geolocalizacionMap" style="position: relative; overflow: hidden;"></div>
177 </div>
178
179 </div>
180 </div>
181 <script type="text/javascript">
182 function initMap() {
183 var project = {lat: ${latitude?number}, lng:${longitude?number}};
184 var map = new google.maps.Map(document.getElementById('geolocalizacionMap'), {zoom:18, center: project});
185 var marker = new google.maps.Marker({position: project, map: map});
186 }
187 </script>
188 <script async defer src="https://maps.googleapis.com/maps/api/js?key=${googleMapsAPIKey}&callback=initMap"></script>
189</#if>
190<#assign back = languageUtil.get(locale, "back-to-top")>
191<button class="volver" onclick="goBack()" style="background-color: #002C58;color: #ffffff;border-radius: 0 0 20px 0;padding: 8px 20px;font-size: 15.5px;color: #fff;background-color: #002C58;border: none;width: auto;height: 42px;float: right;margin-bottom: 1.5em;">< ${back?keep_before(" ")}</button>
192<script>
193 function goBack() {
194 window.history.back();
195 }
196</script>
197<style>
198.pull-right {
199 float: right;
200}
201</style>