Busca - Editora Senac São Paulo
937 Produtos disponíveis
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>
QUER FICAR POR DENTRO DE PROMOÇÕES E NOVIDADES?