The following has evaluated to null or missing:
==> cur_level2.level3 [in template "20097#20123#62018" at line 109, column 30]
----
Tip: It's the step after the last dot that caused this error, not those before it.
----
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: #if cur_level2.level3.getSiblings()?h... [in template "20097#20123#62018" at line 109, column 25]
----
1<#assign found = false>
2<#assign codigoMenu = themeDisplay.getLayout().getExpandoBridge().getAttribute("Codigo Menu")>
3<#assign navChildsJSON = jsonFactoryUtil.createJSONArray() />
4<#if (codigoMenu?index_of(",") > -1) >
5 <#assign codigoMenu = codigoMenu?split(",")[0]>
6</#if>
7
8<#if level1.getSiblings()?has_content>
9 <#list level1.getSiblings() as cur_level1>
10
11 <#if codigoMenu?has_content && cur_level1.code1.getData() == codigoMenu>
12 <#assign code1 = cur_level1.code1.getData()>
13 <#assign found = true>
14
15 <#if cur_level1.level2.getSiblings()?has_content && cur_level1.level2.getSiblings()?first.getData()?has_content>
16 <#assign navChildsJSON = jsonFactoryUtil.createJSONArray() />
17 <#list cur_level1.level2.getSiblings() as cur_level2>
18 <#if cur_level2.getData() != "">
19 <#assign curLevel2JSON = jsonFactoryUtil.createJSONObject() />
20 <#assign id = cur_level2.code2.getData() />
21 <#assign href = cur_level2.link2.getFriendlyUrl()?replace('/web/guest', '')>
22 <#if !href?has_content>
23 <#assign href = cur_level2.linkExternoLvl2.getData()>
24 </#if>
25 <#assign title = cur_level2.getData() />
26 <#assign empty = curLevel2JSON.put("id", id) />
27 <#assign empty = curLevel2JSON.put("href", href) />
28 <#assign empty = curLevel2JSON.put("title", title) />
29
30 <#assign empty = navChildsJSON.put(curLevel2JSON) />
31 </#if>
32 </#list>
33 </#if>
34
35 <#break>
36 </#if>
37
38 <#if cur_level1.level2.getSiblings()?has_content>
39 <#list cur_level1.level2.getSiblings() as cur_level2>
40
41 <#if codigoMenu?has_content && cur_level2.code2.getData() == codigoMenu>
42 <#assign code1 = cur_level1.code1.getData()>
43 <#assign code2 = cur_level2.code2.getData()>
44 <#assign found = true>
45 <#break>
46 </#if>
47
48 <#if cur_level2.level3?has_content && cur_level2.level3.getSiblings()?has_content>
49 <#list cur_level2.level3.getSiblings() as cur_level3>
50
51 <#if codigoMenu?has_content && cur_level3.code3.getData() == codigoMenu>
52 <#assign code1 = cur_level1.code1.getData()>
53 <#assign code2 = cur_level2.code2.getData()>
54 <#assign code3 = cur_level3.code3.getData()>
55 <#assign found = true>
56 <#break>
57 </#if>
58
59 </#list>
60 </#if>
61
62 <#if found><#break></#if>
63 </#list>
64 </#if>
65
66 <#if found><#break></#if>
67 </#list>
68</#if>
69
70<#assign selectedItem = [code1!?string, code2!?string, code3!?string]>
71
72<div class="finsa-productos-tabs">
73<div class="finsa-productos-tabs__accordion hide-in-mobile">
74<#if level1.getSiblings()?has_content>
75 <#list level1.getSiblings() as cur_level1>
76 <div class="accordion-item finsa-productos-tabs__accordion-item">
77 <#assign lvl1Link = cur_level1.link1.getFriendlyUrl()?replace('/web/guest', '')>
78 <#if !lvl1Link?has_content>
79 <#assign lvl1Link = cur_level1.linkExterno.getData()>
80 </#if>
81 <div id="${cur_level1.code1.getData()}" class="finsa-productos-tabs__accordion-button <#if !selected(cur_level1.code1)>collapsed<#else>finsa-productos-tabs__active</#if>" data-toggle="collapse"
82 data-target="#collapse${cur_level1?index}" aria-expanded="${selected(cur_level1.code1)?c}" aria-controls="collapse${cur_level1?index}" onclick="location.href='${lvl1Link}';">
83 <a class="nav-item nav-link no-click <#if selected(cur_level1.code1)>active</#if>" id="nav-decorativos-tab" data-toggle="tab" role="tab" aria-controls="nav-decorativos" aria-selected="true">
84 ${cur_level1.getData()}
85 </a>
86 </div>
87
88 <#if cur_level1.level2.getSiblings()?has_content && cur_level1.level2.getSiblings()?first.getData()?has_content>
89 <#list cur_level1.level2.getSiblings() as cur_level2>
90 <#if cur_level2.getData() != "">
91 <div id="collapse${cur_level1?index}" class="collapse hide-in-mobile <#if selected(cur_level1.code1)>show</#if>" aria-labelledby="productos" data-parent="#accordion">
92 <nav class="finsa-productos-tabs__nav finsa-tabs-nav">
93 <div class="nav nav-tabs nav-fill" id="nav-tab" role="tablist">
94 <div id="accordion${cur_level1?index}" class="accordion-item finsa-productos-tabs__accordion--secondary">
95 <#assign lvl2Link = cur_level2.link2.getFriendlyUrl()?replace('/web/guest', '')>
96 <#if !lvl2Link?has_content>
97 <#assign lvl2Link = cur_level2.linkExternoLvl2.getData()>
98 </#if>
99 <div id="${cur_level2.code2.getData()}" class="finsa-productos-tabs__accordion-button--secondary <#if !selected(cur_level2.code2)>collapsed</#if>" data-toggle="collapse" data-target="#collapse${cur_level1?index}-${cur_level2?index}" aria-expanded="${selected(cur_level2.code2)?c}"
100 aria-controls="collapse${cur_level1?index}-${cur_level2?index}" onclick="location.href='${lvl2Link}';">
101 <a class="nav-item nav-link no-click <#if selected(cur_level2.code2)><@level2Class /></#if>" id="nav-recubrimiento-tab" data-toggle="tab" role="tab" aria-controls="nav-recubrimiento"
102 aria-selected="false">
103 ${cur_level2.getData()}
104 </a>
105 </div>
106
107
108
109 <#if cur_level2.level3.getSiblings()?has_content && cur_level2.level3.getSiblings()?first.getData()?has_content>
110 <div id="collapse${cur_level1?index}-${cur_level2?index}" class="collapse hide-in-mobile <#if selected(cur_level2.code2)>show</#if>" aria-labelledby="recubrimiento"
111 data-parent="#accordion${cur_level1?index}">
112 <nav class="finsa-tabs-nav--secondary">
113 <#list cur_level2.level3.getSiblings() as cur_level3>
114 <#if cur_level3.getData() != "">
115 <div class="nav nav-tabs nav-fill" id="${cur_level3.code3.getData()}" role="tablist">
116 <#assign lvl3Link = cur_level3.link3.getFriendlyUrl()?replace('/web/guest', '')>
117 <#if !lvl3Link?has_content>
118 <#assign lvl3Link = cur_level3.linkExternoLvl3.getData()>
119 </#if>
120 <a class="nav-item nav-link no-click <#if selected(cur_level3.code3)>active</#if>" id="nav-duo-tab" data-toggle="tab" href="${lvl3Link}" role="tab" aria-controls="nav-duo" aria-selected="false" onclick="location.href='${cur_level3.link3.getFriendlyUrl()?replace('/web/guest', '')}';">
121 ${cur_level3.getData()}
122 </a>
123
124 </div>
125 </#if>
126 </#list>
127
128 </nav>
129 </div>
130
131 </#if>
132
133 </div>
134 </div>
135 </nav>
136 </div>
137 </#if>
138 </#list>
139 </#if>
140
141 </div>
142 </#list>
143</#if>
144</div>
145</div>
146<script>
147 codigoMenu = "${codigoMenu}";
148 navChildsJSON = $.parseJSON('${navChildsJSON}');
149
150 $(document).ready(function(){
151 $('a.nav-item.nav-link').off('click');
152 if(navChildsJSON != ""){
153 loadMenuMobile(navChildsJSON);
154 }
155 });
156
157 Liferay.on('endNavigate', function(event) {
158 $('a.nav-item.nav-link').off('click');
159
160 });
161
162 loadMenuFromSession(codigoMenu);
163
164
165 function loadMenuMobile(navChildsJSON) {
166 filterModal = $('.finsa-tabs-structure-right .finsa-tabs__modal .finsa-tabs__modal-list');
167 if(filterModal){
168 var navChilds = '';
169 for (var i in navChildsJSON) {
170 navChilds += '<a class="nav-item nav-link" id="'+navChildsJSON[i].id+'" href="'+navChildsJSON[i].href+'">'+
171 '<span>'+navChildsJSON[i].title+'</span> ' +
172 '</a>';
173 }
174
175 var navChildsList = '<nav class="finsa-recursos-tabs__nav finsa-tabs-nav">'+
176 '<div class="nav nav-tabs nav-fill selected" id="nav-tab" role="tablist">'+
177 navChilds +
178 '</div>' +
179 '</nav>';
180
181 filterModal.append(navChildsList);
182 }
183 }
184
185 function loadMenuFromSession(codigoMenu) {
186 if (codigoMenu != "") {
187 sessionStorage.setItem('codigoMenu', codigoMenu);
188 } else if (codigoMenu == "" && window.location.href.includes("/w/")) {
189 codigoMenu = sessionStorage.getItem('codigoMenu');
190 if (codigoMenu != undefined && codigoMenu != "") {
191 currentDiv = $('#' + codigoMenu);
192 currentLink = $('#' + codigoMenu + " a");
193
194 //first level
195 currentDiv.addClass("finsa-productos-tabs__active");
196 currentDiv.removeClass("collapsed");
197 currentDiv.attr("aria-expanded", true);
198 currentDiv.siblings().addClass('show');
199
200 currentLink.attr("aria-selected", true);
201 currentLink.addClass("active");
202
203 //second level
204 parent = currentDiv.closest('.collapse');
205 parent.addClass('show');
206 parent.siblings().addClass('show');
207
208 parentDiv = parent.siblings('.finsa-productos-tabs__accordion-button, .finsa-productos-tabs__accordion-button--secondary');
209 parentDiv.removeClass("collapsed");
210 parentDiv.attr('aria-expanded', true);
211 parentDiv.children('a').addClass('accordion-selected');
212 parentDiv.siblings().addClass('show');
213
214 //third level
215 ancestor = parentDiv.closest('.collapse');
216 ancestor.addClass('show');
217 ancestor.siblings().addClass('show');
218
219 ancestorDiv = ancestor.siblings('.finsa-productos-tabs__accordion-button, .finsa-productos-tabs__accordion-button--secondary');
220 ancestorDiv.removeClass("collapsed");
221 ancestorDiv.attr('aria-expanded', true);
222 ancestorDiv.children('a').addClass('accordion-selected');
223 ancestorDiv.siblings().addClass('show');
224 } else {
225 currentDiv = $($('.finsa-productos-tabs__accordion-button')[0]);
226 currentDiv.addClass("finsa-productos-tabs__active");
227 currentDiv.removeClass("collapsed");
228 currentDiv.attr("aria-expanded", true);
229 currentDiv.siblings().addClass('show');
230
231 currentDiv.children('a').attr("aria-selected", true);
232 currentDiv.children('a').addClass("active");
233 }
234 }
235 }
236</script>
237
238
239<#-- MACROS Y ESTILOS -->
240
241<#function selected code>
242 <#if selectedItem?seq_contains(code.getData())>
243 <#return true>
244 </#if>
245
246 <#return false>
247</#function>
248
249<#macro level2Class>
250 <#if code3?has_content>
251 accordion-selected
252 <#else>
253 active
254 </#if>
255</#macro>
Retail By Finsa: Wir zeigen unser Werksverzeichnis
Die Geschäfte, Restaurants und Einkaufszentren beginnen nach fast drei Monaten Pause wieder zu öffnen. Entdecken Sie 20 Projekte, die mit unseren Materialien entworfen wurden
Der Einzelhandel ist einer der am stärksten von der Covid-19-Krise betroffenen Sektoren: Geschäfte, Restaurants und Einkaufszentren wurden geschlossen. Jetzt beginnen diese Einrichtungen wieder zu öffnen, wobei viele von ihnen den neuen Gesundheits- und Sicherheitsmaßnahmen angepasst wurden.
Finsa bietet Architekten, Innenarchitekten und Designern, die im Einzelhandel tätig sind, eine breite Palette von Holzlösungen für ihre Projekte. In dem neuen Einzelhandelsportfolio von Finsa, das hier heruntergeladen werden kann, finden Sie insgesamt 20 Projekte, die zeigen, wie unsere Materialien in Restaurants, Geschäften, Fitnessstudios, Kliniken oder Einkaufszentren eingesetzt werden können. Darüber hinaus können Sie mit unserer breiten Palette an dekorativen Trägern und Oberflächen sowohl eine Luxuseinrichtung als auch einfachere Räume gestalten.
Finsa ofrece a los profesionales de la arquitectura, interiorismo y diseño que trabajan en el sector retail una amplia gama de soluciones en madera para ejecutar sus proyectos. En el nuevo portfolio de retail de Finsa, que se puede descargar aquí mismo, recogemos un total de 20 proyectos que muestran cómo nuestros materiales se pueden utilizar en restaurantes, comercios, gimnasios, clínicas o centros comerciales. Asimismo, nuestra amplia variedad de soportes y superficies decorativas permiten proyectar tanto un establecimiento de lujo como espacios más sencillos.