An error occurred while processing the template.
Java method "jdk.proxy3.$Proxy100.getLayout(long)" threw an exception when invoked on jdk.proxy3.$Proxy100 object "com.liferay.layout.internal.service.LayoutLocalServiceWrapper@6c808cb0"; see cause exception in the Java stack trace.

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #assign parentLayout = layoutLocalSer...  [in template "42020#42061#231039412" at line 89, column 25]
----
1<#--CONFIGURAR EL NAVIGATION MENU PARA QUE MUESTRE EL MENÚ DE LA PÁGINA PADRE A LA ACTUAL --> 
2<#assign layoutLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.LayoutLocalService")> 
3<#if entries?has_content> 
4	<div class="inner-page__header"> 
5		<div class="row mx-0"> 
6			<div class="col-sm-6 px-0"> 
7				<div class="inner-page__header-subnavigation"> 
8					<#-- Obtengo la página actual y la padre de la actual --> 
9					<#list entries as navigationEntry> 
10						<#if navigationEntry.isSelected()> 
11							<#assign currentEntry = navigationEntry> 
12							<#-- Obtengo toda la lista de ancestros del nodo y la recorro en reverse, la raiz primero --> 
13							<#list currentEntry.getLayout().getAncestors()?reverse as itemLayout> <#-- Tipo Layout --> 
14								<#if itemLayout?index == 0><#-- Este es título superior de la página correspoondiente al nivel 1--> 
15									<p class="inner-page__header-parent">${itemLayout.getName(locale)}</p> 
16								<#elseif itemLayout?index == 1><#-- Este es el título principal de la página nivel 2, correspondiente al segundo nivel, está también más abajo --> 
17									<p class="inner-page__header-title js-toggle-subnavigation">${itemLayout.getName(locale)}</p> 
18								<#elseif itemLayout?index == 2> 
19									<#assign third = itemLayout> 
20								</#if> 
21								<#if itemLayout?index == 1 && itemLayout.getParentPlid()??  || currentEntry.getLayout().getAncestors()?size == 1> 
22									<#if currentEntry.getLayout().getAncestors()?size == 1> 
23										<#assign parentLayout = layoutLocalService.getLayout(currentEntry.getLayout().getParentPlid())> 
24										<#-- Este es el título principal de la página, correspondiente al segundo nivel, está también más abajo --> 
25										<#-- Si el entry seleccionado coincide con este nivel se pintará aquí, en vez de arriba --> 
26										<p class="inner-page__header-title js-toggle-subnavigation">${currentEntry.getLayout().getName(locale)}</p> 
27									<#else> 
28										<#assign parentLayout = layoutLocalService.getLayout(itemLayout.getParentPlid())> 
29									</#if> 
30									<#if parentLayout.hasChildren()> 
31										<#-- Lista de enlaces hermanos del nivel 2 --> 
32										<ul class="subnavigation"> 
33											<#list parentLayout.getChildren() as childrenLayout> 
34												<#if currentEntry.getLayout().getPlid() != childrenLayout.getPlid() && !childrenLayout.isChildSelected(true, currentEntry.getLayout()) && !childrenLayout.isHidden()> 
35													<#if !childrenLayout.getLayoutType().isBrowsable() && childrenLayout.hasChildren() > 
36														<li><a href="${getUrlPageSet(childrenLayout)}" data-senna-off="true">${childrenLayout.getName(locale)}</a></li> 
37													<#else> 
38														<li><a href="${getFriendlyURL(childrenLayout)}" data-senna-off="true">${childrenLayout.getName(locale)}</a></li> 
39													</#if> 
40												</#if> 
41											</#list> 
42										</ul> 
43									</#if> 
44								</#if> 
45							</#list> 
46						</#if> 
47					</#list> 
48				</div> 
49			</div> 
50			<div class="col-sm-6 px-0"> 
51				<div class="inner-page__header-image"> 
52					<#assign hashPreferences = {"displayStyle":"full-content", 
53												"enableRelatedAssets":"false", 
54												"enableRss":"false", 
55												"enableRatings":"false", 
56												"showMetadataDescriptions":"false", 
57												"enableFlags":"false", 
58												"showAddContentButton":"false", 
59												"subtypeFieldsFilterEnabledDLFileEntryAssetRendererFactory":"false", 
60												"showExtraInfo":"false", 
61												"showOnlyLayoutAssets":"false", 
62												"enableSocialBookmarks":"false", 
63												"showContextLink":"false", 
64												"enableCommentRatings":"false", 
65												"enablePrint":"false", 
66												"showAssetTitle":"false", 
67												"delta":1}/> 
68					<#assign preferences = freeMarkerPortletPreferences.getPreferences(hashPreferences) /> 
69					<@liferay_portlet["runtime"] 
70						defaultPreferences="${preferences}" 
71						portletName="com_liferay_asset_publisher_web_portlet_AssetPublisherPortlet" 
72						instanceId="cabecera_imagen_prueba_4_${themeDisplay.getPortletDisplay().getInstanceId()}" 
73					/> 
74 
75				</div> 
76			</div> 
77		</div> 
78 
79		<#-- Cuando hay 4 niveles, se guarda la referencia de ancestro en la variable third para pintarla aquí --> 
80		<#if third??> 
81			<#assign currentLayout = third> 
82			<#assign parentLayout = layoutLocalService.getLayout(currentLayout.getParentPlid())> 
83			<@printChildrens parentLayout, currentLayout > </@printChildrens> 
84		</#if> 
85 
86		<#-- Siempre que haya más de 3 niveles o más, se pinta el elemento actual con sus hermanos.--> 
87		<#if currentEntry??> 
88			<#assign currentLayout = currentEntry.getLayout()> 
89			<#assign parentLayout = layoutLocalService.getLayout(currentLayout.getParentPlid())> 
90			<@printChildrens parentLayout, currentLayout > </@printChildrens> 
91 
92			<#-- Se pinta los hijos porque puede que el padre sea una página en sí --> 
93			<#if currentEntry.hasChildren()> 
94				<#assign currentLayout = currentEntry.getLayout()/> 
95				<#assign parentLayout = currentEntry.getLayout()> 
96				<@printChildrens parentLayout, currentLayout > </@printChildrens> 
97			</#if> 
98		</#if> 
99	</div> 
100 
101</#if> 
102 
103<#macro printChildrens parentLayout, currentLayout> 
104	<#if parentLayout.hasChildren() && currentEntry.getLayout().getAncestors()?size gt 1> 
105		<div class="inner-page__menu"> 
106			<div class="container"> 
107				<div class="col-sm-12 px-0"> 
108					<#assign childSelected = layout.getName(locale) /> 
109					<#list parentLayout.getChildren() as childrenLayout> 
110						<#if currentLayout.getPlid() == childrenLayout.getPlid()> 
111							<#assign childSelected = childrenLayout.getName(locale) /> 
112						</#if> 
113					</#list> 
114 
115					<p class="subnavigation-button js-toggle-subnavigation2">${childSelected}</p> 
116					<div class="inner-page__navigation subnavigation2"> 
117						<#list parentLayout.getChildren() as childrenLayout> 
118							<#if !childrenLayout.isHidden() > 
119								<#-- Pinta uno u otro dependiendo con class active si es el seleccionado o externo si el enlace es a fuera--> 
120								<#if currentLayout.getPlid() != childrenLayout.getPlid()> 
121									<#if childrenLayout.isTypeURL()> 
122										<a href="${getFriendlyURL(childrenLayout)}" class="extern" target="_blank" >${childrenLayout.getName(locale)}</a> 
123									<#elseif childrenLayout.isTypeLinkToLayout() > 
124										<a href="${getFriendlyURL(childrenLayout.getLinkedToLayout())}" class="">${childrenLayout.getName(locale)}</a> 
125									<#elseif !childrenLayout.getLayoutType().isBrowsable() && childrenLayout.hasChildren() > 
126										<a href="${getUrlPageSet(childrenLayout)}" class="">${childrenLayout.getName(locale)}</a> 
127									<#else> 
128										<a href="${getFriendlyURL(childrenLayout)}" class="">${childrenLayout.getName(locale)}</a> 
129									</#if> 
130								<#else><#-- Este es el activo --> 
131									<#if !childrenLayout.getLayoutType().isBrowsable() && childrenLayout.hasChildren() > 
132										<a href="${getUrlPageSet(childrenLayout)}" class="active hidden-xs">${childrenLayout.getName(locale)}</a> 
133									<#else> 
134										<a href="${getFriendlyURL(childrenLayout)}" class="active hidden-xs">${childrenLayout.getName(locale)}</a> 
135									</#if> 
136								</#if> 
137							</#if> 
138						</#list> 
139					</div> 
140				</div> 
141			</div> 
142		</div> 
143	</#if> 
144</#macro> 
145 
146 
147<#function getFriendlyURL layout> 
148	<#if portalUtil.getLayoutFriendlyURL(layout, themeDisplay)?? > 
149		<#return portalUtil.getLayoutFriendlyURL(layout, themeDisplay) /> 
150	<#else> 
151		<#-- Para páginas de tipo agrupador, se genera la URL de forma manual --> 
152		<#return themeDisplay.getScopeGroup().getPathFriendlyURL(false,themeDisplay) + themeDisplay.getSiteGroup().getFriendlyURL() + layout.getFriendlyURL(locale) /> 
153	</#if> 
154</#function> 
155 
156 
157<#function getUrlPageSet layout> 
158	<#-- Se mira 2 niveles --> 
159	<#assign item = layout.getChildren()?first /> 
160 
161	<#if !item.getLayoutType().isBrowsable() && item.hasChildren()> 
162		<#assign item = item.getChildren()?first /> 
163	</#if> 
164 
165	<#return getFriendlyURL(item)> 
166</#function> 

Investor Day 2019

Join the replay of the webcast of Sacyr Concesiones Investor Day 2019.  The presentation was held on June 4, 2019 at 11:00 a.m. (CEST). You may download our presentation and asset valuation model below.

Join webcast replay

YEAR 2019

Sacyr Concessions Presentation Investor Day 2019
4.33 MB

YEAR 2019

Sacyr Concessions Valuation Investor Day 2019
Excel model with the valuation published in the Investor Day 2019
0.15 MB