An error occurred while processing the template.
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()}" referrerpolicy="strict-origin-when-cross-origin" 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<#-- El mapa solo se muestra si Latitud y Longitud están informadas --> 
153<#assign latitude = "" /> 
154<#assign longitude = "" /> 
155<#assign hasCoordinates = false /> 
156 
157<#if separadorCoordenadas?? 
158	&& separadorCoordenadas.latitud?? 
159	&& separadorCoordenadas.longitud??> 
160 
161	<#assign latitude = 
162		separadorCoordenadas.latitud.getData()?trim 
163	/> 
164 
165	<#assign longitude = 
166		separadorCoordenadas.longitud.getData()?trim 
167	/> 
168 
169	<#if latitude?has_content && longitude?has_content> 
170		<#attempt> 
171			<#assign latitude = 
172				latitude 
173					?replace(",", ".") 
174					?number 
175			/> 
176 
177			<#assign longitude = 
178				longitude 
179					?replace(",", ".") 
180					?number 
181			/> 
182 
183			<#assign hasCoordinates = true /> 
184		<#recover> 
185			<#assign latitude = "" /> 
186			<#assign longitude = "" /> 
187			<#assign hasCoordinates = false /> 
188		</#attempt> 
189	</#if> 
190</#if> 
191 
192<#if hasCoordinates> 
193	<#assign googleMapsAPIKey = 
194		themeDisplay 
195			.getScopeGroup() 
196			.getTypeSettingsProperties() 
197			.getProperty("googleMapsAPIKey", "") 
198	/> 
199 
200	<div class="row pB35"> 
201		<div class="wrap-content mT30 mB60 clearfix col-12"> 
202			<div 
203				id="traza-maps" 
204				class="js-maptraza" 
205				style="position: relative; overflow: hidden;" 
206			> 
207				<div 
208					class="lfr-map yui3-widget lfrmapgoogle" 
209					id="geolocalizacionMap" 
210					style="position: relative; overflow: hidden;" 
211				></div> 
212			</div> 
213		</div> 
214	</div> 
215 
216	<script type="text/javascript"> 
217		function initMap() { 
218			var mapElement = 
219				document.getElementById("geolocalizacionMap"); 
220 
221			if (!mapElement) { 
222				return; 
223			} 
224 
225			var project = { 
226				lat: ${latitude?c}, 
227				lng: ${longitude?c} 
228			}; 
229 
230			var map = new google.maps.Map( 
231				mapElement, 
232				{ 
233					zoom: 18, 
234					center: project 
235				} 
236			); 
237 
238			new google.maps.Marker({ 
239				position: project, 
240				map: map 
241			}); 
242		} 
243	</script> 
244 
245	<script 
246		async 
247		defer 
248		src="https://maps.googleapis.com/maps/api/js?key=${googleMapsAPIKey}&amp;callback=initMap" 
249	></script> 
250</#if> 
251<#assign back = languageUtil.get(locale, "back-to-top")> 
252<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;">&lt;&nbsp;&nbsp;&nbsp;${back?keep_before(" ")}</button> 
253<script> 
254    function goBack() { 
255        window.history.back(); 
256    } 
257</script> 
258<style> 
259.pull-right { 
260    float: right; 
261} 
262</style> 

This website uses its own and third-party cookies to improve the user experience and analyze their behavior in order to improve the service offered.
You can consult additional information about the cookies installed on our Cookies policy.

Cookie Settings

Cookie declaration

TECHNICAL

These cookies are exempt from compliance with article 22.2 of the LSSI in accordance with the recommendations indicated by the European authority on privacy and cookies. In accordance with the above and although configuration, acceptance or denial is not possible, the editor of this website offers information about them in an exercise of transparency with the user.

  • Name: LFR_Session_STATE_*, Provider: Liferay, Purpose: Manages the session as a registered user , Expiration: Session, Type: HTTP

  • Name: GUEST_LANGUAGE_ID, Provider: Liferay, Purpose: Determines the language with which you access , to show the same in the next session, Expiration: 1 year, Type: HTTP

  • Name: ANONYMOUS_USER_ID, Provider: Liferay, Purpose: Manages the session as an unregistered user , Expiration: 1 year, Type: HTTP

  • Name: COOKIE_SUPPORT, Provider: Liferay, Purpose: Identifies that the use of cookies for the operation of the portal, Expiration: 1 year, Type: HTTP

  • Name: JSessionID, Provider: Liferay, Purpose: Manages login and indicates who is using the site, Expiry: Session, Type: HTTP

  • Name: SACYRGDPR, Supplier: Sacyr, Purpose: Used to manage the cookie policy , Expiration: Session, Type: HTTP