An error occurred while processing the template.
Java method "jdk.proxy3.$Proxy93.getLayout(long)" threw an exception when invoked on jdk.proxy3.$Proxy93 object "com.liferay.layout.internal.service.LayoutLocalServiceWrapper@776140e2"; see cause exception in the Java stack trace. ---- FTL stack trace ("~" means nesting-related): - Failed at: #assign parentLayout = layoutLocalSer... [in template "42020#42061#121889024" 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>
Prevention of money laundering and terrorist financing
We are firmly committed and actively work to prevent money laundering and terrorist financing. As subjects bound by regulation in this regard, based on some of the activities we carry out, we have developed a control model that allows compliance with current regulation.
We have enabled a specific channel (sacyr.prevencionbc@sacyr.com) to report any possible violation of Anti-money laundering and terrorist financing regulations and/or the internal policies and procedures implemented by te Sacyr Group. This channel also serves to address queries on the matter.
To report a potential violation of Anti-money laundering and terrorist financing regulations, or the internal policies and procedures, please complete the following form.