An error occurred while processing the template.
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@49a250cb"; 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>
An error occurred while processing the template.
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@49a250cb"; 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>