Faceta da categoria

Filtre por áreas:

Ordenar

Resultados da pesquisa

Um erro ocorreu enquanto processava o modelo.
The following has evaluated to null or missing:
==> curCPCatalogEntry.CPSkus[0]  [in template "20102#20129#43698973" at line 140, column 26]

----
Tip: It's the final [] step 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: #assign cpSku = curCPCatalogEntry.CPS...  [in template "20102#20129#43698973" at line 140, column 9]
----
1<#assign CPDefinitionHelper = serviceLocator.findService("com.liferay.commerce.product.util.CPDefinitionHelper") /> 
2<#assign contentHelper = serviceLocator.findService("com.liferay.commerce.product.content.util.CPContentHelper") /> 
3 
4<#assign userLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.UserLocalService")> 
5<#assign warehouseService = serviceLocator.findService("com.liferay.commerce.inventory.service.CommerceInventoryWarehouseItemLocalService") /> 
6 
7<#assign companyId =  userLocalService.getUser(themeDisplay.getUserId()).getCompanyId() /> 
8<#assign productService = serviceLocator.findService("br.senac.sp.editora.services.service.ProductService") /> 
9 
10<!-- 
11Código relacionado ao search result 
12--> 
13<!-- 
14// TODO VALIDAR PARAR REMOVER / 
15<script 
16      src="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.8.1/slick.min.js" 
17      integrity="sha512-XtmMtDEcNz2j7ekrtHvOVR4iwwaD6o/FUJe6+Zq+HgcCsk3kj4uSQQR8weQ2QVj1o0Pk6PwYLohm206ZzNfubg==" 
18      crossorigin="anonymous" 
19      referrerpolicy="no-referrer" 
20></script> 
21<script> 
22	// Removendo o ícone e o botão duplicado e trocando a seta à direita para o ícone de refresh 
23 
24    $(document).ready(function(){ 
25        var x = document.getElementsByClassName("fa fa-arrow-right"); 
26        // x[1].remove(); 
27        x[0]?.setAttribute("class", "fa fa-refresh"); 
28         
29        var btn = document.getElementsByClassName("btn"); 
30        btn[6]?.removeChild(btn[6].firstChild); 
31    }); 
32	 
33	setTimeout(function(){ 
34    $(document).ready(function(){ 
35 
36      $('.sliderCategoria').slick({ 
37          arrows: true, 
38          slidesToShow: 5, 
39          slidesToScroll: 5, 
40          dots:false, 
41          infinite: false, 
42          prevArrow: '<a href="#" class="slide-arrow prev-arrow-categoria"><i class="fa fa-chevron-left gray"></i></a>', 
43          nextArrow: '<a href="#" class="slide-arrow next-arrow-categoria"><i class="fa fa-chevron-right gray"></i></a>', 
44          speed: 1000, 
45          index: 2, 
46          focusOnSelect:false, 
47          accessibility:true, 
48          adaptiveHeight:false, 
49          autoplay:false, 
50          responsive: [{ 
51            breakpoint: 1200, 
52            settings: { 
53                slidesToShow: 5, 
54                slidesToScroll: 5, 
55                variableWidth: true, 
56                dots:false, 
57                infinite: false, 
58                centerMode: false, 
59                arrows: true 
60
61        }, { 
62            breakpoint: 768, 
63            settings: { 
64                slidesToShow: 1, 
65                slidesToScroll: 1, 
66                variableWidth: true, 
67                infinite: false, 
68                centerPadding: 0, 
69                centerMode: false, 
70                dots:false, 
71                arrows: true 
72
73        }] 
74      }); 
75 
76      setTimeout(function() { 
77          if (localStorage.getItem("categoriaSelecionada")) { 
78            console.log(localStorage.getItem("categoriaSelecionada")) 
79            console.log($('.containerCategoria a[data-catname="' + localStorage.getItem("categoriaSelecionada") + '"]')) 
80            $('.containerCategoria a[data-catname="' + localStorage.getItem("categoriaSelecionada") + '"]').parent('.containerCategoria').addClass('selecionado').css({ 
81                background: '#F6921E 0% 0% no-repeat padding-box', 
82                borderColor: '#FFFFFF' 
83            }); 
84 
85            $('.containerCategoria a[data-catname="' + localStorage.getItem("categoriaSelecionada") + '"]').css('color', '#FFFFFF') 
86
87 
88          $('body').on('click', '.containerCategoria a', function(e) { 
89            //e.preventDefault() 
90            localStorage.setItem("categoriaSelecionada", $(this).attr('data-catname')); 
91          }); 
92 
93      }, 150); 
94    }); 
95    const sliderCategoria = document.getElementsByClassName("sliderCategoria"); 
96    for (let i = 0; i < sliderCategoria.length; i++) { 
97        sliderCategoria[i].style.display ='block'; 
98
99    $(function(){ 
100      if(screen.width < 600){ 
101        $('.containerCategoria').each(function(i){ 
102            var categoria = $('.containerCategoria:eq('+i+') > div > font').text(); 
103            categoria = categoria.split(' '); 
104            console.log('$$$$',categoria); 
105            switch(categoria.length){ 
106                case 4: 
107                    $('.containerCategoria:eq('+i+') > div > font').html(categoria[2]+'<br>'+categoria[3]);     
108                 break; 
109                case 5: 
110                    $('.containerCategoria:eq('+i+') > div > font').html(categoria[2]+' '+categoria[3]+'<br>'+categoria[4]);     
111                 break;     
112                case 6: 
113                    $('.containerCategoria:eq('+i+') > div > font').html(categoria[2]+' '+categoria[3]+'<br>'+categoria[4]+' '+categoria[5]);     
114                 break; 
115                 case 9: 
116                    $('.containerCategoria:eq('+i+') > div > font').html(categoria[2]+' '+categoria[3]+' '+categoria[4]+'<br>'+categoria[5]+' '+categoria[6]+' '+categoria[7]+' '+categoria[8]);     
117                 break; 
118
119             
120        }); 
121
122    }); 
123}, 1500); 
124 
125</script> 
126// TODO VALIDAR PARAR REMOVER / 
127--> 
128	 
129<div class="container"> 
130    <div class="tituloResultado"> 
131       Foram encontrados <span class="quantidade"> 
132       ${cpSearchResultsDisplayContext.getCPDataSourceResult().getLength()}</span> livros 
133    </div> 
134    <div class="orange-line"><i class="fas fa-circle circulo" aria-hidden="true"></i></div> 
135</div> 
136<div class="container"> 
137    <div class="row resultado"> 
138        <#if entries?has_content> 
139        <#list entries as curCPCatalogEntry> 
140        <#assign cpSku = curCPCatalogEntry.CPSkus[0] /> 
141        <div class="col-md-3 col-xs-12 itemContainerResultado"> 
142            <a href="${CPDefinitionHelper.getFriendlyURL(curCPCatalogEntry.getCPDefinitionId(), themeDisplay)}"> 
143 
144 
145                <#assign cpMedia = contentHelper.getImages(curCPCatalogEntry.getCPDefinitionId(), themeDisplay) /> 
146                <#assign defaultImage = "/documents/d/editora-senac/liferay_logo" /> 
147                <#assign productImage = defaultImage /> 
148 
149                <#list cpMedia as media> 
150                <#if media.getURL()?has_content && (media.getTitle()?? && media.getTitle()?contains("small"))> 
151                <#assign productImage = media.getURL() /> 
152                <#break> 
153            </#if> 
154        </#list> 
155 
156 
157                    <#if productImage == defaultImage> 
158                    <#list cpMedia as media> 
159                    <#if media.getURL()?has_content> 
160                    <#assign productImage = media.getURL() /> 
161                    <#break> 
162                </#if> 
163            </#list> 
164        </#if> 
165 
166            <img class="imgProdutoResultado" 
167                 src="${productImage}" 
168                 onerror="this.onerror=null; this.src='${defaultImage}';" /> 
169 
170            </a> 
171                <div class="infoProdutoResultado"> 
172                    <div class="infoSuperiores"> 
173                        <div class="tituloProdutoResultado"> 
174                            ${curCPCatalogEntry.name?truncate(60, '...')} 
175                        </div> 
176                        <div class="tituloAutorResultado"> 
177                            <#list contentHelper.getCategorizedCPDefinitionSpecificationOptionValues(curCPCatalogEntry.getCPDefinitionId(), 43620166) as specs> 
178                            <#if specs.CPSpecificationOptionId == 43594743> 
179                            <#assign autor = specs.getValueCurrentValue() /> 
180                            ${autor?truncate(45, '...')} 
181                            <#break> 
182                        </#if> 
183                    </#list> 
184                </div> 
185                </div> 
186 
187            <div> 
188                <span class="parceladoResultado"></span> 
189                <span class="valorResultado"> 
190                            <@liferay_commerce_ui["price"] 
191                              CPCatalogEntry=curCPCatalogEntry 
192                            /> 
193                          </span> 
194            </div> 
195 
196                    <div class="divEspiarResultado"> 
197                        <#if productService.isAvailable(curCPCatalogEntry.getCPDefinitionId()) && warehouseService.getStockQuantity(companyId, cpSku.getSku()) gt 0> 
198                        <span class="comprarResultado"> 
199                                      <#assign PortalUtil = staticUtil["com.liferay.portal.kernel.util.PortalUtil"] /> 
200                                      <#assign id = "add-to-cart" + PortalUtil.generateRandomKey(request, "add-to-cart") + "" + curCPCatalogEntry.CPSkus[0].getSku() /> 
201                                      <@liferay_commerce_ui["add-to-cart"] 
202                                        CPInstanceId=curCPCatalogEntry.CPSkus[0].getCPInstanceId() 
203                                        id=id 
204                                      /> 
205                                    </span> 
206                        <#else> 
207                        <span class="comprarCarrossel4"> 
208                                      <button class="btnIndisponivelEspecialCarrossel4" disabled>Livro Indisponível</button> 
209                                    </span> 
210                    </#if> 
211                </div> 
212            </div> 
213          </div> 
214       </#list> 
215    <#else> 
216                <div class="no-search-result-container"> 
217                    <div class="defaultText"> 
218                        A pesquisa para <q class="searchText"></q> não teve resultados. 
219                        <div class="spacing"></div> 
220                        Refaça sua busca usando outro termo. 
221                    </div> 
222                    <hr> 
223                    <div class="no-search-contact-us"> 
224                        Não encontra o que procura? <div class="mobile-line-break"></div><a href="/fale-com-a-gente"><u>Fale com a gente</u></a> 
225                    </div> 
226                </div> 
227            </#if> 
228         </div> 
229     </div> 
230 
231 
232<script> 
233      var variavel = $(".search-bar-keywords-input").val() 
234      $(".searchText").text(variavel); 
235       
236	 
237			if (typeof promoPrice !== 'undefined') { 
238      	promoPrice = document.getElementsByClassName("price"); 
239
240			else { 
241      	promoPrice = document.getElementsByClassName("price"); 
242
243	 
244			for (let i = 0; i < document.getElementsByClassName("price").length; i++) { 
245				let carrossel = document.getElementsByClassName("price"); 
246				if(carrossel[i].children.length < 5) { 
247					carrossel[i].children[0].innerText = "Por:" 
248					carrossel[i].children[1].style.color = "#D2691E" 
249					carrossel[i].children[1].style.marginLeft = ".5rem" 
250					carrossel[i].style.marginTop = "24px" 
251
252				else if (carrossel[i].children.length > 7){ 
253			    carrossel[i].children[0].innerHTML = "<del>De:</del>" 
254					carrossel[i].children[0].style.color = "#78849e" 
255					carrossel[i].children[1].classList.remove("price-value-inactive") 
256			    let priceBefore = carrossel[i].children[1].innerText 
257					carrossel[i].children[1].innerHTML = '<del>'+priceBefore+'</del>' 
258					carrossel[i].children[1].style.color = "#78849e" 
259									 
260					carrossel[i].children[2].style.display = "none" 
261					carrossel[i].children[3].style.display = "none" 
262					carrossel[i].children[4].innerText = "Por:" 
263					carrossel[i].children[5].style.display = "none" 
264					carrossel[i].children[6].style.display = "none" 
265					carrossel[i].children[7].style.color = "#D2691E" 
266					carrossel[i].children[7].style.marginLeft = ".5rem" 
267					carrossel[i].style.marginTop = "10px" 
268
269				else { 
270					carrossel[i].children[0].innerHTML = "<del>De:</del>" 
271					carrossel[i].children[0].style.color = "#78849e" 
272					carrossel[i].children[1].classList.remove("price-value-inactive") 
273					let priceBefore = carrossel[i].children[1].innerText 
274					carrossel[i].children[1].innerHTML = '<del>'+priceBefore+'</del>' 
275					carrossel[i].children[1].style.color = "#78849e" 
276					carrossel[i].children[2].style.display = "none" 
277					carrossel[i].children[3].style.display = "none" 
278					carrossel[i].children[4].innerText = "Por:" 
279					carrossel[i].children[5].style.color = "#D2691E" 
280					carrossel[i].children[5].style.marginLeft = ".5rem" 
281					carrossel[i].style.marginTop = "10px" 
282
283
284</script> 
285 
286<style> 
287	 
288	.comprarResultado  div.form-group { 
289		display: none; 
290
291	.comprarResultado { 
292	  margin-top: 0px; 
293
294	span.price-value-final { 
295	  color: #D2691E; 
296
297	.price-value { 
298	  font-size: .8rem !important; 
299
300	.price-value-final { 
301	  font-size: 1rem !important; 
302
303    .no-search-result-container { 
304        padding: 40px 35.5px 55px; 
305        width: 1065px; 
306        box-shadow: 0px 0px 12px 2px #0000000f; 
307        border-radius: 4px; 
308
309    .no-search-result-container hr { 
310        border-top: 0.5px solid #CDD3E2; 
311        opacity: 0.4; 
312
313 
314    .defaultText{ 
315        text-align: left !important; 
316        font: normal normal 600 20px/28px Montserrat,sans-serif !important; 
317        letter-spacing: 0px !important; 
318        color: #454F63 !important; 
319        text-transform: none !important; 
320        margin: 0 49.5px; 
321        margin-bottom: 35px 
322
323 
324    .searchText{ 
325        font-style: italic; 
326        color: #F6921E !important; 
327
328 
329    .no-search-contact-us { 
330        text-align: right; 
331        font: normal normal 500 16px/22px Montserrat,sans-serif; 
332        color: #004A8C; 
333        margin: 0 49.5px; 
334        margin-top: 35px 
335
336    .no-search-contact-us a { 
337        font: inherit; 
338        color: inherit; 
339
340    .no-search-contact-us a:hover { 
341        font-weight: 500 !important; 
342
343 
344    .mobile-line-break { 
345        display: none; 
346
347     
348    .comprarResultado .add-to-cart-quantity-marker.active { 
349        opacity: 0; 
350        display: none; 
351
352 
353    .comprarResultado  form.quantity-selector { 
354        display: none; 
355
356 
357    .comprarResultado  button.btn.btn-primary { 
358        background-color: #5ACC75; 
359			  border-radius: 4px; 
360        width: 206px; 
361        padding: 1px; 
362			  margin-left: -20px; 
363        justify-content: center;  
364        padding-left: 13%; 
365
366	.btnIndisponivelEspecialCarrossel4 { 
367	  border-radius: 4px; 
368    width: 206px; 
369    padding: 1px; 
370		margin-top: 0.75rem !important; 
371
372	 
373	.valorResultado { 
374	    margin-top: 5px; 
375	    margin-bottom: 5px; 
376
377	.valorResultado span.product-price { 
378        font: var(--unnamed-font-style-normal) normal var(--unnamed-font-weight-bold) var(--unnamed-font-size-18)/var(--unnamed-line-spacing-17) var(--unnamed-font-family-montserrat); 
379        letter-spacing: var(--unnamed-character-spacing-0); 
380        color: var(--unnamed-color-f6921e); 
381        text-align: left; 
382        font: normal bold 18px/17px Montserrat; 
383        letter-spacing: 0px; 
384        color: #F6921E; 
385        opacity: 1; 
386        font-weight: 600; 
387        float: left; 
388        clear: left; 
389
390     
391    .valorResultado span.product-price::before { 
392        content: attr(data-content); 
393        font: var(--unnamed-font-style-normal) normal var(--unnamed-font-weight-medium) var(--unnamed-font-size-12)/var(--unnamed-line-spacing-22) var(--unnamed-font-family-montserrat); 
394        letter-spacing: var(--unnamed-character-spacing-0); 
395        color: var(--unnamed-color-454f63); 
396        text-align: left; 
397        font-weight: 200; 
398        letter-spacing: 0px; 
399        color: #454F63; 
400
401     
402    .valorResultado span.product-promo-price { 
403        float: left; 
404        font: var(--unnamed-font-style-normal) normal var(--unnamed-font-weight-medium) var(--unnamed-font-size-14)/var(--unnamed-line-spacing-22) var(--unnamed-font-family-montserrat); 
405        letter-spacing: var(--unnamed-character-spacing-0); 
406        color: var(--unnamed-color-454f63); 
407        text-align: left; 
408        text-decoration: line-through; 
409        font-weight: 200; 
410        letter-spacing: 0px; 
411        color: #454F63; 
412
413     
414    .valorResultado span.product-promo-price::before { 
415        content: "De: "; 
416        font: var(--unnamed-font-style-normal) normal var(--unnamed-font-weight-medium) var(--unnamed-font-size-12)/var(--unnamed-line-spacing-22) var(--unnamed-font-family-montserrat); 
417        letter-spacing: var(--unnamed-character-spacing-0); 
418        color: var(--unnamed-color-454f63); 
419        text-align: left; 
420        font-weight: 200; 
421        letter-spacing: 0px; 
422        color: #454F63; 
423
424     
425    .valorResultado span.commerce-discount{ 
426        display: none; 
427
428	 
429	 
430    @media (max-width: 767px){ 
431        .valorResultado span.product-price { 
432            float: none; 
433            clear: none; 
434
435        .valorResultado span.product-promo-price { 
436            float: none; 
437
438        .valorResultado{ 
439            display: table !important; 
440            margin-left: 20px !important; 
441
442        .valorResultado > .price{ 
443            margin-top: 15px !important; 
444            display: block; 
445            left:30px; 
446
447        .divEspiarResultado{ 
448            position: relative !important; 
449            width:70% !important; 
450             
451
452        .infoProdutoResultado{ 
453            top: -10px !important; 
454
455        .price-value-final{ 
456            margin: 0 !important; 
457
458
459 
460    @media(max-width: 475px) { 
461        .no-search-result-container { 
462            width: auto; 
463            margin: 0 20px; 
464            padding: 30px 20px; 
465
466 
467        .defaultText{ 
468            font: normal normal 600 16px/20px Montserrat,sans-serif !important; 
469            margin: 0; 
470            margin-bottom: 15px; 
471
472 
473        .no-search-contact-us { 
474            font: normal normal 500 14px/16px Montserrat,sans-serif; 
475            text-align: center; 
476            margin: 0;valorResultado 
477            margin-top: 15px 
478
479 
480        .spacing { 
481            height: 20px; 
482
483 
484        .mobile-line-break { 
485            display: block; 
486
487
488</style> 

eds-newsletter

QUER FICAR POR DENTRO DE PROMOÇÕES E NOVIDADES?