Se ha producido un error al procesar la plantilla.
Java method "com.sun.proxy.$Proxy95.getLayout(long)" threw an exception when invoked on com.sun.proxy.$Proxy95 object "com.liferay.layout.internal.service.LayoutLocalServiceWrapper@3e9f2197"; 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())> 
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> 
Se ha producido un error al procesar la plantilla.
Java method "com.sun.proxy.$Proxy95.getLayout(long)" threw an exception when invoked on com.sun.proxy.$Proxy95 object "com.liferay.layout.internal.service.LayoutLocalServiceWrapper@3e9f2197"; 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())> 
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> 

Este sitio web utiliza cookies propias y de terceros para mejorar la experiencia del usuario y analizar su comportamiento con el fin de mejorar el servicio ofrecido.
Puede consultar información adicional sobre las cookies instaladas en nuestra Política de Cookies.

Configuración de Cookies

Declaración de cookies

Estas cookies se encuentran exceptuadas del cumplimiento del artículo 22.2 de la LSSI de acuerdo con las recomendaciones indicadas por la autoridad europea en materia de privacidad y cookies. De acuerdo con lo anterior y aunque no es posible su configuración, aceptación o denegación, el editor de este sitio web ofrece información sobre las mismas en un ejercicio de transparencia con el usuario.

  • Nombre: LFR_Sesión_STATE_*, Proveedor: Liferay, Propósito: Administra la sesión como usuario registrado, Caducidad: Sesión, Tipo: HTTP

  • Nombre: GUEST_LANGUAGE_ID, Proveedor: Liferay, Propósito: Determina el idioma con el que accede, para mostrar el mismo en la próxima sesión, Caducidad: 1 año, Tipo: HTTP

  • Nombre: ANONYMOUS_USER_ID, Proveedor: Liferay, Propósito: Administra la sesión como usuario no registrado, Caducidad: 1 año, Tipo: HTTP

  • Nombre: COOKIE_SUPPORT, Proveedor: Liferay, Propósito: Identifica que es necesario el uso de cookies para el funcionamiento del portal, Caducidad: 1 año, Tipo: HTTP

  • Nombre: JSesiónID, Proveedor: Liferay, Propósito: Administra el inicio de sesión e indica que está usando el sitio, Caducidad: Sesión, Tipo: HTTP

  • Nombre: SACYRGDPR, Proveedor: Sacyr, Propósito: Utilizada para gestionar la política de cookies, Caducidad: Sesión, Tipo: HTTP

Estas cookies nos permiten contar las visitas y fuentes de circulación para poder medir y mejorar el desempeño de nuestro sitio. Nos ayudan a saber qué páginas son las más o menos populares, y ver cuántas personas visitan el sitio. Toda la información que recogen estas cookies es agregada y, por lo tanto, anónima.

  • Nombre: _ga_<container-id>, Proveedor: Google, Propósito: Recopila datos sobre el número de veces que un usuario ha visitado el sitio web además de las fechas de la primera visita y de la más reciente. Utilizada por Google Analytics, Caducidad: 2 años Tipo: HTTP

  • Nombre: _ga, Proveedor: Google, Propósito: Registra una identificación única que se utiliza para generar datos estadísticos acerca de cómo utiliza el visitante el sitio web, Caducidad: 2 años Tipo: HTTP