eds-home-Saúde

Saúde

Navegação da Categoria do Comércio

Navegação da Categoria do Comércio

Filtre
Enfermagem
Farmácia
Gestão em Saúde
Hemoterapia e Análises Clínicas
Massoterapia e Terapias Complementares
Nutrição
Odontologia
Optica
Podologia
Radiologia

eds-titulo-LANÇAMENTOS

Editor de produto

Um erro ocorreu enquanto processava o modelo.
The following has evaluated to null or missing:
==> serviceLocator.findService("br.senac.sp.editora.services.service.ProductService")  [in template "20102#20129#43698964" at line 13, column 27]

----
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 productService = serviceLocat...  [in template "20102#20129#43698964" at line 13, column 1]
----
1<#setting locale="pt_BR"> 
2 
3<#assign assetentry = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService") /> 
4<#assign assetCategoryRel = serviceLocator.findService("com.liferay.asset.entry.rel.service.AssetEntryAssetCategoryRelLocalService") /> 
5<#assign assetCategory = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService") /> 
6<#assign contentHelper = serviceLocator.findService("com.liferay.commerce.product.content.util.CPContentHelper") /> 
7<#assign CPDefinitionHelper = serviceLocator.findService("com.liferay.commerce.product.util.CPDefinitionHelper") /> 
8<#assign friendlyURLEntryLocalService = serviceLocator.findService("com.liferay.friendly.url.service.FriendlyURLEntryLocalService")> 
9 
10<#assign userLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.UserLocalService")> 
11<#assign warehouseService = serviceLocator.findService("com.liferay.commerce.inventory.service.CommerceInventoryWarehouseItemLocalService") /> 
12<#assign companyId =  userLocalService.getUser(themeDisplay.getUserId()).getCompanyId() /> 
13<#assign productService = serviceLocator.findService("br.senac.sp.editora.services.service.ProductService") /> 
14 
15<div class="slider4"> 
16    <#if entries?has_content> 
17        <#list entries as curCPCatalogEntry> 
18            <#if curCPCatalogEntry?counter < 12> 
19                <#assign friendlyURL = CPDefinitionHelper.getFriendlyURL(curCPCatalogEntry.getCPDefinitionId(),themeDisplay)> 
20                <div class="imgContainerEspecialCarrossel4"> 
21                    <a href="${friendlyURL}"> 
22                        <#assign cpMedia = contentHelper.getImages(curCPCatalogEntry.getCPDefinitionId(), themeDisplay) /> 
23                        <#assign defaultImage = "/documents/d/editora-senac/liferay_logo" /> 
24                        <#assign productImage = defaultImage /> 
25                        <#list cpMedia as media> 
26                          <#if media.getURL()?has_content && (media.getTitle()?? && media.getTitle()?contains("small"))> 
27                        <#assign productImage = media.getURL() /> 
28                        <#break> 
29                    </#if> 
30                </#list> 
31                  <#if productImage == defaultImage> 
32                     <#list cpMedia as media> 
33                     <#if media.getURL()?has_content> 
34                        <#assign productImage = media.getURL() /> 
35                        <#break> 
36                    </#if> 
37                  </#list> 
38                </#if> 
39                   <img src="${productImage}" onerror="this.onerror=null;this.src='${defaultImage}';" /> 
40                 </a> 
41                    <div class="informacoesProdutoCarrossel4"> 
42                      <a href="${friendlyURL}"> 
43                      <div class="infoSuperiores"> 
44                          <div class="tituloEspecialCarrossel4"> 
45                           ${curCPCatalogEntry.name?truncate(60, '...')} 
46                          </div> 
47                          <div class="autorEspecialCarrossel4">   
48                            <#list contentHelper.getCategorizedCPDefinitionSpecificationOptionValues(curCPCatalogEntry.getCPDefinitionId(),43620166) as specs>     
49                                <#if specs.CPSpecificationOptionId == 43594743> 
50                                    <#assign autor = specs.getValueCurrentValue() /> 
51                                        ${autor?truncate(45, '...')} 
52                                    <#break> 
53                                </#if> 
54                            </#list> 
55                          </div> 
56                      </div> 
57                      </a> 
58                      <div class="valorCarrossel4"> 
59                        <@liferay_commerce_ui["price"] 
60                            CPCatalogEntry=curCPCatalogEntry 
61                        /> 
62                    </div> 
63                    <div class="espiarCarrossel4"> 
64                      <#if productService.isAvailable( curCPCatalogEntry.getCPDefinitionId() ) > 
65                          <span class="comprarCarrossel4" data-sku="${curCPCatalogEntry.CPSkus[0].getSku()}"> 
66                             <#assign PortalUtil = staticUtil["com.liferay.portal.kernel.util.PortalUtil"] /> 
67                             <#assign id = "add-to-cart" + PortalUtil.generateRandomKey(request, "add-to-cart") + "" + curCPCatalogEntry.CPSkus[0].getSku() /> 
68                             
69                            <#list curCPCatalogEntry.getCPSkus() as skus> 
70                              <@liferay_commerce_ui["add-to-cart"] 
71                      CPInstanceId=skus.getCPInstanceId() 
72                                        id=id 
73                    />                      
74                              </#list>                     
75                     
76             
77                                                         
78                          </span> 
79                      <#else> 
80                        <span class="comprarCarrossel4"> 
81                         <button class="btnIndisponivelEspecialCarrossel4" disabled>Livro Indisponível</button> 
82                        </span> 
83                      </#if> 
84                    </div> 
85                    </div> 
86                </div> 
87            <#elseif curCPCatalogEntry?counter == 12> 
88                <!-- Ver Mais --> 
89                <div class="customCart"> 
90                    <#assign asset = assetentry.getEntry('com.liferay.commerce.product.model.CPDefinition',entries[0].getCPDefinitionId())/> 
91                    <#assign relateds = assetCategoryRel.getAssetEntryAssetCategoryRelsByAssetEntryId(asset.getEntryId())/> 
92                    <#if (currentURL?contains("catalogo?"))> 
93                        <#assign category = assetCategory.getAssetCategory(relateds[0].assetCategoryId)/> 
94                    <#else> 
95                        <#if relateds?has_content> 
96                            <#assign category = assetCategory.getAssetCategory(relateds[1].assetCategoryId)/> 
97                        </#if>   
98                    </#if>   
99                     
100                    <#if category?has_content> 
101                        <!-- classId de Category --> 
102                        <#assign friendlyURL = friendlyURLEntryLocalService.getMainFriendlyURLEntry(20013, category.categoryId)> 
103                    <#else> 
104                        <#assign friendlyURL = ""> 
105                    </#if>   
106                    <div class="verMaisCard"> 
107                        <div class="verMaisCardContent"> 
108                            <i class="fas fa-books fa-2x"></i> 
109                            <div>    
110                            <div class="background-left2"><i class="fas fa-circle circulo auxCirc" aria-hidden="true"></i>&nbsp;</div> 
111                            </div> 
112                            <span class="text">Quer mais livros dessa área?</span> 
113                            <span class="ancora"> 
114                             <#if friendlyURL?has_content> 
115                                <#assign categoryUrl = themeDisplay.getURLPortal() + '/categoria/' + friendlyURL.getUrlTitle(locale)/> 
116                                <a class="ancora-aux" href="${categoryUrl}">Confira todos</a></a> 
117                            </#if> 
118                            <!-- --> 
119                            <#assign entryName = entry.name?lower_case> 
120                            <#assign entryNameFormatted = entryName?replace(' ', '-')> 
121                            </span> 
122                            <div>    
123                                <div class="background-right2">&nbsp;<i class="fas fa-circle circulo auxCirc" aria-hidden="true"></i></div> 
124                            </div> 
125                        </div> 
126                    </div> 
127                </div> 
128                <#break> 
129            </#if> 
130        </#list> 
131    </#if> 
132</div> 
133 
134<style> 
135   
136.comprarCarrossel4 { 
137  margin-top: 0px; 
138
139 
140.comprarCarrossel4  div.form-group { 
141  display: none; 
142}  
143    .slider4 { 
144        display: none; 
145
146    .informacoesProdutoCarrossel4 span.commerce-discount { 
147        display: none; 
148
149     
150    .comprarCarrossel4 .add-to-cart-quantity-marker.active { 
151        opacity: 0; 
152        display: none; 
153
154 
155    .comprarCarrossel4  form.quantity-selector { 
156        display: none; 
157
158 
159    .comprarCarrossel4 .add-to-cart button.btn-add-to-cart{ 
160        background-color: #5ACC75; 
161        border-radius: 4px; 
162        width: 206px; 
163        padding: 1px; 
164        justify-content: center;  
165        padding-left: 13%; 
166
167   
168  .comprarCarrossel4 span.price-value-final { 
169     color: #D2691E !important; 
170
171   
172  .comprarCarrossel4 .btnIndisponivelEspecialCarrossel4 { 
173      margin-top: 0.75rem !important; 
174
175   
176    .comprarCarrossel4 .add-to-cart button.btn-add-to-cart{ 
177      background-color: #5ACC75 !important; 
178
179  
180    .informacoesProdutoCarrossel4 .product-price { 
181        font: normal normal bold 16px/17px Montserrat; 
182
183     
184    .slick-dots { 
185      z-index: 2; 
186
187 
188    @media (max-width: 1200px) { 
189      	.slick-dots { 
190            width: 100vw !important; 
191
192
193     
194    @media (min-width: 1023px) { 
195        .slick-dotted.slick-slider { 
196             
197
198        .slider4 { 
199            width: 1093px !important; 
200
201
202     
203    @media (max-width: 813px) { 
204        .divEspiarCarrossel4 { 
205            margin-top: 30px !important; 
206
207         
208         
209        .divValorCarrossel4 { 
210            margin-top: 15px !important; 
211
212
213     
214    @media (max-width: 768px) { 
215        .slider2 .next-arrow { 
216            right: 18px; 
217
218         
219        .slider2 .prev-arrow { 
220            left: 18px; 
221
222         
223        .slider2 .slide-arrow .fa { 
224            font-size: 22px; 
225            font-weight: 400; 
226
227 
228        .slider4 .valorCarrossel4 { 
229          margin-top: 5px; 
230
231 
232        .slider4 .espiarCarrossel4 { 
233          position: relative; 
234          top: -10px; 
235
236 
237        .valorCarrossel4 .price:not(.compact) .price-value { 
238            font: normal 600 18px/17px Montserrat !important; 
239
240        .valorCarrossel4 { 
241            position: relative; 
242            z-index: 9999; 
243            display: flex; 
244            padding-top: 25px; 
245            align-items: flex-end; 
246
247        .valorCarrossel4 .price-value { 
248            margin-left: 0!important; 
249
250        .comprarCarrossel4 .btn-add-to-cart { 
251          margin: 0 !important; 
252          padding-top: 2px !important; 
253
254        .comprarCarrossel4 .btn-add-to-cart::before { 
255          font-size: 16px; 
256
257 
258        .valorCarrossel4:not(.slider4semextracard .valorCarrossel4) { 
259          margin-top: 0!important; 
260          padding-top: 0!important; 
261
262        .slider4 .informacoesProdutoCarrossel4:not(.slider4semextracard) { 
263          top: unset; 
264          bottom: 4%; 
265
266 
267
268     
269    @media (max-width: 600px) { 
270      .comprarCarrossel4 button.btn.btn-primary { 
271        padding-left: 1px; 
272        height: 30px; 
273
274 
275      .btn-add-to-cart-inline::before { 
276        font-size: 14px; 
277        width: 100%; 
278        text-align: center; 
279        display: block; 
280
281
282     
283    .slider4:not(.slider4semextracard) .informacoesProdutoCarrossel4 > a .divValorCarrossel4 { 
284        display: flex; 
285        align-items: flex-end; 
286
287     
288    .slider4:not(.slider4semextracard) .informacoesProdutoCarrossel4 > a .divValorCarrossel4 .price { 
289        order: 1; 
290        margin-top: 0!important; 
291        margin-right: 2px; 
292
293     
294    .slider4:not(.slider4semextracard) .informacoesProdutoCarrossel4 > a .divValorCarrossel4 .parceladoCarrossel4 { 
295        order: 2; 
296
297     
298    .slider4:not(.slider4semextracard) .informacoesProdutoCarrossel4 > a .divValorCarrossel4 .parceladoCarrossel4 + .price { 
299        margin-right: 5px; 
300
301     
302    .slider4:not(.slider4semextracard) .informacoesProdutoCarrossel4 > a .divValorCarrossel4 .product-price { 
303        order: 3; 
304        margin-top: 0; 
305
306     
307    @media (max-width: 414px){ 
308        .slider4 { 
309            width: 100vw !important; 
310            /* margin-right: 0; */ 
311            margin-right: 20px; 
312            margin-left: 20px; 
313
314
315</style> 
316   
317<script> 
318  setTimeout(function(){ 
319    $(document).ready(function() { 
320      $('.slider4').slick({ 
321        arrows: true, 
322        slidesToShow: 4, 
323        slidesToScroll: 4, 
324        dots:true, 
325        infinite: false, 
326        prevArrow: '<a href="#" class="slide-arrow prev-arrow"><i class="fa fa-chevron-left gray"></i></a>', 
327        nextArrow: '<a href="#" class="slide-arrow next-arrow"><i class="fa fa-chevron-right gray"></i></a>', 
328        speed: 1000,  
329        index: 2, 
330        lazyLoad: 'ondemand', 
331        focusOnSelect:false, 
332        accessibility:false, 
333        adaptiveHeight:false, 
334        autoplay:false, 
335        responsive: [{ 
336          breakpoint: 1200, 
337          settings: { 
338            slidesToShow: 4, 
339            slidesToScroll: 4, 
340            variableWidth: true, 
341            infinite: false, 
342            centerMode: false, 
343            dots:true, 
344            arrows: true 
345
346        }, { 
347          breakpoint: 768, 
348          settings: { 
349            slidesToShow: 1, 
350            slidesToScroll: 1, 
351            variableWidth: true, 
352            infinite: false, 
353            centerPadding: 0, 
354            centerMode: false, 
355            dots:false, 
356            arrows: true 
357
358        }] 
359      }); 
360 
361      sendViewItemList([<#list entries as curCPCatalogEntry>${curCPCatalogEntry.getCPDefinitionId()},</#list>]) 
362    }); 
363     
364    const slider4 = document.getElementsByClassName("slider4"); 
365    for (let i = 0; i < slider4.length; i++) { 
366      slider4[i].style.display ='block'; 
367
368     
369    if (typeof promoPrice !== 'undefined') { 
370        promoPrice = document.getElementsByClassName("price"); 
371
372      else { 
373        promoPrice = document.getElementsByClassName("price"); 
374
375   
376      for (let i = 0; i < document.getElementsByClassName("price").length; i++) { 
377        let carrossel = document.getElementsByClassName("price"); 
378        if(carrossel[i].children.length < 5) { 
379          if(carrossel[i].children[0]) 
380            carrossel[i].children[0].innerText = "Por:" 
381 
382          if(carrossel[i].children[1]) { 
383            carrossel[i].children[1].style.color = "#F6921E" 
384            carrossel[i].children[1].style.marginLeft = ".5rem" 
385
386          carrossel[i].style.marginTop = "24px" 
387
388        else if (carrossel[i].children.length > 7){ 
389          carrossel[i].children[0].innerHTML = "<del>De:</del>" 
390          carrossel[i].children[0].style.color = "#78849e" 
391          carrossel[i].children[1].classList.remove("price-value-inactive") 
392          let priceBefore = carrossel[i].children[1].innerText 
393          carrossel[i].children[1].innerHTML = '<del>'+priceBefore+'</del>' 
394          carrossel[i].children[1].style.color = "#78849e" 
395                   
396          carrossel[i].children[2].style.display = "none" 
397          carrossel[i].children[3].style.display = "none" 
398          carrossel[i].children[4].innerText = "Por:" 
399          carrossel[i].children[5].style.display = "none" 
400          carrossel[i].children[6].style.display = "none" 
401          carrossel[i].children[7].style.color = "#F6921E" 
402          carrossel[i].children[7].style.marginLeft = ".5rem" 
403          carrossel[i].style.marginTop = "10px" 
404
405        else { 
406          carrossel[i].children[0].innerHTML = "<del>De:</del>" 
407          carrossel[i].children[0].style.color = "#78849e" 
408          carrossel[i].children[1].classList.remove("price-value-inactive") 
409          let priceBefore = carrossel[i].children[1].innerText 
410          carrossel[i].children[1].innerHTML = '<del>'+priceBefore+'</del>' 
411          carrossel[i].children[1].style.color = "#78849e" 
412          carrossel[i].children[2].style.display = "none" 
413          carrossel[i].children[3].style.display = "none" 
414          carrossel[i].children[4].innerText = "Por:" 
415          carrossel[i].children[5].style.color = "#F6921E" 
416          carrossel[i].children[5].style.marginLeft = ".5rem" 
417          carrossel[i].style.marginTop = "10px" 
418
419
420  }, 1500); 
421   
422   
423   
424</script> 

eds-home-Enfermagem

Editor de produto

Um erro ocorreu enquanto processava o modelo.
The following has evaluated to null or missing:
==> serviceLocator.findService("br.senac.sp.editora.services.service.ProductService")  [in template "20102#20129#43698964" at line 13, column 27]

----
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 productService = serviceLocat...  [in template "20102#20129#43698964" at line 13, column 1]
----
1<#setting locale="pt_BR"> 
2 
3<#assign assetentry = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService") /> 
4<#assign assetCategoryRel = serviceLocator.findService("com.liferay.asset.entry.rel.service.AssetEntryAssetCategoryRelLocalService") /> 
5<#assign assetCategory = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService") /> 
6<#assign contentHelper = serviceLocator.findService("com.liferay.commerce.product.content.util.CPContentHelper") /> 
7<#assign CPDefinitionHelper = serviceLocator.findService("com.liferay.commerce.product.util.CPDefinitionHelper") /> 
8<#assign friendlyURLEntryLocalService = serviceLocator.findService("com.liferay.friendly.url.service.FriendlyURLEntryLocalService")> 
9 
10<#assign userLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.UserLocalService")> 
11<#assign warehouseService = serviceLocator.findService("com.liferay.commerce.inventory.service.CommerceInventoryWarehouseItemLocalService") /> 
12<#assign companyId =  userLocalService.getUser(themeDisplay.getUserId()).getCompanyId() /> 
13<#assign productService = serviceLocator.findService("br.senac.sp.editora.services.service.ProductService") /> 
14 
15<div class="slider4"> 
16    <#if entries?has_content> 
17        <#list entries as curCPCatalogEntry> 
18            <#if curCPCatalogEntry?counter < 12> 
19                <#assign friendlyURL = CPDefinitionHelper.getFriendlyURL(curCPCatalogEntry.getCPDefinitionId(),themeDisplay)> 
20                <div class="imgContainerEspecialCarrossel4"> 
21                    <a href="${friendlyURL}"> 
22                        <#assign cpMedia = contentHelper.getImages(curCPCatalogEntry.getCPDefinitionId(), themeDisplay) /> 
23                        <#assign defaultImage = "/documents/d/editora-senac/liferay_logo" /> 
24                        <#assign productImage = defaultImage /> 
25                        <#list cpMedia as media> 
26                          <#if media.getURL()?has_content && (media.getTitle()?? && media.getTitle()?contains("small"))> 
27                        <#assign productImage = media.getURL() /> 
28                        <#break> 
29                    </#if> 
30                </#list> 
31                  <#if productImage == defaultImage> 
32                     <#list cpMedia as media> 
33                     <#if media.getURL()?has_content> 
34                        <#assign productImage = media.getURL() /> 
35                        <#break> 
36                    </#if> 
37                  </#list> 
38                </#if> 
39                   <img src="${productImage}" onerror="this.onerror=null;this.src='${defaultImage}';" /> 
40                 </a> 
41                    <div class="informacoesProdutoCarrossel4"> 
42                      <a href="${friendlyURL}"> 
43                      <div class="infoSuperiores"> 
44                          <div class="tituloEspecialCarrossel4"> 
45                           ${curCPCatalogEntry.name?truncate(60, '...')} 
46                          </div> 
47                          <div class="autorEspecialCarrossel4">   
48                            <#list contentHelper.getCategorizedCPDefinitionSpecificationOptionValues(curCPCatalogEntry.getCPDefinitionId(),43620166) as specs>     
49                                <#if specs.CPSpecificationOptionId == 43594743> 
50                                    <#assign autor = specs.getValueCurrentValue() /> 
51                                        ${autor?truncate(45, '...')} 
52                                    <#break> 
53                                </#if> 
54                            </#list> 
55                          </div> 
56                      </div> 
57                      </a> 
58                      <div class="valorCarrossel4"> 
59                        <@liferay_commerce_ui["price"] 
60                            CPCatalogEntry=curCPCatalogEntry 
61                        /> 
62                    </div> 
63                    <div class="espiarCarrossel4"> 
64                      <#if productService.isAvailable( curCPCatalogEntry.getCPDefinitionId() ) > 
65                          <span class="comprarCarrossel4" data-sku="${curCPCatalogEntry.CPSkus[0].getSku()}"> 
66                             <#assign PortalUtil = staticUtil["com.liferay.portal.kernel.util.PortalUtil"] /> 
67                             <#assign id = "add-to-cart" + PortalUtil.generateRandomKey(request, "add-to-cart") + "" + curCPCatalogEntry.CPSkus[0].getSku() /> 
68                             
69                            <#list curCPCatalogEntry.getCPSkus() as skus> 
70                              <@liferay_commerce_ui["add-to-cart"] 
71                      CPInstanceId=skus.getCPInstanceId() 
72                                        id=id 
73                    />                      
74                              </#list>                     
75                     
76             
77                                                         
78                          </span> 
79                      <#else> 
80                        <span class="comprarCarrossel4"> 
81                         <button class="btnIndisponivelEspecialCarrossel4" disabled>Livro Indisponível</button> 
82                        </span> 
83                      </#if> 
84                    </div> 
85                    </div> 
86                </div> 
87            <#elseif curCPCatalogEntry?counter == 12> 
88                <!-- Ver Mais --> 
89                <div class="customCart"> 
90                    <#assign asset = assetentry.getEntry('com.liferay.commerce.product.model.CPDefinition',entries[0].getCPDefinitionId())/> 
91                    <#assign relateds = assetCategoryRel.getAssetEntryAssetCategoryRelsByAssetEntryId(asset.getEntryId())/> 
92                    <#if (currentURL?contains("catalogo?"))> 
93                        <#assign category = assetCategory.getAssetCategory(relateds[0].assetCategoryId)/> 
94                    <#else> 
95                        <#if relateds?has_content> 
96                            <#assign category = assetCategory.getAssetCategory(relateds[1].assetCategoryId)/> 
97                        </#if>   
98                    </#if>   
99                     
100                    <#if category?has_content> 
101                        <!-- classId de Category --> 
102                        <#assign friendlyURL = friendlyURLEntryLocalService.getMainFriendlyURLEntry(20013, category.categoryId)> 
103                    <#else> 
104                        <#assign friendlyURL = ""> 
105                    </#if>   
106                    <div class="verMaisCard"> 
107                        <div class="verMaisCardContent"> 
108                            <i class="fas fa-books fa-2x"></i> 
109                            <div>    
110                            <div class="background-left2"><i class="fas fa-circle circulo auxCirc" aria-hidden="true"></i>&nbsp;</div> 
111                            </div> 
112                            <span class="text">Quer mais livros dessa área?</span> 
113                            <span class="ancora"> 
114                             <#if friendlyURL?has_content> 
115                                <#assign categoryUrl = themeDisplay.getURLPortal() + '/categoria/' + friendlyURL.getUrlTitle(locale)/> 
116                                <a class="ancora-aux" href="${categoryUrl}">Confira todos</a></a> 
117                            </#if> 
118                            <!-- --> 
119                            <#assign entryName = entry.name?lower_case> 
120                            <#assign entryNameFormatted = entryName?replace(' ', '-')> 
121                            </span> 
122                            <div>    
123                                <div class="background-right2">&nbsp;<i class="fas fa-circle circulo auxCirc" aria-hidden="true"></i></div> 
124                            </div> 
125                        </div> 
126                    </div> 
127                </div> 
128                <#break> 
129            </#if> 
130        </#list> 
131    </#if> 
132</div> 
133 
134<style> 
135   
136.comprarCarrossel4 { 
137  margin-top: 0px; 
138
139 
140.comprarCarrossel4  div.form-group { 
141  display: none; 
142}  
143    .slider4 { 
144        display: none; 
145
146    .informacoesProdutoCarrossel4 span.commerce-discount { 
147        display: none; 
148
149     
150    .comprarCarrossel4 .add-to-cart-quantity-marker.active { 
151        opacity: 0; 
152        display: none; 
153
154 
155    .comprarCarrossel4  form.quantity-selector { 
156        display: none; 
157
158 
159    .comprarCarrossel4 .add-to-cart button.btn-add-to-cart{ 
160        background-color: #5ACC75; 
161        border-radius: 4px; 
162        width: 206px; 
163        padding: 1px; 
164        justify-content: center;  
165        padding-left: 13%; 
166
167   
168  .comprarCarrossel4 span.price-value-final { 
169     color: #D2691E !important; 
170
171   
172  .comprarCarrossel4 .btnIndisponivelEspecialCarrossel4 { 
173      margin-top: 0.75rem !important; 
174
175   
176    .comprarCarrossel4 .add-to-cart button.btn-add-to-cart{ 
177      background-color: #5ACC75 !important; 
178
179  
180    .informacoesProdutoCarrossel4 .product-price { 
181        font: normal normal bold 16px/17px Montserrat; 
182
183     
184    .slick-dots { 
185      z-index: 2; 
186
187 
188    @media (max-width: 1200px) { 
189      	.slick-dots { 
190            width: 100vw !important; 
191
192
193     
194    @media (min-width: 1023px) { 
195        .slick-dotted.slick-slider { 
196             
197
198        .slider4 { 
199            width: 1093px !important; 
200
201
202     
203    @media (max-width: 813px) { 
204        .divEspiarCarrossel4 { 
205            margin-top: 30px !important; 
206
207         
208         
209        .divValorCarrossel4 { 
210            margin-top: 15px !important; 
211
212
213     
214    @media (max-width: 768px) { 
215        .slider2 .next-arrow { 
216            right: 18px; 
217
218         
219        .slider2 .prev-arrow { 
220            left: 18px; 
221
222         
223        .slider2 .slide-arrow .fa { 
224            font-size: 22px; 
225            font-weight: 400; 
226
227 
228        .slider4 .valorCarrossel4 { 
229          margin-top: 5px; 
230
231 
232        .slider4 .espiarCarrossel4 { 
233          position: relative; 
234          top: -10px; 
235
236 
237        .valorCarrossel4 .price:not(.compact) .price-value { 
238            font: normal 600 18px/17px Montserrat !important; 
239
240        .valorCarrossel4 { 
241            position: relative; 
242            z-index: 9999; 
243            display: flex; 
244            padding-top: 25px; 
245            align-items: flex-end; 
246
247        .valorCarrossel4 .price-value { 
248            margin-left: 0!important; 
249
250        .comprarCarrossel4 .btn-add-to-cart { 
251          margin: 0 !important; 
252          padding-top: 2px !important; 
253
254        .comprarCarrossel4 .btn-add-to-cart::before { 
255          font-size: 16px; 
256
257 
258        .valorCarrossel4:not(.slider4semextracard .valorCarrossel4) { 
259          margin-top: 0!important; 
260          padding-top: 0!important; 
261
262        .slider4 .informacoesProdutoCarrossel4:not(.slider4semextracard) { 
263          top: unset; 
264          bottom: 4%; 
265
266 
267
268     
269    @media (max-width: 600px) { 
270      .comprarCarrossel4 button.btn.btn-primary { 
271        padding-left: 1px; 
272        height: 30px; 
273
274 
275      .btn-add-to-cart-inline::before { 
276        font-size: 14px; 
277        width: 100%; 
278        text-align: center; 
279        display: block; 
280
281
282     
283    .slider4:not(.slider4semextracard) .informacoesProdutoCarrossel4 > a .divValorCarrossel4 { 
284        display: flex; 
285        align-items: flex-end; 
286
287     
288    .slider4:not(.slider4semextracard) .informacoesProdutoCarrossel4 > a .divValorCarrossel4 .price { 
289        order: 1; 
290        margin-top: 0!important; 
291        margin-right: 2px; 
292
293     
294    .slider4:not(.slider4semextracard) .informacoesProdutoCarrossel4 > a .divValorCarrossel4 .parceladoCarrossel4 { 
295        order: 2; 
296
297     
298    .slider4:not(.slider4semextracard) .informacoesProdutoCarrossel4 > a .divValorCarrossel4 .parceladoCarrossel4 + .price { 
299        margin-right: 5px; 
300
301     
302    .slider4:not(.slider4semextracard) .informacoesProdutoCarrossel4 > a .divValorCarrossel4 .product-price { 
303        order: 3; 
304        margin-top: 0; 
305
306     
307    @media (max-width: 414px){ 
308        .slider4 { 
309            width: 100vw !important; 
310            /* margin-right: 0; */ 
311            margin-right: 20px; 
312            margin-left: 20px; 
313
314
315</style> 
316   
317<script> 
318  setTimeout(function(){ 
319    $(document).ready(function() { 
320      $('.slider4').slick({ 
321        arrows: true, 
322        slidesToShow: 4, 
323        slidesToScroll: 4, 
324        dots:true, 
325        infinite: false, 
326        prevArrow: '<a href="#" class="slide-arrow prev-arrow"><i class="fa fa-chevron-left gray"></i></a>', 
327        nextArrow: '<a href="#" class="slide-arrow next-arrow"><i class="fa fa-chevron-right gray"></i></a>', 
328        speed: 1000,  
329        index: 2, 
330        lazyLoad: 'ondemand', 
331        focusOnSelect:false, 
332        accessibility:false, 
333        adaptiveHeight:false, 
334        autoplay:false, 
335        responsive: [{ 
336          breakpoint: 1200, 
337          settings: { 
338            slidesToShow: 4, 
339            slidesToScroll: 4, 
340            variableWidth: true, 
341            infinite: false, 
342            centerMode: false, 
343            dots:true, 
344            arrows: true 
345
346        }, { 
347          breakpoint: 768, 
348          settings: { 
349            slidesToShow: 1, 
350            slidesToScroll: 1, 
351            variableWidth: true, 
352            infinite: false, 
353            centerPadding: 0, 
354            centerMode: false, 
355            dots:false, 
356            arrows: true 
357
358        }] 
359      }); 
360 
361      sendViewItemList([<#list entries as curCPCatalogEntry>${curCPCatalogEntry.getCPDefinitionId()},</#list>]) 
362    }); 
363     
364    const slider4 = document.getElementsByClassName("slider4"); 
365    for (let i = 0; i < slider4.length; i++) { 
366      slider4[i].style.display ='block'; 
367
368     
369    if (typeof promoPrice !== 'undefined') { 
370        promoPrice = document.getElementsByClassName("price"); 
371
372      else { 
373        promoPrice = document.getElementsByClassName("price"); 
374
375   
376      for (let i = 0; i < document.getElementsByClassName("price").length; i++) { 
377        let carrossel = document.getElementsByClassName("price"); 
378        if(carrossel[i].children.length < 5) { 
379          if(carrossel[i].children[0]) 
380            carrossel[i].children[0].innerText = "Por:" 
381 
382          if(carrossel[i].children[1]) { 
383            carrossel[i].children[1].style.color = "#F6921E" 
384            carrossel[i].children[1].style.marginLeft = ".5rem" 
385
386          carrossel[i].style.marginTop = "24px" 
387
388        else if (carrossel[i].children.length > 7){ 
389          carrossel[i].children[0].innerHTML = "<del>De:</del>" 
390          carrossel[i].children[0].style.color = "#78849e" 
391          carrossel[i].children[1].classList.remove("price-value-inactive") 
392          let priceBefore = carrossel[i].children[1].innerText 
393          carrossel[i].children[1].innerHTML = '<del>'+priceBefore+'</del>' 
394          carrossel[i].children[1].style.color = "#78849e" 
395                   
396          carrossel[i].children[2].style.display = "none" 
397          carrossel[i].children[3].style.display = "none" 
398          carrossel[i].children[4].innerText = "Por:" 
399          carrossel[i].children[5].style.display = "none" 
400          carrossel[i].children[6].style.display = "none" 
401          carrossel[i].children[7].style.color = "#F6921E" 
402          carrossel[i].children[7].style.marginLeft = ".5rem" 
403          carrossel[i].style.marginTop = "10px" 
404
405        else { 
406          carrossel[i].children[0].innerHTML = "<del>De:</del>" 
407          carrossel[i].children[0].style.color = "#78849e" 
408          carrossel[i].children[1].classList.remove("price-value-inactive") 
409          let priceBefore = carrossel[i].children[1].innerText 
410          carrossel[i].children[1].innerHTML = '<del>'+priceBefore+'</del>' 
411          carrossel[i].children[1].style.color = "#78849e" 
412          carrossel[i].children[2].style.display = "none" 
413          carrossel[i].children[3].style.display = "none" 
414          carrossel[i].children[4].innerText = "Por:" 
415          carrossel[i].children[5].style.color = "#F6921E" 
416          carrossel[i].children[5].style.marginLeft = ".5rem" 
417          carrossel[i].style.marginTop = "10px" 
418
419
420  }, 1500); 
421   
422   
423   
424</script> 

eds-home-Farmácia

Editor de produto

Um erro ocorreu enquanto processava o modelo.
The following has evaluated to null or missing:
==> serviceLocator.findService("br.senac.sp.editora.services.service.ProductService")  [in template "20102#20129#43698964" at line 13, column 27]

----
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 productService = serviceLocat...  [in template "20102#20129#43698964" at line 13, column 1]
----
1<#setting locale="pt_BR"> 
2 
3<#assign assetentry = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService") /> 
4<#assign assetCategoryRel = serviceLocator.findService("com.liferay.asset.entry.rel.service.AssetEntryAssetCategoryRelLocalService") /> 
5<#assign assetCategory = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService") /> 
6<#assign contentHelper = serviceLocator.findService("com.liferay.commerce.product.content.util.CPContentHelper") /> 
7<#assign CPDefinitionHelper = serviceLocator.findService("com.liferay.commerce.product.util.CPDefinitionHelper") /> 
8<#assign friendlyURLEntryLocalService = serviceLocator.findService("com.liferay.friendly.url.service.FriendlyURLEntryLocalService")> 
9 
10<#assign userLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.UserLocalService")> 
11<#assign warehouseService = serviceLocator.findService("com.liferay.commerce.inventory.service.CommerceInventoryWarehouseItemLocalService") /> 
12<#assign companyId =  userLocalService.getUser(themeDisplay.getUserId()).getCompanyId() /> 
13<#assign productService = serviceLocator.findService("br.senac.sp.editora.services.service.ProductService") /> 
14 
15<div class="slider4"> 
16    <#if entries?has_content> 
17        <#list entries as curCPCatalogEntry> 
18            <#if curCPCatalogEntry?counter < 12> 
19                <#assign friendlyURL = CPDefinitionHelper.getFriendlyURL(curCPCatalogEntry.getCPDefinitionId(),themeDisplay)> 
20                <div class="imgContainerEspecialCarrossel4"> 
21                    <a href="${friendlyURL}"> 
22                        <#assign cpMedia = contentHelper.getImages(curCPCatalogEntry.getCPDefinitionId(), themeDisplay) /> 
23                        <#assign defaultImage = "/documents/d/editora-senac/liferay_logo" /> 
24                        <#assign productImage = defaultImage /> 
25                        <#list cpMedia as media> 
26                          <#if media.getURL()?has_content && (media.getTitle()?? && media.getTitle()?contains("small"))> 
27                        <#assign productImage = media.getURL() /> 
28                        <#break> 
29                    </#if> 
30                </#list> 
31                  <#if productImage == defaultImage> 
32                     <#list cpMedia as media> 
33                     <#if media.getURL()?has_content> 
34                        <#assign productImage = media.getURL() /> 
35                        <#break> 
36                    </#if> 
37                  </#list> 
38                </#if> 
39                   <img src="${productImage}" onerror="this.onerror=null;this.src='${defaultImage}';" /> 
40                 </a> 
41                    <div class="informacoesProdutoCarrossel4"> 
42                      <a href="${friendlyURL}"> 
43                      <div class="infoSuperiores"> 
44                          <div class="tituloEspecialCarrossel4"> 
45                           ${curCPCatalogEntry.name?truncate(60, '...')} 
46                          </div> 
47                          <div class="autorEspecialCarrossel4">   
48                            <#list contentHelper.getCategorizedCPDefinitionSpecificationOptionValues(curCPCatalogEntry.getCPDefinitionId(),43620166) as specs>     
49                                <#if specs.CPSpecificationOptionId == 43594743> 
50                                    <#assign autor = specs.getValueCurrentValue() /> 
51                                        ${autor?truncate(45, '...')} 
52                                    <#break> 
53                                </#if> 
54                            </#list> 
55                          </div> 
56                      </div> 
57                      </a> 
58                      <div class="valorCarrossel4"> 
59                        <@liferay_commerce_ui["price"] 
60                            CPCatalogEntry=curCPCatalogEntry 
61                        /> 
62                    </div> 
63                    <div class="espiarCarrossel4"> 
64                      <#if productService.isAvailable( curCPCatalogEntry.getCPDefinitionId() ) > 
65                          <span class="comprarCarrossel4" data-sku="${curCPCatalogEntry.CPSkus[0].getSku()}"> 
66                             <#assign PortalUtil = staticUtil["com.liferay.portal.kernel.util.PortalUtil"] /> 
67                             <#assign id = "add-to-cart" + PortalUtil.generateRandomKey(request, "add-to-cart") + "" + curCPCatalogEntry.CPSkus[0].getSku() /> 
68                             
69                            <#list curCPCatalogEntry.getCPSkus() as skus> 
70                              <@liferay_commerce_ui["add-to-cart"] 
71                      CPInstanceId=skus.getCPInstanceId() 
72                                        id=id 
73                    />                      
74                              </#list>                     
75                     
76             
77                                                         
78                          </span> 
79                      <#else> 
80                        <span class="comprarCarrossel4"> 
81                         <button class="btnIndisponivelEspecialCarrossel4" disabled>Livro Indisponível</button> 
82                        </span> 
83                      </#if> 
84                    </div> 
85                    </div> 
86                </div> 
87            <#elseif curCPCatalogEntry?counter == 12> 
88                <!-- Ver Mais --> 
89                <div class="customCart"> 
90                    <#assign asset = assetentry.getEntry('com.liferay.commerce.product.model.CPDefinition',entries[0].getCPDefinitionId())/> 
91                    <#assign relateds = assetCategoryRel.getAssetEntryAssetCategoryRelsByAssetEntryId(asset.getEntryId())/> 
92                    <#if (currentURL?contains("catalogo?"))> 
93                        <#assign category = assetCategory.getAssetCategory(relateds[0].assetCategoryId)/> 
94                    <#else> 
95                        <#if relateds?has_content> 
96                            <#assign category = assetCategory.getAssetCategory(relateds[1].assetCategoryId)/> 
97                        </#if>   
98                    </#if>   
99                     
100                    <#if category?has_content> 
101                        <!-- classId de Category --> 
102                        <#assign friendlyURL = friendlyURLEntryLocalService.getMainFriendlyURLEntry(20013, category.categoryId)> 
103                    <#else> 
104                        <#assign friendlyURL = ""> 
105                    </#if>   
106                    <div class="verMaisCard"> 
107                        <div class="verMaisCardContent"> 
108                            <i class="fas fa-books fa-2x"></i> 
109                            <div>    
110                            <div class="background-left2"><i class="fas fa-circle circulo auxCirc" aria-hidden="true"></i>&nbsp;</div> 
111                            </div> 
112                            <span class="text">Quer mais livros dessa área?</span> 
113                            <span class="ancora"> 
114                             <#if friendlyURL?has_content> 
115                                <#assign categoryUrl = themeDisplay.getURLPortal() + '/categoria/' + friendlyURL.getUrlTitle(locale)/> 
116                                <a class="ancora-aux" href="${categoryUrl}">Confira todos</a></a> 
117                            </#if> 
118                            <!-- --> 
119                            <#assign entryName = entry.name?lower_case> 
120                            <#assign entryNameFormatted = entryName?replace(' ', '-')> 
121                            </span> 
122                            <div>    
123                                <div class="background-right2">&nbsp;<i class="fas fa-circle circulo auxCirc" aria-hidden="true"></i></div> 
124                            </div> 
125                        </div> 
126                    </div> 
127                </div> 
128                <#break> 
129            </#if> 
130        </#list> 
131    </#if> 
132</div> 
133 
134<style> 
135   
136.comprarCarrossel4 { 
137  margin-top: 0px; 
138
139 
140.comprarCarrossel4  div.form-group { 
141  display: none; 
142}  
143    .slider4 { 
144        display: none; 
145
146    .informacoesProdutoCarrossel4 span.commerce-discount { 
147        display: none; 
148
149     
150    .comprarCarrossel4 .add-to-cart-quantity-marker.active { 
151        opacity: 0; 
152        display: none; 
153
154 
155    .comprarCarrossel4  form.quantity-selector { 
156        display: none; 
157
158 
159    .comprarCarrossel4 .add-to-cart button.btn-add-to-cart{ 
160        background-color: #5ACC75; 
161        border-radius: 4px; 
162        width: 206px; 
163        padding: 1px; 
164        justify-content: center;  
165        padding-left: 13%; 
166
167   
168  .comprarCarrossel4 span.price-value-final { 
169     color: #D2691E !important; 
170
171   
172  .comprarCarrossel4 .btnIndisponivelEspecialCarrossel4 { 
173      margin-top: 0.75rem !important; 
174
175   
176    .comprarCarrossel4 .add-to-cart button.btn-add-to-cart{ 
177      background-color: #5ACC75 !important; 
178
179  
180    .informacoesProdutoCarrossel4 .product-price { 
181        font: normal normal bold 16px/17px Montserrat; 
182
183     
184    .slick-dots { 
185      z-index: 2; 
186
187 
188    @media (max-width: 1200px) { 
189      	.slick-dots { 
190            width: 100vw !important; 
191
192
193     
194    @media (min-width: 1023px) { 
195        .slick-dotted.slick-slider { 
196             
197
198        .slider4 { 
199            width: 1093px !important; 
200
201
202     
203    @media (max-width: 813px) { 
204        .divEspiarCarrossel4 { 
205            margin-top: 30px !important; 
206
207         
208         
209        .divValorCarrossel4 { 
210            margin-top: 15px !important; 
211
212
213     
214    @media (max-width: 768px) { 
215        .slider2 .next-arrow { 
216            right: 18px; 
217
218         
219        .slider2 .prev-arrow { 
220            left: 18px; 
221
222         
223        .slider2 .slide-arrow .fa { 
224            font-size: 22px; 
225            font-weight: 400; 
226
227 
228        .slider4 .valorCarrossel4 { 
229          margin-top: 5px; 
230
231 
232        .slider4 .espiarCarrossel4 { 
233          position: relative; 
234          top: -10px; 
235
236 
237        .valorCarrossel4 .price:not(.compact) .price-value { 
238            font: normal 600 18px/17px Montserrat !important; 
239
240        .valorCarrossel4 { 
241            position: relative; 
242            z-index: 9999; 
243            display: flex; 
244            padding-top: 25px; 
245            align-items: flex-end; 
246
247        .valorCarrossel4 .price-value { 
248            margin-left: 0!important; 
249
250        .comprarCarrossel4 .btn-add-to-cart { 
251          margin: 0 !important; 
252          padding-top: 2px !important; 
253
254        .comprarCarrossel4 .btn-add-to-cart::before { 
255          font-size: 16px; 
256
257 
258        .valorCarrossel4:not(.slider4semextracard .valorCarrossel4) { 
259          margin-top: 0!important; 
260          padding-top: 0!important; 
261
262        .slider4 .informacoesProdutoCarrossel4:not(.slider4semextracard) { 
263          top: unset; 
264          bottom: 4%; 
265
266 
267
268     
269    @media (max-width: 600px) { 
270      .comprarCarrossel4 button.btn.btn-primary { 
271        padding-left: 1px; 
272        height: 30px; 
273
274 
275      .btn-add-to-cart-inline::before { 
276        font-size: 14px; 
277        width: 100%; 
278        text-align: center; 
279        display: block; 
280
281
282     
283    .slider4:not(.slider4semextracard) .informacoesProdutoCarrossel4 > a .divValorCarrossel4 { 
284        display: flex; 
285        align-items: flex-end; 
286
287     
288    .slider4:not(.slider4semextracard) .informacoesProdutoCarrossel4 > a .divValorCarrossel4 .price { 
289        order: 1; 
290        margin-top: 0!important; 
291        margin-right: 2px; 
292
293     
294    .slider4:not(.slider4semextracard) .informacoesProdutoCarrossel4 > a .divValorCarrossel4 .parceladoCarrossel4 { 
295        order: 2; 
296
297     
298    .slider4:not(.slider4semextracard) .informacoesProdutoCarrossel4 > a .divValorCarrossel4 .parceladoCarrossel4 + .price { 
299        margin-right: 5px; 
300
301     
302    .slider4:not(.slider4semextracard) .informacoesProdutoCarrossel4 > a .divValorCarrossel4 .product-price { 
303        order: 3; 
304        margin-top: 0; 
305
306     
307    @media (max-width: 414px){ 
308        .slider4 { 
309            width: 100vw !important; 
310            /* margin-right: 0; */ 
311            margin-right: 20px; 
312            margin-left: 20px; 
313
314
315</style> 
316   
317<script> 
318  setTimeout(function(){ 
319    $(document).ready(function() { 
320      $('.slider4').slick({ 
321        arrows: true, 
322        slidesToShow: 4, 
323        slidesToScroll: 4, 
324        dots:true, 
325        infinite: false, 
326        prevArrow: '<a href="#" class="slide-arrow prev-arrow"><i class="fa fa-chevron-left gray"></i></a>', 
327        nextArrow: '<a href="#" class="slide-arrow next-arrow"><i class="fa fa-chevron-right gray"></i></a>', 
328        speed: 1000,  
329        index: 2, 
330        lazyLoad: 'ondemand', 
331        focusOnSelect:false, 
332        accessibility:false, 
333        adaptiveHeight:false, 
334        autoplay:false, 
335        responsive: [{ 
336          breakpoint: 1200, 
337          settings: { 
338            slidesToShow: 4, 
339            slidesToScroll: 4, 
340            variableWidth: true, 
341            infinite: false, 
342            centerMode: false, 
343            dots:true, 
344            arrows: true 
345
346        }, { 
347          breakpoint: 768, 
348          settings: { 
349            slidesToShow: 1, 
350            slidesToScroll: 1, 
351            variableWidth: true, 
352            infinite: false, 
353            centerPadding: 0, 
354            centerMode: false, 
355            dots:false, 
356            arrows: true 
357
358        }] 
359      }); 
360 
361      sendViewItemList([<#list entries as curCPCatalogEntry>${curCPCatalogEntry.getCPDefinitionId()},</#list>]) 
362    }); 
363     
364    const slider4 = document.getElementsByClassName("slider4"); 
365    for (let i = 0; i < slider4.length; i++) { 
366      slider4[i].style.display ='block'; 
367
368     
369    if (typeof promoPrice !== 'undefined') { 
370        promoPrice = document.getElementsByClassName("price"); 
371
372      else { 
373        promoPrice = document.getElementsByClassName("price"); 
374
375   
376      for (let i = 0; i < document.getElementsByClassName("price").length; i++) { 
377        let carrossel = document.getElementsByClassName("price"); 
378        if(carrossel[i].children.length < 5) { 
379          if(carrossel[i].children[0]) 
380            carrossel[i].children[0].innerText = "Por:" 
381 
382          if(carrossel[i].children[1]) { 
383            carrossel[i].children[1].style.color = "#F6921E" 
384            carrossel[i].children[1].style.marginLeft = ".5rem" 
385
386          carrossel[i].style.marginTop = "24px" 
387
388        else if (carrossel[i].children.length > 7){ 
389          carrossel[i].children[0].innerHTML = "<del>De:</del>" 
390          carrossel[i].children[0].style.color = "#78849e" 
391          carrossel[i].children[1].classList.remove("price-value-inactive") 
392          let priceBefore = carrossel[i].children[1].innerText 
393          carrossel[i].children[1].innerHTML = '<del>'+priceBefore+'</del>' 
394          carrossel[i].children[1].style.color = "#78849e" 
395                   
396          carrossel[i].children[2].style.display = "none" 
397          carrossel[i].children[3].style.display = "none" 
398          carrossel[i].children[4].innerText = "Por:" 
399          carrossel[i].children[5].style.display = "none" 
400          carrossel[i].children[6].style.display = "none" 
401          carrossel[i].children[7].style.color = "#F6921E" 
402          carrossel[i].children[7].style.marginLeft = ".5rem" 
403          carrossel[i].style.marginTop = "10px" 
404
405        else { 
406          carrossel[i].children[0].innerHTML = "<del>De:</del>" 
407          carrossel[i].children[0].style.color = "#78849e" 
408          carrossel[i].children[1].classList.remove("price-value-inactive") 
409          let priceBefore = carrossel[i].children[1].innerText 
410          carrossel[i].children[1].innerHTML = '<del>'+priceBefore+'</del>' 
411          carrossel[i].children[1].style.color = "#78849e" 
412          carrossel[i].children[2].style.display = "none" 
413          carrossel[i].children[3].style.display = "none" 
414          carrossel[i].children[4].innerText = "Por:" 
415          carrossel[i].children[5].style.color = "#F6921E" 
416          carrossel[i].children[5].style.marginLeft = ".5rem" 
417          carrossel[i].style.marginTop = "10px" 
418
419
420  }, 1500); 
421   
422   
423   
424</script> 

eds-home-Gestão em Saúde

Editor de produto

Um erro ocorreu enquanto processava o modelo.
The following has evaluated to null or missing:
==> serviceLocator.findService("br.senac.sp.editora.services.service.ProductService")  [in template "20102#20129#43698964" at line 13, column 27]

----
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 productService = serviceLocat...  [in template "20102#20129#43698964" at line 13, column 1]
----
1<#setting locale="pt_BR"> 
2 
3<#assign assetentry = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService") /> 
4<#assign assetCategoryRel = serviceLocator.findService("com.liferay.asset.entry.rel.service.AssetEntryAssetCategoryRelLocalService") /> 
5<#assign assetCategory = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService") /> 
6<#assign contentHelper = serviceLocator.findService("com.liferay.commerce.product.content.util.CPContentHelper") /> 
7<#assign CPDefinitionHelper = serviceLocator.findService("com.liferay.commerce.product.util.CPDefinitionHelper") /> 
8<#assign friendlyURLEntryLocalService = serviceLocator.findService("com.liferay.friendly.url.service.FriendlyURLEntryLocalService")> 
9 
10<#assign userLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.UserLocalService")> 
11<#assign warehouseService = serviceLocator.findService("com.liferay.commerce.inventory.service.CommerceInventoryWarehouseItemLocalService") /> 
12<#assign companyId =  userLocalService.getUser(themeDisplay.getUserId()).getCompanyId() /> 
13<#assign productService = serviceLocator.findService("br.senac.sp.editora.services.service.ProductService") /> 
14 
15<div class="slider4"> 
16    <#if entries?has_content> 
17        <#list entries as curCPCatalogEntry> 
18            <#if curCPCatalogEntry?counter < 12> 
19                <#assign friendlyURL = CPDefinitionHelper.getFriendlyURL(curCPCatalogEntry.getCPDefinitionId(),themeDisplay)> 
20                <div class="imgContainerEspecialCarrossel4"> 
21                    <a href="${friendlyURL}"> 
22                        <#assign cpMedia = contentHelper.getImages(curCPCatalogEntry.getCPDefinitionId(), themeDisplay) /> 
23                        <#assign defaultImage = "/documents/d/editora-senac/liferay_logo" /> 
24                        <#assign productImage = defaultImage /> 
25                        <#list cpMedia as media> 
26                          <#if media.getURL()?has_content && (media.getTitle()?? && media.getTitle()?contains("small"))> 
27                        <#assign productImage = media.getURL() /> 
28                        <#break> 
29                    </#if> 
30                </#list> 
31                  <#if productImage == defaultImage> 
32                     <#list cpMedia as media> 
33                     <#if media.getURL()?has_content> 
34                        <#assign productImage = media.getURL() /> 
35                        <#break> 
36                    </#if> 
37                  </#list> 
38                </#if> 
39                   <img src="${productImage}" onerror="this.onerror=null;this.src='${defaultImage}';" /> 
40                 </a> 
41                    <div class="informacoesProdutoCarrossel4"> 
42                      <a href="${friendlyURL}"> 
43                      <div class="infoSuperiores"> 
44                          <div class="tituloEspecialCarrossel4"> 
45                           ${curCPCatalogEntry.name?truncate(60, '...')} 
46                          </div> 
47                          <div class="autorEspecialCarrossel4">   
48                            <#list contentHelper.getCategorizedCPDefinitionSpecificationOptionValues(curCPCatalogEntry.getCPDefinitionId(),43620166) as specs>     
49                                <#if specs.CPSpecificationOptionId == 43594743> 
50                                    <#assign autor = specs.getValueCurrentValue() /> 
51                                        ${autor?truncate(45, '...')} 
52                                    <#break> 
53                                </#if> 
54                            </#list> 
55                          </div> 
56                      </div> 
57                      </a> 
58                      <div class="valorCarrossel4"> 
59                        <@liferay_commerce_ui["price"] 
60                            CPCatalogEntry=curCPCatalogEntry 
61                        /> 
62                    </div> 
63                    <div class="espiarCarrossel4"> 
64                      <#if productService.isAvailable( curCPCatalogEntry.getCPDefinitionId() ) > 
65                          <span class="comprarCarrossel4" data-sku="${curCPCatalogEntry.CPSkus[0].getSku()}"> 
66                             <#assign PortalUtil = staticUtil["com.liferay.portal.kernel.util.PortalUtil"] /> 
67                             <#assign id = "add-to-cart" + PortalUtil.generateRandomKey(request, "add-to-cart") + "" + curCPCatalogEntry.CPSkus[0].getSku() /> 
68                             
69                            <#list curCPCatalogEntry.getCPSkus() as skus> 
70                              <@liferay_commerce_ui["add-to-cart"] 
71                      CPInstanceId=skus.getCPInstanceId() 
72                                        id=id 
73                    />                      
74                              </#list>                     
75                     
76             
77                                                         
78                          </span> 
79                      <#else> 
80                        <span class="comprarCarrossel4"> 
81                         <button class="btnIndisponivelEspecialCarrossel4" disabled>Livro Indisponível</button> 
82                        </span> 
83                      </#if> 
84                    </div> 
85                    </div> 
86                </div> 
87            <#elseif curCPCatalogEntry?counter == 12> 
88                <!-- Ver Mais --> 
89                <div class="customCart"> 
90                    <#assign asset = assetentry.getEntry('com.liferay.commerce.product.model.CPDefinition',entries[0].getCPDefinitionId())/> 
91                    <#assign relateds = assetCategoryRel.getAssetEntryAssetCategoryRelsByAssetEntryId(asset.getEntryId())/> 
92                    <#if (currentURL?contains("catalogo?"))> 
93                        <#assign category = assetCategory.getAssetCategory(relateds[0].assetCategoryId)/> 
94                    <#else> 
95                        <#if relateds?has_content> 
96                            <#assign category = assetCategory.getAssetCategory(relateds[1].assetCategoryId)/> 
97                        </#if>   
98                    </#if>   
99                     
100                    <#if category?has_content> 
101                        <!-- classId de Category --> 
102                        <#assign friendlyURL = friendlyURLEntryLocalService.getMainFriendlyURLEntry(20013, category.categoryId)> 
103                    <#else> 
104                        <#assign friendlyURL = ""> 
105                    </#if>   
106                    <div class="verMaisCard"> 
107                        <div class="verMaisCardContent"> 
108                            <i class="fas fa-books fa-2x"></i> 
109                            <div>    
110                            <div class="background-left2"><i class="fas fa-circle circulo auxCirc" aria-hidden="true"></i>&nbsp;</div> 
111                            </div> 
112                            <span class="text">Quer mais livros dessa área?</span> 
113                            <span class="ancora"> 
114                             <#if friendlyURL?has_content> 
115                                <#assign categoryUrl = themeDisplay.getURLPortal() + '/categoria/' + friendlyURL.getUrlTitle(locale)/> 
116                                <a class="ancora-aux" href="${categoryUrl}">Confira todos</a></a> 
117                            </#if> 
118                            <!-- --> 
119                            <#assign entryName = entry.name?lower_case> 
120                            <#assign entryNameFormatted = entryName?replace(' ', '-')> 
121                            </span> 
122                            <div>    
123                                <div class="background-right2">&nbsp;<i class="fas fa-circle circulo auxCirc" aria-hidden="true"></i></div> 
124                            </div> 
125                        </div> 
126                    </div> 
127                </div> 
128                <#break> 
129            </#if> 
130        </#list> 
131    </#if> 
132</div> 
133 
134<style> 
135   
136.comprarCarrossel4 { 
137  margin-top: 0px; 
138
139 
140.comprarCarrossel4  div.form-group { 
141  display: none; 
142}  
143    .slider4 { 
144        display: none; 
145
146    .informacoesProdutoCarrossel4 span.commerce-discount { 
147        display: none; 
148
149     
150    .comprarCarrossel4 .add-to-cart-quantity-marker.active { 
151        opacity: 0; 
152        display: none; 
153
154 
155    .comprarCarrossel4  form.quantity-selector { 
156        display: none; 
157
158 
159    .comprarCarrossel4 .add-to-cart button.btn-add-to-cart{ 
160        background-color: #5ACC75; 
161        border-radius: 4px; 
162        width: 206px; 
163        padding: 1px; 
164        justify-content: center;  
165        padding-left: 13%; 
166
167   
168  .comprarCarrossel4 span.price-value-final { 
169     color: #D2691E !important; 
170
171   
172  .comprarCarrossel4 .btnIndisponivelEspecialCarrossel4 { 
173      margin-top: 0.75rem !important; 
174
175   
176    .comprarCarrossel4 .add-to-cart button.btn-add-to-cart{ 
177      background-color: #5ACC75 !important; 
178
179  
180    .informacoesProdutoCarrossel4 .product-price { 
181        font: normal normal bold 16px/17px Montserrat; 
182
183     
184    .slick-dots { 
185      z-index: 2; 
186
187 
188    @media (max-width: 1200px) { 
189      	.slick-dots { 
190            width: 100vw !important; 
191
192
193     
194    @media (min-width: 1023px) { 
195        .slick-dotted.slick-slider { 
196             
197
198        .slider4 { 
199            width: 1093px !important; 
200
201
202     
203    @media (max-width: 813px) { 
204        .divEspiarCarrossel4 { 
205            margin-top: 30px !important; 
206
207         
208         
209        .divValorCarrossel4 { 
210            margin-top: 15px !important; 
211
212
213     
214    @media (max-width: 768px) { 
215        .slider2 .next-arrow { 
216            right: 18px; 
217
218         
219        .slider2 .prev-arrow { 
220            left: 18px; 
221
222         
223        .slider2 .slide-arrow .fa { 
224            font-size: 22px; 
225            font-weight: 400; 
226
227 
228        .slider4 .valorCarrossel4 { 
229          margin-top: 5px; 
230
231 
232        .slider4 .espiarCarrossel4 { 
233          position: relative; 
234          top: -10px; 
235
236 
237        .valorCarrossel4 .price:not(.compact) .price-value { 
238            font: normal 600 18px/17px Montserrat !important; 
239
240        .valorCarrossel4 { 
241            position: relative; 
242            z-index: 9999; 
243            display: flex; 
244            padding-top: 25px; 
245            align-items: flex-end; 
246
247        .valorCarrossel4 .price-value { 
248            margin-left: 0!important; 
249
250        .comprarCarrossel4 .btn-add-to-cart { 
251          margin: 0 !important; 
252          padding-top: 2px !important; 
253
254        .comprarCarrossel4 .btn-add-to-cart::before { 
255          font-size: 16px; 
256
257 
258        .valorCarrossel4:not(.slider4semextracard .valorCarrossel4) { 
259          margin-top: 0!important; 
260          padding-top: 0!important; 
261
262        .slider4 .informacoesProdutoCarrossel4:not(.slider4semextracard) { 
263          top: unset; 
264          bottom: 4%; 
265
266 
267
268     
269    @media (max-width: 600px) { 
270      .comprarCarrossel4 button.btn.btn-primary { 
271        padding-left: 1px; 
272        height: 30px; 
273
274 
275      .btn-add-to-cart-inline::before { 
276        font-size: 14px; 
277        width: 100%; 
278        text-align: center; 
279        display: block; 
280
281
282     
283    .slider4:not(.slider4semextracard) .informacoesProdutoCarrossel4 > a .divValorCarrossel4 { 
284        display: flex; 
285        align-items: flex-end; 
286
287     
288    .slider4:not(.slider4semextracard) .informacoesProdutoCarrossel4 > a .divValorCarrossel4 .price { 
289        order: 1; 
290        margin-top: 0!important; 
291        margin-right: 2px; 
292
293     
294    .slider4:not(.slider4semextracard) .informacoesProdutoCarrossel4 > a .divValorCarrossel4 .parceladoCarrossel4 { 
295        order: 2; 
296
297     
298    .slider4:not(.slider4semextracard) .informacoesProdutoCarrossel4 > a .divValorCarrossel4 .parceladoCarrossel4 + .price { 
299        margin-right: 5px; 
300
301     
302    .slider4:not(.slider4semextracard) .informacoesProdutoCarrossel4 > a .divValorCarrossel4 .product-price { 
303        order: 3; 
304        margin-top: 0; 
305
306     
307    @media (max-width: 414px){ 
308        .slider4 { 
309            width: 100vw !important; 
310            /* margin-right: 0; */ 
311            margin-right: 20px; 
312            margin-left: 20px; 
313
314
315</style> 
316   
317<script> 
318  setTimeout(function(){ 
319    $(document).ready(function() { 
320      $('.slider4').slick({ 
321        arrows: true, 
322        slidesToShow: 4, 
323        slidesToScroll: 4, 
324        dots:true, 
325        infinite: false, 
326        prevArrow: '<a href="#" class="slide-arrow prev-arrow"><i class="fa fa-chevron-left gray"></i></a>', 
327        nextArrow: '<a href="#" class="slide-arrow next-arrow"><i class="fa fa-chevron-right gray"></i></a>', 
328        speed: 1000,  
329        index: 2, 
330        lazyLoad: 'ondemand', 
331        focusOnSelect:false, 
332        accessibility:false, 
333        adaptiveHeight:false, 
334        autoplay:false, 
335        responsive: [{ 
336          breakpoint: 1200, 
337          settings: { 
338            slidesToShow: 4, 
339            slidesToScroll: 4, 
340            variableWidth: true, 
341            infinite: false, 
342            centerMode: false, 
343            dots:true, 
344            arrows: true 
345
346        }, { 
347          breakpoint: 768, 
348          settings: { 
349            slidesToShow: 1, 
350            slidesToScroll: 1, 
351            variableWidth: true, 
352            infinite: false, 
353            centerPadding: 0, 
354            centerMode: false, 
355            dots:false, 
356            arrows: true 
357
358        }] 
359      }); 
360 
361      sendViewItemList([<#list entries as curCPCatalogEntry>${curCPCatalogEntry.getCPDefinitionId()},</#list>]) 
362    }); 
363     
364    const slider4 = document.getElementsByClassName("slider4"); 
365    for (let i = 0; i < slider4.length; i++) { 
366      slider4[i].style.display ='block'; 
367
368     
369    if (typeof promoPrice !== 'undefined') { 
370        promoPrice = document.getElementsByClassName("price"); 
371
372      else { 
373        promoPrice = document.getElementsByClassName("price"); 
374
375   
376      for (let i = 0; i < document.getElementsByClassName("price").length; i++) { 
377        let carrossel = document.getElementsByClassName("price"); 
378        if(carrossel[i].children.length < 5) { 
379          if(carrossel[i].children[0]) 
380            carrossel[i].children[0].innerText = "Por:" 
381 
382          if(carrossel[i].children[1]) { 
383            carrossel[i].children[1].style.color = "#F6921E" 
384            carrossel[i].children[1].style.marginLeft = ".5rem" 
385
386          carrossel[i].style.marginTop = "24px" 
387
388        else if (carrossel[i].children.length > 7){ 
389          carrossel[i].children[0].innerHTML = "<del>De:</del>" 
390          carrossel[i].children[0].style.color = "#78849e" 
391          carrossel[i].children[1].classList.remove("price-value-inactive") 
392          let priceBefore = carrossel[i].children[1].innerText 
393          carrossel[i].children[1].innerHTML = '<del>'+priceBefore+'</del>' 
394          carrossel[i].children[1].style.color = "#78849e" 
395                   
396          carrossel[i].children[2].style.display = "none" 
397          carrossel[i].children[3].style.display = "none" 
398          carrossel[i].children[4].innerText = "Por:" 
399          carrossel[i].children[5].style.display = "none" 
400          carrossel[i].children[6].style.display = "none" 
401          carrossel[i].children[7].style.color = "#F6921E" 
402          carrossel[i].children[7].style.marginLeft = ".5rem" 
403          carrossel[i].style.marginTop = "10px" 
404
405        else { 
406          carrossel[i].children[0].innerHTML = "<del>De:</del>" 
407          carrossel[i].children[0].style.color = "#78849e" 
408          carrossel[i].children[1].classList.remove("price-value-inactive") 
409          let priceBefore = carrossel[i].children[1].innerText 
410          carrossel[i].children[1].innerHTML = '<del>'+priceBefore+'</del>' 
411          carrossel[i].children[1].style.color = "#78849e" 
412          carrossel[i].children[2].style.display = "none" 
413          carrossel[i].children[3].style.display = "none" 
414          carrossel[i].children[4].innerText = "Por:" 
415          carrossel[i].children[5].style.color = "#F6921E" 
416          carrossel[i].children[5].style.marginLeft = ".5rem" 
417          carrossel[i].style.marginTop = "10px" 
418
419
420  }, 1500); 
421   
422   
423   
424</script> 

eds-home-Hemoterapia e Análises Clínicas

Editor de produto

Um erro ocorreu enquanto processava o modelo.
The following has evaluated to null or missing:
==> serviceLocator.findService("br.senac.sp.editora.services.service.ProductService")  [in template "20102#20129#43698964" at line 13, column 27]

----
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 productService = serviceLocat...  [in template "20102#20129#43698964" at line 13, column 1]
----
1<#setting locale="pt_BR"> 
2 
3<#assign assetentry = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService") /> 
4<#assign assetCategoryRel = serviceLocator.findService("com.liferay.asset.entry.rel.service.AssetEntryAssetCategoryRelLocalService") /> 
5<#assign assetCategory = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService") /> 
6<#assign contentHelper = serviceLocator.findService("com.liferay.commerce.product.content.util.CPContentHelper") /> 
7<#assign CPDefinitionHelper = serviceLocator.findService("com.liferay.commerce.product.util.CPDefinitionHelper") /> 
8<#assign friendlyURLEntryLocalService = serviceLocator.findService("com.liferay.friendly.url.service.FriendlyURLEntryLocalService")> 
9 
10<#assign userLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.UserLocalService")> 
11<#assign warehouseService = serviceLocator.findService("com.liferay.commerce.inventory.service.CommerceInventoryWarehouseItemLocalService") /> 
12<#assign companyId =  userLocalService.getUser(themeDisplay.getUserId()).getCompanyId() /> 
13<#assign productService = serviceLocator.findService("br.senac.sp.editora.services.service.ProductService") /> 
14 
15<div class="slider4"> 
16    <#if entries?has_content> 
17        <#list entries as curCPCatalogEntry> 
18            <#if curCPCatalogEntry?counter < 12> 
19                <#assign friendlyURL = CPDefinitionHelper.getFriendlyURL(curCPCatalogEntry.getCPDefinitionId(),themeDisplay)> 
20                <div class="imgContainerEspecialCarrossel4"> 
21                    <a href="${friendlyURL}"> 
22                        <#assign cpMedia = contentHelper.getImages(curCPCatalogEntry.getCPDefinitionId(), themeDisplay) /> 
23                        <#assign defaultImage = "/documents/d/editora-senac/liferay_logo" /> 
24                        <#assign productImage = defaultImage /> 
25                        <#list cpMedia as media> 
26                          <#if media.getURL()?has_content && (media.getTitle()?? && media.getTitle()?contains("small"))> 
27                        <#assign productImage = media.getURL() /> 
28                        <#break> 
29                    </#if> 
30                </#list> 
31                  <#if productImage == defaultImage> 
32                     <#list cpMedia as media> 
33                     <#if media.getURL()?has_content> 
34                        <#assign productImage = media.getURL() /> 
35                        <#break> 
36                    </#if> 
37                  </#list> 
38                </#if> 
39                   <img src="${productImage}" onerror="this.onerror=null;this.src='${defaultImage}';" /> 
40                 </a> 
41                    <div class="informacoesProdutoCarrossel4"> 
42                      <a href="${friendlyURL}"> 
43                      <div class="infoSuperiores"> 
44                          <div class="tituloEspecialCarrossel4"> 
45                           ${curCPCatalogEntry.name?truncate(60, '...')} 
46                          </div> 
47                          <div class="autorEspecialCarrossel4">   
48                            <#list contentHelper.getCategorizedCPDefinitionSpecificationOptionValues(curCPCatalogEntry.getCPDefinitionId(),43620166) as specs>     
49                                <#if specs.CPSpecificationOptionId == 43594743> 
50                                    <#assign autor = specs.getValueCurrentValue() /> 
51                                        ${autor?truncate(45, '...')} 
52                                    <#break> 
53                                </#if> 
54                            </#list> 
55                          </div> 
56                      </div> 
57                      </a> 
58                      <div class="valorCarrossel4"> 
59                        <@liferay_commerce_ui["price"] 
60                            CPCatalogEntry=curCPCatalogEntry 
61                        /> 
62                    </div> 
63                    <div class="espiarCarrossel4"> 
64                      <#if productService.isAvailable( curCPCatalogEntry.getCPDefinitionId() ) > 
65                          <span class="comprarCarrossel4" data-sku="${curCPCatalogEntry.CPSkus[0].getSku()}"> 
66                             <#assign PortalUtil = staticUtil["com.liferay.portal.kernel.util.PortalUtil"] /> 
67                             <#assign id = "add-to-cart" + PortalUtil.generateRandomKey(request, "add-to-cart") + "" + curCPCatalogEntry.CPSkus[0].getSku() /> 
68                             
69                            <#list curCPCatalogEntry.getCPSkus() as skus> 
70                              <@liferay_commerce_ui["add-to-cart"] 
71                      CPInstanceId=skus.getCPInstanceId() 
72                                        id=id 
73                    />                      
74                              </#list>                     
75                     
76             
77                                                         
78                          </span> 
79                      <#else> 
80                        <span class="comprarCarrossel4"> 
81                         <button class="btnIndisponivelEspecialCarrossel4" disabled>Livro Indisponível</button> 
82                        </span> 
83                      </#if> 
84                    </div> 
85                    </div> 
86                </div> 
87            <#elseif curCPCatalogEntry?counter == 12> 
88                <!-- Ver Mais --> 
89                <div class="customCart"> 
90                    <#assign asset = assetentry.getEntry('com.liferay.commerce.product.model.CPDefinition',entries[0].getCPDefinitionId())/> 
91                    <#assign relateds = assetCategoryRel.getAssetEntryAssetCategoryRelsByAssetEntryId(asset.getEntryId())/> 
92                    <#if (currentURL?contains("catalogo?"))> 
93                        <#assign category = assetCategory.getAssetCategory(relateds[0].assetCategoryId)/> 
94                    <#else> 
95                        <#if relateds?has_content> 
96                            <#assign category = assetCategory.getAssetCategory(relateds[1].assetCategoryId)/> 
97                        </#if>   
98                    </#if>   
99                     
100                    <#if category?has_content> 
101                        <!-- classId de Category --> 
102                        <#assign friendlyURL = friendlyURLEntryLocalService.getMainFriendlyURLEntry(20013, category.categoryId)> 
103                    <#else> 
104                        <#assign friendlyURL = ""> 
105                    </#if>   
106                    <div class="verMaisCard"> 
107                        <div class="verMaisCardContent"> 
108                            <i class="fas fa-books fa-2x"></i> 
109                            <div>    
110                            <div class="background-left2"><i class="fas fa-circle circulo auxCirc" aria-hidden="true"></i>&nbsp;</div> 
111                            </div> 
112                            <span class="text">Quer mais livros dessa área?</span> 
113                            <span class="ancora"> 
114                             <#if friendlyURL?has_content> 
115                                <#assign categoryUrl = themeDisplay.getURLPortal() + '/categoria/' + friendlyURL.getUrlTitle(locale)/> 
116                                <a class="ancora-aux" href="${categoryUrl}">Confira todos</a></a> 
117                            </#if> 
118                            <!-- --> 
119                            <#assign entryName = entry.name?lower_case> 
120                            <#assign entryNameFormatted = entryName?replace(' ', '-')> 
121                            </span> 
122                            <div>    
123                                <div class="background-right2">&nbsp;<i class="fas fa-circle circulo auxCirc" aria-hidden="true"></i></div> 
124                            </div> 
125                        </div> 
126                    </div> 
127                </div> 
128                <#break> 
129            </#if> 
130        </#list> 
131    </#if> 
132</div> 
133 
134<style> 
135   
136.comprarCarrossel4 { 
137  margin-top: 0px; 
138
139 
140.comprarCarrossel4  div.form-group { 
141  display: none; 
142}  
143    .slider4 { 
144        display: none; 
145
146    .informacoesProdutoCarrossel4 span.commerce-discount { 
147        display: none; 
148
149     
150    .comprarCarrossel4 .add-to-cart-quantity-marker.active { 
151        opacity: 0; 
152        display: none; 
153
154 
155    .comprarCarrossel4  form.quantity-selector { 
156        display: none; 
157
158 
159    .comprarCarrossel4 .add-to-cart button.btn-add-to-cart{ 
160        background-color: #5ACC75; 
161        border-radius: 4px; 
162        width: 206px; 
163        padding: 1px; 
164        justify-content: center;  
165        padding-left: 13%; 
166
167   
168  .comprarCarrossel4 span.price-value-final { 
169     color: #D2691E !important; 
170
171   
172  .comprarCarrossel4 .btnIndisponivelEspecialCarrossel4 { 
173      margin-top: 0.75rem !important; 
174
175   
176    .comprarCarrossel4 .add-to-cart button.btn-add-to-cart{ 
177      background-color: #5ACC75 !important; 
178
179  
180    .informacoesProdutoCarrossel4 .product-price { 
181        font: normal normal bold 16px/17px Montserrat; 
182
183     
184    .slick-dots { 
185      z-index: 2; 
186
187 
188    @media (max-width: 1200px) { 
189      	.slick-dots { 
190            width: 100vw !important; 
191
192
193     
194    @media (min-width: 1023px) { 
195        .slick-dotted.slick-slider { 
196             
197
198        .slider4 { 
199            width: 1093px !important; 
200
201
202     
203    @media (max-width: 813px) { 
204        .divEspiarCarrossel4 { 
205            margin-top: 30px !important; 
206
207         
208         
209        .divValorCarrossel4 { 
210            margin-top: 15px !important; 
211
212
213     
214    @media (max-width: 768px) { 
215        .slider2 .next-arrow { 
216            right: 18px; 
217
218         
219        .slider2 .prev-arrow { 
220            left: 18px; 
221
222         
223        .slider2 .slide-arrow .fa { 
224            font-size: 22px; 
225            font-weight: 400; 
226
227 
228        .slider4 .valorCarrossel4 { 
229          margin-top: 5px; 
230
231 
232        .slider4 .espiarCarrossel4 { 
233          position: relative; 
234          top: -10px; 
235
236 
237        .valorCarrossel4 .price:not(.compact) .price-value { 
238            font: normal 600 18px/17px Montserrat !important; 
239
240        .valorCarrossel4 { 
241            position: relative; 
242            z-index: 9999; 
243            display: flex; 
244            padding-top: 25px; 
245            align-items: flex-end; 
246
247        .valorCarrossel4 .price-value { 
248            margin-left: 0!important; 
249
250        .comprarCarrossel4 .btn-add-to-cart { 
251          margin: 0 !important; 
252          padding-top: 2px !important; 
253
254        .comprarCarrossel4 .btn-add-to-cart::before { 
255          font-size: 16px; 
256
257 
258        .valorCarrossel4:not(.slider4semextracard .valorCarrossel4) { 
259          margin-top: 0!important; 
260          padding-top: 0!important; 
261
262        .slider4 .informacoesProdutoCarrossel4:not(.slider4semextracard) { 
263          top: unset; 
264          bottom: 4%; 
265
266 
267
268     
269    @media (max-width: 600px) { 
270      .comprarCarrossel4 button.btn.btn-primary { 
271        padding-left: 1px; 
272        height: 30px; 
273
274 
275      .btn-add-to-cart-inline::before { 
276        font-size: 14px; 
277        width: 100%; 
278        text-align: center; 
279        display: block; 
280
281
282     
283    .slider4:not(.slider4semextracard) .informacoesProdutoCarrossel4 > a .divValorCarrossel4 { 
284        display: flex; 
285        align-items: flex-end; 
286
287     
288    .slider4:not(.slider4semextracard) .informacoesProdutoCarrossel4 > a .divValorCarrossel4 .price { 
289        order: 1; 
290        margin-top: 0!important; 
291        margin-right: 2px; 
292
293     
294    .slider4:not(.slider4semextracard) .informacoesProdutoCarrossel4 > a .divValorCarrossel4 .parceladoCarrossel4 { 
295        order: 2; 
296
297     
298    .slider4:not(.slider4semextracard) .informacoesProdutoCarrossel4 > a .divValorCarrossel4 .parceladoCarrossel4 + .price { 
299        margin-right: 5px; 
300
301     
302    .slider4:not(.slider4semextracard) .informacoesProdutoCarrossel4 > a .divValorCarrossel4 .product-price { 
303        order: 3; 
304        margin-top: 0; 
305
306     
307    @media (max-width: 414px){ 
308        .slider4 { 
309            width: 100vw !important; 
310            /* margin-right: 0; */ 
311            margin-right: 20px; 
312            margin-left: 20px; 
313
314
315</style> 
316   
317<script> 
318  setTimeout(function(){ 
319    $(document).ready(function() { 
320      $('.slider4').slick({ 
321        arrows: true, 
322        slidesToShow: 4, 
323        slidesToScroll: 4, 
324        dots:true, 
325        infinite: false, 
326        prevArrow: '<a href="#" class="slide-arrow prev-arrow"><i class="fa fa-chevron-left gray"></i></a>', 
327        nextArrow: '<a href="#" class="slide-arrow next-arrow"><i class="fa fa-chevron-right gray"></i></a>', 
328        speed: 1000,  
329        index: 2, 
330        lazyLoad: 'ondemand', 
331        focusOnSelect:false, 
332        accessibility:false, 
333        adaptiveHeight:false, 
334        autoplay:false, 
335        responsive: [{ 
336          breakpoint: 1200, 
337          settings: { 
338            slidesToShow: 4, 
339            slidesToScroll: 4, 
340            variableWidth: true, 
341            infinite: false, 
342            centerMode: false, 
343            dots:true, 
344            arrows: true 
345
346        }, { 
347          breakpoint: 768, 
348          settings: { 
349            slidesToShow: 1, 
350            slidesToScroll: 1, 
351            variableWidth: true, 
352            infinite: false, 
353            centerPadding: 0, 
354            centerMode: false, 
355            dots:false, 
356            arrows: true 
357
358        }] 
359      }); 
360 
361      sendViewItemList([<#list entries as curCPCatalogEntry>${curCPCatalogEntry.getCPDefinitionId()},</#list>]) 
362    }); 
363     
364    const slider4 = document.getElementsByClassName("slider4"); 
365    for (let i = 0; i < slider4.length; i++) { 
366      slider4[i].style.display ='block'; 
367
368     
369    if (typeof promoPrice !== 'undefined') { 
370        promoPrice = document.getElementsByClassName("price"); 
371
372      else { 
373        promoPrice = document.getElementsByClassName("price"); 
374
375   
376      for (let i = 0; i < document.getElementsByClassName("price").length; i++) { 
377        let carrossel = document.getElementsByClassName("price"); 
378        if(carrossel[i].children.length < 5) { 
379          if(carrossel[i].children[0]) 
380            carrossel[i].children[0].innerText = "Por:" 
381 
382          if(carrossel[i].children[1]) { 
383            carrossel[i].children[1].style.color = "#F6921E" 
384            carrossel[i].children[1].style.marginLeft = ".5rem" 
385
386          carrossel[i].style.marginTop = "24px" 
387
388        else if (carrossel[i].children.length > 7){ 
389          carrossel[i].children[0].innerHTML = "<del>De:</del>" 
390          carrossel[i].children[0].style.color = "#78849e" 
391          carrossel[i].children[1].classList.remove("price-value-inactive") 
392          let priceBefore = carrossel[i].children[1].innerText 
393          carrossel[i].children[1].innerHTML = '<del>'+priceBefore+'</del>' 
394          carrossel[i].children[1].style.color = "#78849e" 
395                   
396          carrossel[i].children[2].style.display = "none" 
397          carrossel[i].children[3].style.display = "none" 
398          carrossel[i].children[4].innerText = "Por:" 
399          carrossel[i].children[5].style.display = "none" 
400          carrossel[i].children[6].style.display = "none" 
401          carrossel[i].children[7].style.color = "#F6921E" 
402          carrossel[i].children[7].style.marginLeft = ".5rem" 
403          carrossel[i].style.marginTop = "10px" 
404
405        else { 
406          carrossel[i].children[0].innerHTML = "<del>De:</del>" 
407          carrossel[i].children[0].style.color = "#78849e" 
408          carrossel[i].children[1].classList.remove("price-value-inactive") 
409          let priceBefore = carrossel[i].children[1].innerText 
410          carrossel[i].children[1].innerHTML = '<del>'+priceBefore+'</del>' 
411          carrossel[i].children[1].style.color = "#78849e" 
412          carrossel[i].children[2].style.display = "none" 
413          carrossel[i].children[3].style.display = "none" 
414          carrossel[i].children[4].innerText = "Por:" 
415          carrossel[i].children[5].style.color = "#F6921E" 
416          carrossel[i].children[5].style.marginLeft = ".5rem" 
417          carrossel[i].style.marginTop = "10px" 
418
419
420  }, 1500); 
421   
422   
423   
424</script> 

eds-home-Massoterapia e Terapias complementares

Editor de produto

Um erro ocorreu enquanto processava o modelo.
The following has evaluated to null or missing:
==> serviceLocator.findService("br.senac.sp.editora.services.service.ProductService")  [in template "20102#20129#43698964" at line 13, column 27]

----
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 productService = serviceLocat...  [in template "20102#20129#43698964" at line 13, column 1]
----
1<#setting locale="pt_BR"> 
2 
3<#assign assetentry = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService") /> 
4<#assign assetCategoryRel = serviceLocator.findService("com.liferay.asset.entry.rel.service.AssetEntryAssetCategoryRelLocalService") /> 
5<#assign assetCategory = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService") /> 
6<#assign contentHelper = serviceLocator.findService("com.liferay.commerce.product.content.util.CPContentHelper") /> 
7<#assign CPDefinitionHelper = serviceLocator.findService("com.liferay.commerce.product.util.CPDefinitionHelper") /> 
8<#assign friendlyURLEntryLocalService = serviceLocator.findService("com.liferay.friendly.url.service.FriendlyURLEntryLocalService")> 
9 
10<#assign userLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.UserLocalService")> 
11<#assign warehouseService = serviceLocator.findService("com.liferay.commerce.inventory.service.CommerceInventoryWarehouseItemLocalService") /> 
12<#assign companyId =  userLocalService.getUser(themeDisplay.getUserId()).getCompanyId() /> 
13<#assign productService = serviceLocator.findService("br.senac.sp.editora.services.service.ProductService") /> 
14 
15<div class="slider4"> 
16    <#if entries?has_content> 
17        <#list entries as curCPCatalogEntry> 
18            <#if curCPCatalogEntry?counter < 12> 
19                <#assign friendlyURL = CPDefinitionHelper.getFriendlyURL(curCPCatalogEntry.getCPDefinitionId(),themeDisplay)> 
20                <div class="imgContainerEspecialCarrossel4"> 
21                    <a href="${friendlyURL}"> 
22                        <#assign cpMedia = contentHelper.getImages(curCPCatalogEntry.getCPDefinitionId(), themeDisplay) /> 
23                        <#assign defaultImage = "/documents/d/editora-senac/liferay_logo" /> 
24                        <#assign productImage = defaultImage /> 
25                        <#list cpMedia as media> 
26                          <#if media.getURL()?has_content && (media.getTitle()?? && media.getTitle()?contains("small"))> 
27                        <#assign productImage = media.getURL() /> 
28                        <#break> 
29                    </#if> 
30                </#list> 
31                  <#if productImage == defaultImage> 
32                     <#list cpMedia as media> 
33                     <#if media.getURL()?has_content> 
34                        <#assign productImage = media.getURL() /> 
35                        <#break> 
36                    </#if> 
37                  </#list> 
38                </#if> 
39                   <img src="${productImage}" onerror="this.onerror=null;this.src='${defaultImage}';" /> 
40                 </a> 
41                    <div class="informacoesProdutoCarrossel4"> 
42                      <a href="${friendlyURL}"> 
43                      <div class="infoSuperiores"> 
44                          <div class="tituloEspecialCarrossel4"> 
45                           ${curCPCatalogEntry.name?truncate(60, '...')} 
46                          </div> 
47                          <div class="autorEspecialCarrossel4">   
48                            <#list contentHelper.getCategorizedCPDefinitionSpecificationOptionValues(curCPCatalogEntry.getCPDefinitionId(),43620166) as specs>     
49                                <#if specs.CPSpecificationOptionId == 43594743> 
50                                    <#assign autor = specs.getValueCurrentValue() /> 
51                                        ${autor?truncate(45, '...')} 
52                                    <#break> 
53                                </#if> 
54                            </#list> 
55                          </div> 
56                      </div> 
57                      </a> 
58                      <div class="valorCarrossel4"> 
59                        <@liferay_commerce_ui["price"] 
60                            CPCatalogEntry=curCPCatalogEntry 
61                        /> 
62                    </div> 
63                    <div class="espiarCarrossel4"> 
64                      <#if productService.isAvailable( curCPCatalogEntry.getCPDefinitionId() ) > 
65                          <span class="comprarCarrossel4" data-sku="${curCPCatalogEntry.CPSkus[0].getSku()}"> 
66                             <#assign PortalUtil = staticUtil["com.liferay.portal.kernel.util.PortalUtil"] /> 
67                             <#assign id = "add-to-cart" + PortalUtil.generateRandomKey(request, "add-to-cart") + "" + curCPCatalogEntry.CPSkus[0].getSku() /> 
68                             
69                            <#list curCPCatalogEntry.getCPSkus() as skus> 
70                              <@liferay_commerce_ui["add-to-cart"] 
71                      CPInstanceId=skus.getCPInstanceId() 
72                                        id=id 
73                    />                      
74                              </#list>                     
75                     
76             
77                                                         
78                          </span> 
79                      <#else> 
80                        <span class="comprarCarrossel4"> 
81                         <button class="btnIndisponivelEspecialCarrossel4" disabled>Livro Indisponível</button> 
82                        </span> 
83                      </#if> 
84                    </div> 
85                    </div> 
86                </div> 
87            <#elseif curCPCatalogEntry?counter == 12> 
88                <!-- Ver Mais --> 
89                <div class="customCart"> 
90                    <#assign asset = assetentry.getEntry('com.liferay.commerce.product.model.CPDefinition',entries[0].getCPDefinitionId())/> 
91                    <#assign relateds = assetCategoryRel.getAssetEntryAssetCategoryRelsByAssetEntryId(asset.getEntryId())/> 
92                    <#if (currentURL?contains("catalogo?"))> 
93                        <#assign category = assetCategory.getAssetCategory(relateds[0].assetCategoryId)/> 
94                    <#else> 
95                        <#if relateds?has_content> 
96                            <#assign category = assetCategory.getAssetCategory(relateds[1].assetCategoryId)/> 
97                        </#if>   
98                    </#if>   
99                     
100                    <#if category?has_content> 
101                        <!-- classId de Category --> 
102                        <#assign friendlyURL = friendlyURLEntryLocalService.getMainFriendlyURLEntry(20013, category.categoryId)> 
103                    <#else> 
104                        <#assign friendlyURL = ""> 
105                    </#if>   
106                    <div class="verMaisCard"> 
107                        <div class="verMaisCardContent"> 
108                            <i class="fas fa-books fa-2x"></i> 
109                            <div>    
110                            <div class="background-left2"><i class="fas fa-circle circulo auxCirc" aria-hidden="true"></i>&nbsp;</div> 
111                            </div> 
112                            <span class="text">Quer mais livros dessa área?</span> 
113                            <span class="ancora"> 
114                             <#if friendlyURL?has_content> 
115                                <#assign categoryUrl = themeDisplay.getURLPortal() + '/categoria/' + friendlyURL.getUrlTitle(locale)/> 
116                                <a class="ancora-aux" href="${categoryUrl}">Confira todos</a></a> 
117                            </#if> 
118                            <!-- --> 
119                            <#assign entryName = entry.name?lower_case> 
120                            <#assign entryNameFormatted = entryName?replace(' ', '-')> 
121                            </span> 
122                            <div>    
123                                <div class="background-right2">&nbsp;<i class="fas fa-circle circulo auxCirc" aria-hidden="true"></i></div> 
124                            </div> 
125                        </div> 
126                    </div> 
127                </div> 
128                <#break> 
129            </#if> 
130        </#list> 
131    </#if> 
132</div> 
133 
134<style> 
135   
136.comprarCarrossel4 { 
137  margin-top: 0px; 
138
139 
140.comprarCarrossel4  div.form-group { 
141  display: none; 
142}  
143    .slider4 { 
144        display: none; 
145
146    .informacoesProdutoCarrossel4 span.commerce-discount { 
147        display: none; 
148
149     
150    .comprarCarrossel4 .add-to-cart-quantity-marker.active { 
151        opacity: 0; 
152        display: none; 
153
154 
155    .comprarCarrossel4  form.quantity-selector { 
156        display: none; 
157
158 
159    .comprarCarrossel4 .add-to-cart button.btn-add-to-cart{ 
160        background-color: #5ACC75; 
161        border-radius: 4px; 
162        width: 206px; 
163        padding: 1px; 
164        justify-content: center;  
165        padding-left: 13%; 
166
167   
168  .comprarCarrossel4 span.price-value-final { 
169     color: #D2691E !important; 
170
171   
172  .comprarCarrossel4 .btnIndisponivelEspecialCarrossel4 { 
173      margin-top: 0.75rem !important; 
174
175   
176    .comprarCarrossel4 .add-to-cart button.btn-add-to-cart{ 
177      background-color: #5ACC75 !important; 
178
179  
180    .informacoesProdutoCarrossel4 .product-price { 
181        font: normal normal bold 16px/17px Montserrat; 
182
183     
184    .slick-dots { 
185      z-index: 2; 
186
187 
188    @media (max-width: 1200px) { 
189      	.slick-dots { 
190            width: 100vw !important; 
191
192
193     
194    @media (min-width: 1023px) { 
195        .slick-dotted.slick-slider { 
196             
197
198        .slider4 { 
199            width: 1093px !important; 
200
201
202     
203    @media (max-width: 813px) { 
204        .divEspiarCarrossel4 { 
205            margin-top: 30px !important; 
206
207         
208         
209        .divValorCarrossel4 { 
210            margin-top: 15px !important; 
211
212
213     
214    @media (max-width: 768px) { 
215        .slider2 .next-arrow { 
216            right: 18px; 
217
218         
219        .slider2 .prev-arrow { 
220            left: 18px; 
221
222         
223        .slider2 .slide-arrow .fa { 
224            font-size: 22px; 
225            font-weight: 400; 
226
227 
228        .slider4 .valorCarrossel4 { 
229          margin-top: 5px; 
230
231 
232        .slider4 .espiarCarrossel4 { 
233          position: relative; 
234          top: -10px; 
235
236 
237        .valorCarrossel4 .price:not(.compact) .price-value { 
238            font: normal 600 18px/17px Montserrat !important; 
239
240        .valorCarrossel4 { 
241            position: relative; 
242            z-index: 9999; 
243            display: flex; 
244            padding-top: 25px; 
245            align-items: flex-end; 
246
247        .valorCarrossel4 .price-value { 
248            margin-left: 0!important; 
249
250        .comprarCarrossel4 .btn-add-to-cart { 
251          margin: 0 !important; 
252          padding-top: 2px !important; 
253
254        .comprarCarrossel4 .btn-add-to-cart::before { 
255          font-size: 16px; 
256
257 
258        .valorCarrossel4:not(.slider4semextracard .valorCarrossel4) { 
259          margin-top: 0!important; 
260          padding-top: 0!important; 
261
262        .slider4 .informacoesProdutoCarrossel4:not(.slider4semextracard) { 
263          top: unset; 
264          bottom: 4%; 
265
266 
267
268     
269    @media (max-width: 600px) { 
270      .comprarCarrossel4 button.btn.btn-primary { 
271        padding-left: 1px; 
272        height: 30px; 
273
274 
275      .btn-add-to-cart-inline::before { 
276        font-size: 14px; 
277        width: 100%; 
278        text-align: center; 
279        display: block; 
280
281
282     
283    .slider4:not(.slider4semextracard) .informacoesProdutoCarrossel4 > a .divValorCarrossel4 { 
284        display: flex; 
285        align-items: flex-end; 
286
287     
288    .slider4:not(.slider4semextracard) .informacoesProdutoCarrossel4 > a .divValorCarrossel4 .price { 
289        order: 1; 
290        margin-top: 0!important; 
291        margin-right: 2px; 
292
293     
294    .slider4:not(.slider4semextracard) .informacoesProdutoCarrossel4 > a .divValorCarrossel4 .parceladoCarrossel4 { 
295        order: 2; 
296
297     
298    .slider4:not(.slider4semextracard) .informacoesProdutoCarrossel4 > a .divValorCarrossel4 .parceladoCarrossel4 + .price { 
299        margin-right: 5px; 
300
301     
302    .slider4:not(.slider4semextracard) .informacoesProdutoCarrossel4 > a .divValorCarrossel4 .product-price { 
303        order: 3; 
304        margin-top: 0; 
305
306     
307    @media (max-width: 414px){ 
308        .slider4 { 
309            width: 100vw !important; 
310            /* margin-right: 0; */ 
311            margin-right: 20px; 
312            margin-left: 20px; 
313
314
315</style> 
316   
317<script> 
318  setTimeout(function(){ 
319    $(document).ready(function() { 
320      $('.slider4').slick({ 
321        arrows: true, 
322        slidesToShow: 4, 
323        slidesToScroll: 4, 
324        dots:true, 
325        infinite: false, 
326        prevArrow: '<a href="#" class="slide-arrow prev-arrow"><i class="fa fa-chevron-left gray"></i></a>', 
327        nextArrow: '<a href="#" class="slide-arrow next-arrow"><i class="fa fa-chevron-right gray"></i></a>', 
328        speed: 1000,  
329        index: 2, 
330        lazyLoad: 'ondemand', 
331        focusOnSelect:false, 
332        accessibility:false, 
333        adaptiveHeight:false, 
334        autoplay:false, 
335        responsive: [{ 
336          breakpoint: 1200, 
337          settings: { 
338            slidesToShow: 4, 
339            slidesToScroll: 4, 
340            variableWidth: true, 
341            infinite: false, 
342            centerMode: false, 
343            dots:true, 
344            arrows: true 
345
346        }, { 
347          breakpoint: 768, 
348          settings: { 
349            slidesToShow: 1, 
350            slidesToScroll: 1, 
351            variableWidth: true, 
352            infinite: false, 
353            centerPadding: 0, 
354            centerMode: false, 
355            dots:false, 
356            arrows: true 
357
358        }] 
359      }); 
360 
361      sendViewItemList([<#list entries as curCPCatalogEntry>${curCPCatalogEntry.getCPDefinitionId()},</#list>]) 
362    }); 
363     
364    const slider4 = document.getElementsByClassName("slider4"); 
365    for (let i = 0; i < slider4.length; i++) { 
366      slider4[i].style.display ='block'; 
367
368     
369    if (typeof promoPrice !== 'undefined') { 
370        promoPrice = document.getElementsByClassName("price"); 
371
372      else { 
373        promoPrice = document.getElementsByClassName("price"); 
374
375   
376      for (let i = 0; i < document.getElementsByClassName("price").length; i++) { 
377        let carrossel = document.getElementsByClassName("price"); 
378        if(carrossel[i].children.length < 5) { 
379          if(carrossel[i].children[0]) 
380            carrossel[i].children[0].innerText = "Por:" 
381 
382          if(carrossel[i].children[1]) { 
383            carrossel[i].children[1].style.color = "#F6921E" 
384            carrossel[i].children[1].style.marginLeft = ".5rem" 
385
386          carrossel[i].style.marginTop = "24px" 
387
388        else if (carrossel[i].children.length > 7){ 
389          carrossel[i].children[0].innerHTML = "<del>De:</del>" 
390          carrossel[i].children[0].style.color = "#78849e" 
391          carrossel[i].children[1].classList.remove("price-value-inactive") 
392          let priceBefore = carrossel[i].children[1].innerText 
393          carrossel[i].children[1].innerHTML = '<del>'+priceBefore+'</del>' 
394          carrossel[i].children[1].style.color = "#78849e" 
395                   
396          carrossel[i].children[2].style.display = "none" 
397          carrossel[i].children[3].style.display = "none" 
398          carrossel[i].children[4].innerText = "Por:" 
399          carrossel[i].children[5].style.display = "none" 
400          carrossel[i].children[6].style.display = "none" 
401          carrossel[i].children[7].style.color = "#F6921E" 
402          carrossel[i].children[7].style.marginLeft = ".5rem" 
403          carrossel[i].style.marginTop = "10px" 
404
405        else { 
406          carrossel[i].children[0].innerHTML = "<del>De:</del>" 
407          carrossel[i].children[0].style.color = "#78849e" 
408          carrossel[i].children[1].classList.remove("price-value-inactive") 
409          let priceBefore = carrossel[i].children[1].innerText 
410          carrossel[i].children[1].innerHTML = '<del>'+priceBefore+'</del>' 
411          carrossel[i].children[1].style.color = "#78849e" 
412          carrossel[i].children[2].style.display = "none" 
413          carrossel[i].children[3].style.display = "none" 
414          carrossel[i].children[4].innerText = "Por:" 
415          carrossel[i].children[5].style.color = "#F6921E" 
416          carrossel[i].children[5].style.marginLeft = ".5rem" 
417          carrossel[i].style.marginTop = "10px" 
418
419
420  }, 1500); 
421   
422   
423   
424</script> 

eds-titulo-Nutrição

Editor de produto

Um erro ocorreu enquanto processava o modelo.
The following has evaluated to null or missing:
==> serviceLocator.findService("br.senac.sp.editora.services.service.ProductService")  [in template "20102#20129#43698964" at line 13, column 27]

----
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 productService = serviceLocat...  [in template "20102#20129#43698964" at line 13, column 1]
----
1<#setting locale="pt_BR"> 
2 
3<#assign assetentry = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService") /> 
4<#assign assetCategoryRel = serviceLocator.findService("com.liferay.asset.entry.rel.service.AssetEntryAssetCategoryRelLocalService") /> 
5<#assign assetCategory = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService") /> 
6<#assign contentHelper = serviceLocator.findService("com.liferay.commerce.product.content.util.CPContentHelper") /> 
7<#assign CPDefinitionHelper = serviceLocator.findService("com.liferay.commerce.product.util.CPDefinitionHelper") /> 
8<#assign friendlyURLEntryLocalService = serviceLocator.findService("com.liferay.friendly.url.service.FriendlyURLEntryLocalService")> 
9 
10<#assign userLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.UserLocalService")> 
11<#assign warehouseService = serviceLocator.findService("com.liferay.commerce.inventory.service.CommerceInventoryWarehouseItemLocalService") /> 
12<#assign companyId =  userLocalService.getUser(themeDisplay.getUserId()).getCompanyId() /> 
13<#assign productService = serviceLocator.findService("br.senac.sp.editora.services.service.ProductService") /> 
14 
15<div class="slider4"> 
16    <#if entries?has_content> 
17        <#list entries as curCPCatalogEntry> 
18            <#if curCPCatalogEntry?counter < 12> 
19                <#assign friendlyURL = CPDefinitionHelper.getFriendlyURL(curCPCatalogEntry.getCPDefinitionId(),themeDisplay)> 
20                <div class="imgContainerEspecialCarrossel4"> 
21                    <a href="${friendlyURL}"> 
22                        <#assign cpMedia = contentHelper.getImages(curCPCatalogEntry.getCPDefinitionId(), themeDisplay) /> 
23                        <#assign defaultImage = "/documents/d/editora-senac/liferay_logo" /> 
24                        <#assign productImage = defaultImage /> 
25                        <#list cpMedia as media> 
26                          <#if media.getURL()?has_content && (media.getTitle()?? && media.getTitle()?contains("small"))> 
27                        <#assign productImage = media.getURL() /> 
28                        <#break> 
29                    </#if> 
30                </#list> 
31                  <#if productImage == defaultImage> 
32                     <#list cpMedia as media> 
33                     <#if media.getURL()?has_content> 
34                        <#assign productImage = media.getURL() /> 
35                        <#break> 
36                    </#if> 
37                  </#list> 
38                </#if> 
39                   <img src="${productImage}" onerror="this.onerror=null;this.src='${defaultImage}';" /> 
40                 </a> 
41                    <div class="informacoesProdutoCarrossel4"> 
42                      <a href="${friendlyURL}"> 
43                      <div class="infoSuperiores"> 
44                          <div class="tituloEspecialCarrossel4"> 
45                           ${curCPCatalogEntry.name?truncate(60, '...')} 
46                          </div> 
47                          <div class="autorEspecialCarrossel4">   
48                            <#list contentHelper.getCategorizedCPDefinitionSpecificationOptionValues(curCPCatalogEntry.getCPDefinitionId(),43620166) as specs>     
49                                <#if specs.CPSpecificationOptionId == 43594743> 
50                                    <#assign autor = specs.getValueCurrentValue() /> 
51                                        ${autor?truncate(45, '...')} 
52                                    <#break> 
53                                </#if> 
54                            </#list> 
55                          </div> 
56                      </div> 
57                      </a> 
58                      <div class="valorCarrossel4"> 
59                        <@liferay_commerce_ui["price"] 
60                            CPCatalogEntry=curCPCatalogEntry 
61                        /> 
62                    </div> 
63                    <div class="espiarCarrossel4"> 
64                      <#if productService.isAvailable( curCPCatalogEntry.getCPDefinitionId() ) > 
65                          <span class="comprarCarrossel4" data-sku="${curCPCatalogEntry.CPSkus[0].getSku()}"> 
66                             <#assign PortalUtil = staticUtil["com.liferay.portal.kernel.util.PortalUtil"] /> 
67                             <#assign id = "add-to-cart" + PortalUtil.generateRandomKey(request, "add-to-cart") + "" + curCPCatalogEntry.CPSkus[0].getSku() /> 
68                             
69                            <#list curCPCatalogEntry.getCPSkus() as skus> 
70                              <@liferay_commerce_ui["add-to-cart"] 
71                      CPInstanceId=skus.getCPInstanceId() 
72                                        id=id 
73                    />                      
74                              </#list>                     
75                     
76             
77                                                         
78                          </span> 
79                      <#else> 
80                        <span class="comprarCarrossel4"> 
81                         <button class="btnIndisponivelEspecialCarrossel4" disabled>Livro Indisponível</button> 
82                        </span> 
83                      </#if> 
84                    </div> 
85                    </div> 
86                </div> 
87            <#elseif curCPCatalogEntry?counter == 12> 
88                <!-- Ver Mais --> 
89                <div class="customCart"> 
90                    <#assign asset = assetentry.getEntry('com.liferay.commerce.product.model.CPDefinition',entries[0].getCPDefinitionId())/> 
91                    <#assign relateds = assetCategoryRel.getAssetEntryAssetCategoryRelsByAssetEntryId(asset.getEntryId())/> 
92                    <#if (currentURL?contains("catalogo?"))> 
93                        <#assign category = assetCategory.getAssetCategory(relateds[0].assetCategoryId)/> 
94                    <#else> 
95                        <#if relateds?has_content> 
96                            <#assign category = assetCategory.getAssetCategory(relateds[1].assetCategoryId)/> 
97                        </#if>   
98                    </#if>   
99                     
100                    <#if category?has_content> 
101                        <!-- classId de Category --> 
102                        <#assign friendlyURL = friendlyURLEntryLocalService.getMainFriendlyURLEntry(20013, category.categoryId)> 
103                    <#else> 
104                        <#assign friendlyURL = ""> 
105                    </#if>   
106                    <div class="verMaisCard"> 
107                        <div class="verMaisCardContent"> 
108                            <i class="fas fa-books fa-2x"></i> 
109                            <div>    
110                            <div class="background-left2"><i class="fas fa-circle circulo auxCirc" aria-hidden="true"></i>&nbsp;</div> 
111                            </div> 
112                            <span class="text">Quer mais livros dessa área?</span> 
113                            <span class="ancora"> 
114                             <#if friendlyURL?has_content> 
115                                <#assign categoryUrl = themeDisplay.getURLPortal() + '/categoria/' + friendlyURL.getUrlTitle(locale)/> 
116                                <a class="ancora-aux" href="${categoryUrl}">Confira todos</a></a> 
117                            </#if> 
118                            <!-- --> 
119                            <#assign entryName = entry.name?lower_case> 
120                            <#assign entryNameFormatted = entryName?replace(' ', '-')> 
121                            </span> 
122                            <div>    
123                                <div class="background-right2">&nbsp;<i class="fas fa-circle circulo auxCirc" aria-hidden="true"></i></div> 
124                            </div> 
125                        </div> 
126                    </div> 
127                </div> 
128                <#break> 
129            </#if> 
130        </#list> 
131    </#if> 
132</div> 
133 
134<style> 
135   
136.comprarCarrossel4 { 
137  margin-top: 0px; 
138
139 
140.comprarCarrossel4  div.form-group { 
141  display: none; 
142}  
143    .slider4 { 
144        display: none; 
145
146    .informacoesProdutoCarrossel4 span.commerce-discount { 
147        display: none; 
148
149     
150    .comprarCarrossel4 .add-to-cart-quantity-marker.active { 
151        opacity: 0; 
152        display: none; 
153
154 
155    .comprarCarrossel4  form.quantity-selector { 
156        display: none; 
157
158 
159    .comprarCarrossel4 .add-to-cart button.btn-add-to-cart{ 
160        background-color: #5ACC75; 
161        border-radius: 4px; 
162        width: 206px; 
163        padding: 1px; 
164        justify-content: center;  
165        padding-left: 13%; 
166
167   
168  .comprarCarrossel4 span.price-value-final { 
169     color: #D2691E !important; 
170
171   
172  .comprarCarrossel4 .btnIndisponivelEspecialCarrossel4 { 
173      margin-top: 0.75rem !important; 
174
175   
176    .comprarCarrossel4 .add-to-cart button.btn-add-to-cart{ 
177      background-color: #5ACC75 !important; 
178
179  
180    .informacoesProdutoCarrossel4 .product-price { 
181        font: normal normal bold 16px/17px Montserrat; 
182
183     
184    .slick-dots { 
185      z-index: 2; 
186
187 
188    @media (max-width: 1200px) { 
189      	.slick-dots { 
190            width: 100vw !important; 
191
192
193     
194    @media (min-width: 1023px) { 
195        .slick-dotted.slick-slider { 
196             
197
198        .slider4 { 
199            width: 1093px !important; 
200
201
202     
203    @media (max-width: 813px) { 
204        .divEspiarCarrossel4 { 
205            margin-top: 30px !important; 
206
207         
208         
209        .divValorCarrossel4 { 
210            margin-top: 15px !important; 
211
212
213     
214    @media (max-width: 768px) { 
215        .slider2 .next-arrow { 
216            right: 18px; 
217
218         
219        .slider2 .prev-arrow { 
220            left: 18px; 
221
222         
223        .slider2 .slide-arrow .fa { 
224            font-size: 22px; 
225            font-weight: 400; 
226
227 
228        .slider4 .valorCarrossel4 { 
229          margin-top: 5px; 
230
231 
232        .slider4 .espiarCarrossel4 { 
233          position: relative; 
234          top: -10px; 
235
236 
237        .valorCarrossel4 .price:not(.compact) .price-value { 
238            font: normal 600 18px/17px Montserrat !important; 
239
240        .valorCarrossel4 { 
241            position: relative; 
242            z-index: 9999; 
243            display: flex; 
244            padding-top: 25px; 
245            align-items: flex-end; 
246
247        .valorCarrossel4 .price-value { 
248            margin-left: 0!important; 
249
250        .comprarCarrossel4 .btn-add-to-cart { 
251          margin: 0 !important; 
252          padding-top: 2px !important; 
253
254        .comprarCarrossel4 .btn-add-to-cart::before { 
255          font-size: 16px; 
256
257 
258        .valorCarrossel4:not(.slider4semextracard .valorCarrossel4) { 
259          margin-top: 0!important; 
260          padding-top: 0!important; 
261
262        .slider4 .informacoesProdutoCarrossel4:not(.slider4semextracard) { 
263          top: unset; 
264          bottom: 4%; 
265
266 
267
268     
269    @media (max-width: 600px) { 
270      .comprarCarrossel4 button.btn.btn-primary { 
271        padding-left: 1px; 
272        height: 30px; 
273
274 
275      .btn-add-to-cart-inline::before { 
276        font-size: 14px; 
277        width: 100%; 
278        text-align: center; 
279        display: block; 
280
281
282     
283    .slider4:not(.slider4semextracard) .informacoesProdutoCarrossel4 > a .divValorCarrossel4 { 
284        display: flex; 
285        align-items: flex-end; 
286
287     
288    .slider4:not(.slider4semextracard) .informacoesProdutoCarrossel4 > a .divValorCarrossel4 .price { 
289        order: 1; 
290        margin-top: 0!important; 
291        margin-right: 2px; 
292
293     
294    .slider4:not(.slider4semextracard) .informacoesProdutoCarrossel4 > a .divValorCarrossel4 .parceladoCarrossel4 { 
295        order: 2; 
296
297     
298    .slider4:not(.slider4semextracard) .informacoesProdutoCarrossel4 > a .divValorCarrossel4 .parceladoCarrossel4 + .price { 
299        margin-right: 5px; 
300
301     
302    .slider4:not(.slider4semextracard) .informacoesProdutoCarrossel4 > a .divValorCarrossel4 .product-price { 
303        order: 3; 
304        margin-top: 0; 
305
306     
307    @media (max-width: 414px){ 
308        .slider4 { 
309            width: 100vw !important; 
310            /* margin-right: 0; */ 
311            margin-right: 20px; 
312            margin-left: 20px; 
313
314
315</style> 
316   
317<script> 
318  setTimeout(function(){ 
319    $(document).ready(function() { 
320      $('.slider4').slick({ 
321        arrows: true, 
322        slidesToShow: 4, 
323        slidesToScroll: 4, 
324        dots:true, 
325        infinite: false, 
326        prevArrow: '<a href="#" class="slide-arrow prev-arrow"><i class="fa fa-chevron-left gray"></i></a>', 
327        nextArrow: '<a href="#" class="slide-arrow next-arrow"><i class="fa fa-chevron-right gray"></i></a>', 
328        speed: 1000,  
329        index: 2, 
330        lazyLoad: 'ondemand', 
331        focusOnSelect:false, 
332        accessibility:false, 
333        adaptiveHeight:false, 
334        autoplay:false, 
335        responsive: [{ 
336          breakpoint: 1200, 
337          settings: { 
338            slidesToShow: 4, 
339            slidesToScroll: 4, 
340            variableWidth: true, 
341            infinite: false, 
342            centerMode: false, 
343            dots:true, 
344            arrows: true 
345
346        }, { 
347          breakpoint: 768, 
348          settings: { 
349            slidesToShow: 1, 
350            slidesToScroll: 1, 
351            variableWidth: true, 
352            infinite: false, 
353            centerPadding: 0, 
354            centerMode: false, 
355            dots:false, 
356            arrows: true 
357
358        }] 
359      }); 
360 
361      sendViewItemList([<#list entries as curCPCatalogEntry>${curCPCatalogEntry.getCPDefinitionId()},</#list>]) 
362    }); 
363     
364    const slider4 = document.getElementsByClassName("slider4"); 
365    for (let i = 0; i < slider4.length; i++) { 
366      slider4[i].style.display ='block'; 
367
368     
369    if (typeof promoPrice !== 'undefined') { 
370        promoPrice = document.getElementsByClassName("price"); 
371
372      else { 
373        promoPrice = document.getElementsByClassName("price"); 
374
375   
376      for (let i = 0; i < document.getElementsByClassName("price").length; i++) { 
377        let carrossel = document.getElementsByClassName("price"); 
378        if(carrossel[i].children.length < 5) { 
379          if(carrossel[i].children[0]) 
380            carrossel[i].children[0].innerText = "Por:" 
381 
382          if(carrossel[i].children[1]) { 
383            carrossel[i].children[1].style.color = "#F6921E" 
384            carrossel[i].children[1].style.marginLeft = ".5rem" 
385
386          carrossel[i].style.marginTop = "24px" 
387
388        else if (carrossel[i].children.length > 7){ 
389          carrossel[i].children[0].innerHTML = "<del>De:</del>" 
390          carrossel[i].children[0].style.color = "#78849e" 
391          carrossel[i].children[1].classList.remove("price-value-inactive") 
392          let priceBefore = carrossel[i].children[1].innerText 
393          carrossel[i].children[1].innerHTML = '<del>'+priceBefore+'</del>' 
394          carrossel[i].children[1].style.color = "#78849e" 
395                   
396          carrossel[i].children[2].style.display = "none" 
397          carrossel[i].children[3].style.display = "none" 
398          carrossel[i].children[4].innerText = "Por:" 
399          carrossel[i].children[5].style.display = "none" 
400          carrossel[i].children[6].style.display = "none" 
401          carrossel[i].children[7].style.color = "#F6921E" 
402          carrossel[i].children[7].style.marginLeft = ".5rem" 
403          carrossel[i].style.marginTop = "10px" 
404
405        else { 
406          carrossel[i].children[0].innerHTML = "<del>De:</del>" 
407          carrossel[i].children[0].style.color = "#78849e" 
408          carrossel[i].children[1].classList.remove("price-value-inactive") 
409          let priceBefore = carrossel[i].children[1].innerText 
410          carrossel[i].children[1].innerHTML = '<del>'+priceBefore+'</del>' 
411          carrossel[i].children[1].style.color = "#78849e" 
412          carrossel[i].children[2].style.display = "none" 
413          carrossel[i].children[3].style.display = "none" 
414          carrossel[i].children[4].innerText = "Por:" 
415          carrossel[i].children[5].style.color = "#F6921E" 
416          carrossel[i].children[5].style.marginLeft = ".5rem" 
417          carrossel[i].style.marginTop = "10px" 
418
419
420  }, 1500); 
421   
422   
423   
424</script> 

eds-home-Odontologia

Editor de produto

Um erro ocorreu enquanto processava o modelo.
The following has evaluated to null or missing:
==> serviceLocator.findService("br.senac.sp.editora.services.service.ProductService")  [in template "20102#20129#43698964" at line 13, column 27]

----
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 productService = serviceLocat...  [in template "20102#20129#43698964" at line 13, column 1]
----
1<#setting locale="pt_BR"> 
2 
3<#assign assetentry = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService") /> 
4<#assign assetCategoryRel = serviceLocator.findService("com.liferay.asset.entry.rel.service.AssetEntryAssetCategoryRelLocalService") /> 
5<#assign assetCategory = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService") /> 
6<#assign contentHelper = serviceLocator.findService("com.liferay.commerce.product.content.util.CPContentHelper") /> 
7<#assign CPDefinitionHelper = serviceLocator.findService("com.liferay.commerce.product.util.CPDefinitionHelper") /> 
8<#assign friendlyURLEntryLocalService = serviceLocator.findService("com.liferay.friendly.url.service.FriendlyURLEntryLocalService")> 
9 
10<#assign userLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.UserLocalService")> 
11<#assign warehouseService = serviceLocator.findService("com.liferay.commerce.inventory.service.CommerceInventoryWarehouseItemLocalService") /> 
12<#assign companyId =  userLocalService.getUser(themeDisplay.getUserId()).getCompanyId() /> 
13<#assign productService = serviceLocator.findService("br.senac.sp.editora.services.service.ProductService") /> 
14 
15<div class="slider4"> 
16    <#if entries?has_content> 
17        <#list entries as curCPCatalogEntry> 
18            <#if curCPCatalogEntry?counter < 12> 
19                <#assign friendlyURL = CPDefinitionHelper.getFriendlyURL(curCPCatalogEntry.getCPDefinitionId(),themeDisplay)> 
20                <div class="imgContainerEspecialCarrossel4"> 
21                    <a href="${friendlyURL}"> 
22                        <#assign cpMedia = contentHelper.getImages(curCPCatalogEntry.getCPDefinitionId(), themeDisplay) /> 
23                        <#assign defaultImage = "/documents/d/editora-senac/liferay_logo" /> 
24                        <#assign productImage = defaultImage /> 
25                        <#list cpMedia as media> 
26                          <#if media.getURL()?has_content && (media.getTitle()?? && media.getTitle()?contains("small"))> 
27                        <#assign productImage = media.getURL() /> 
28                        <#break> 
29                    </#if> 
30                </#list> 
31                  <#if productImage == defaultImage> 
32                     <#list cpMedia as media> 
33                     <#if media.getURL()?has_content> 
34                        <#assign productImage = media.getURL() /> 
35                        <#break> 
36                    </#if> 
37                  </#list> 
38                </#if> 
39                   <img src="${productImage}" onerror="this.onerror=null;this.src='${defaultImage}';" /> 
40                 </a> 
41                    <div class="informacoesProdutoCarrossel4"> 
42                      <a href="${friendlyURL}"> 
43                      <div class="infoSuperiores"> 
44                          <div class="tituloEspecialCarrossel4"> 
45                           ${curCPCatalogEntry.name?truncate(60, '...')} 
46                          </div> 
47                          <div class="autorEspecialCarrossel4">   
48                            <#list contentHelper.getCategorizedCPDefinitionSpecificationOptionValues(curCPCatalogEntry.getCPDefinitionId(),43620166) as specs>     
49                                <#if specs.CPSpecificationOptionId == 43594743> 
50                                    <#assign autor = specs.getValueCurrentValue() /> 
51                                        ${autor?truncate(45, '...')} 
52                                    <#break> 
53                                </#if> 
54                            </#list> 
55                          </div> 
56                      </div> 
57                      </a> 
58                      <div class="valorCarrossel4"> 
59                        <@liferay_commerce_ui["price"] 
60                            CPCatalogEntry=curCPCatalogEntry 
61                        /> 
62                    </div> 
63                    <div class="espiarCarrossel4"> 
64                      <#if productService.isAvailable( curCPCatalogEntry.getCPDefinitionId() ) > 
65                          <span class="comprarCarrossel4" data-sku="${curCPCatalogEntry.CPSkus[0].getSku()}"> 
66                             <#assign PortalUtil = staticUtil["com.liferay.portal.kernel.util.PortalUtil"] /> 
67                             <#assign id = "add-to-cart" + PortalUtil.generateRandomKey(request, "add-to-cart") + "" + curCPCatalogEntry.CPSkus[0].getSku() /> 
68                             
69                            <#list curCPCatalogEntry.getCPSkus() as skus> 
70                              <@liferay_commerce_ui["add-to-cart"] 
71                      CPInstanceId=skus.getCPInstanceId() 
72                                        id=id 
73                    />                      
74                              </#list>                     
75                     
76             
77                                                         
78                          </span> 
79                      <#else> 
80                        <span class="comprarCarrossel4"> 
81                         <button class="btnIndisponivelEspecialCarrossel4" disabled>Livro Indisponível</button> 
82                        </span> 
83                      </#if> 
84                    </div> 
85                    </div> 
86                </div> 
87            <#elseif curCPCatalogEntry?counter == 12> 
88                <!-- Ver Mais --> 
89                <div class="customCart"> 
90                    <#assign asset = assetentry.getEntry('com.liferay.commerce.product.model.CPDefinition',entries[0].getCPDefinitionId())/> 
91                    <#assign relateds = assetCategoryRel.getAssetEntryAssetCategoryRelsByAssetEntryId(asset.getEntryId())/> 
92                    <#if (currentURL?contains("catalogo?"))> 
93                        <#assign category = assetCategory.getAssetCategory(relateds[0].assetCategoryId)/> 
94                    <#else> 
95                        <#if relateds?has_content> 
96                            <#assign category = assetCategory.getAssetCategory(relateds[1].assetCategoryId)/> 
97                        </#if>   
98                    </#if>   
99                     
100                    <#if category?has_content> 
101                        <!-- classId de Category --> 
102                        <#assign friendlyURL = friendlyURLEntryLocalService.getMainFriendlyURLEntry(20013, category.categoryId)> 
103                    <#else> 
104                        <#assign friendlyURL = ""> 
105                    </#if>   
106                    <div class="verMaisCard"> 
107                        <div class="verMaisCardContent"> 
108                            <i class="fas fa-books fa-2x"></i> 
109                            <div>    
110                            <div class="background-left2"><i class="fas fa-circle circulo auxCirc" aria-hidden="true"></i>&nbsp;</div> 
111                            </div> 
112                            <span class="text">Quer mais livros dessa área?</span> 
113                            <span class="ancora"> 
114                             <#if friendlyURL?has_content> 
115                                <#assign categoryUrl = themeDisplay.getURLPortal() + '/categoria/' + friendlyURL.getUrlTitle(locale)/> 
116                                <a class="ancora-aux" href="${categoryUrl}">Confira todos</a></a> 
117                            </#if> 
118                            <!-- --> 
119                            <#assign entryName = entry.name?lower_case> 
120                            <#assign entryNameFormatted = entryName?replace(' ', '-')> 
121                            </span> 
122                            <div>    
123                                <div class="background-right2">&nbsp;<i class="fas fa-circle circulo auxCirc" aria-hidden="true"></i></div> 
124                            </div> 
125                        </div> 
126                    </div> 
127                </div> 
128                <#break> 
129            </#if> 
130        </#list> 
131    </#if> 
132</div> 
133 
134<style> 
135   
136.comprarCarrossel4 { 
137  margin-top: 0px; 
138
139 
140.comprarCarrossel4  div.form-group { 
141  display: none; 
142}  
143    .slider4 { 
144        display: none; 
145
146    .informacoesProdutoCarrossel4 span.commerce-discount { 
147        display: none; 
148
149     
150    .comprarCarrossel4 .add-to-cart-quantity-marker.active { 
151        opacity: 0; 
152        display: none; 
153
154 
155    .comprarCarrossel4  form.quantity-selector { 
156        display: none; 
157
158 
159    .comprarCarrossel4 .add-to-cart button.btn-add-to-cart{ 
160        background-color: #5ACC75; 
161        border-radius: 4px; 
162        width: 206px; 
163        padding: 1px; 
164        justify-content: center;  
165        padding-left: 13%; 
166
167   
168  .comprarCarrossel4 span.price-value-final { 
169     color: #D2691E !important; 
170
171   
172  .comprarCarrossel4 .btnIndisponivelEspecialCarrossel4 { 
173      margin-top: 0.75rem !important; 
174
175   
176    .comprarCarrossel4 .add-to-cart button.btn-add-to-cart{ 
177      background-color: #5ACC75 !important; 
178
179  
180    .informacoesProdutoCarrossel4 .product-price { 
181        font: normal normal bold 16px/17px Montserrat; 
182
183     
184    .slick-dots { 
185      z-index: 2; 
186
187 
188    @media (max-width: 1200px) { 
189      	.slick-dots { 
190            width: 100vw !important; 
191
192
193     
194    @media (min-width: 1023px) { 
195        .slick-dotted.slick-slider { 
196             
197
198        .slider4 { 
199            width: 1093px !important; 
200
201
202     
203    @media (max-width: 813px) { 
204        .divEspiarCarrossel4 { 
205            margin-top: 30px !important; 
206
207         
208         
209        .divValorCarrossel4 { 
210            margin-top: 15px !important; 
211
212
213     
214    @media (max-width: 768px) { 
215        .slider2 .next-arrow { 
216            right: 18px; 
217
218         
219        .slider2 .prev-arrow { 
220            left: 18px; 
221
222         
223        .slider2 .slide-arrow .fa { 
224            font-size: 22px; 
225            font-weight: 400; 
226
227 
228        .slider4 .valorCarrossel4 { 
229          margin-top: 5px; 
230
231 
232        .slider4 .espiarCarrossel4 { 
233          position: relative; 
234          top: -10px; 
235
236 
237        .valorCarrossel4 .price:not(.compact) .price-value { 
238            font: normal 600 18px/17px Montserrat !important; 
239
240        .valorCarrossel4 { 
241            position: relative; 
242            z-index: 9999; 
243            display: flex; 
244            padding-top: 25px; 
245            align-items: flex-end; 
246
247        .valorCarrossel4 .price-value { 
248            margin-left: 0!important; 
249
250        .comprarCarrossel4 .btn-add-to-cart { 
251          margin: 0 !important; 
252          padding-top: 2px !important; 
253
254        .comprarCarrossel4 .btn-add-to-cart::before { 
255          font-size: 16px; 
256
257 
258        .valorCarrossel4:not(.slider4semextracard .valorCarrossel4) { 
259          margin-top: 0!important; 
260          padding-top: 0!important; 
261
262        .slider4 .informacoesProdutoCarrossel4:not(.slider4semextracard) { 
263          top: unset; 
264          bottom: 4%; 
265
266 
267
268     
269    @media (max-width: 600px) { 
270      .comprarCarrossel4 button.btn.btn-primary { 
271        padding-left: 1px; 
272        height: 30px; 
273
274 
275      .btn-add-to-cart-inline::before { 
276        font-size: 14px; 
277        width: 100%; 
278        text-align: center; 
279        display: block; 
280
281
282     
283    .slider4:not(.slider4semextracard) .informacoesProdutoCarrossel4 > a .divValorCarrossel4 { 
284        display: flex; 
285        align-items: flex-end; 
286
287     
288    .slider4:not(.slider4semextracard) .informacoesProdutoCarrossel4 > a .divValorCarrossel4 .price { 
289        order: 1; 
290        margin-top: 0!important; 
291        margin-right: 2px; 
292
293     
294    .slider4:not(.slider4semextracard) .informacoesProdutoCarrossel4 > a .divValorCarrossel4 .parceladoCarrossel4 { 
295        order: 2; 
296
297     
298    .slider4:not(.slider4semextracard) .informacoesProdutoCarrossel4 > a .divValorCarrossel4 .parceladoCarrossel4 + .price { 
299        margin-right: 5px; 
300
301     
302    .slider4:not(.slider4semextracard) .informacoesProdutoCarrossel4 > a .divValorCarrossel4 .product-price { 
303        order: 3; 
304        margin-top: 0; 
305
306     
307    @media (max-width: 414px){ 
308        .slider4 { 
309            width: 100vw !important; 
310            /* margin-right: 0; */ 
311            margin-right: 20px; 
312            margin-left: 20px; 
313
314
315</style> 
316   
317<script> 
318  setTimeout(function(){ 
319    $(document).ready(function() { 
320      $('.slider4').slick({ 
321        arrows: true, 
322        slidesToShow: 4, 
323        slidesToScroll: 4, 
324        dots:true, 
325        infinite: false, 
326        prevArrow: '<a href="#" class="slide-arrow prev-arrow"><i class="fa fa-chevron-left gray"></i></a>', 
327        nextArrow: '<a href="#" class="slide-arrow next-arrow"><i class="fa fa-chevron-right gray"></i></a>', 
328        speed: 1000,  
329        index: 2, 
330        lazyLoad: 'ondemand', 
331        focusOnSelect:false, 
332        accessibility:false, 
333        adaptiveHeight:false, 
334        autoplay:false, 
335        responsive: [{ 
336          breakpoint: 1200, 
337          settings: { 
338            slidesToShow: 4, 
339            slidesToScroll: 4, 
340            variableWidth: true, 
341            infinite: false, 
342            centerMode: false, 
343            dots:true, 
344            arrows: true 
345
346        }, { 
347          breakpoint: 768, 
348          settings: { 
349            slidesToShow: 1, 
350            slidesToScroll: 1, 
351            variableWidth: true, 
352            infinite: false, 
353            centerPadding: 0, 
354            centerMode: false, 
355            dots:false, 
356            arrows: true 
357
358        }] 
359      }); 
360 
361      sendViewItemList([<#list entries as curCPCatalogEntry>${curCPCatalogEntry.getCPDefinitionId()},</#list>]) 
362    }); 
363     
364    const slider4 = document.getElementsByClassName("slider4"); 
365    for (let i = 0; i < slider4.length; i++) { 
366      slider4[i].style.display ='block'; 
367
368     
369    if (typeof promoPrice !== 'undefined') { 
370        promoPrice = document.getElementsByClassName("price"); 
371
372      else { 
373        promoPrice = document.getElementsByClassName("price"); 
374
375   
376      for (let i = 0; i < document.getElementsByClassName("price").length; i++) { 
377        let carrossel = document.getElementsByClassName("price"); 
378        if(carrossel[i].children.length < 5) { 
379          if(carrossel[i].children[0]) 
380            carrossel[i].children[0].innerText = "Por:" 
381 
382          if(carrossel[i].children[1]) { 
383            carrossel[i].children[1].style.color = "#F6921E" 
384            carrossel[i].children[1].style.marginLeft = ".5rem" 
385
386          carrossel[i].style.marginTop = "24px" 
387
388        else if (carrossel[i].children.length > 7){ 
389          carrossel[i].children[0].innerHTML = "<del>De:</del>" 
390          carrossel[i].children[0].style.color = "#78849e" 
391          carrossel[i].children[1].classList.remove("price-value-inactive") 
392          let priceBefore = carrossel[i].children[1].innerText 
393          carrossel[i].children[1].innerHTML = '<del>'+priceBefore+'</del>' 
394          carrossel[i].children[1].style.color = "#78849e" 
395                   
396          carrossel[i].children[2].style.display = "none" 
397          carrossel[i].children[3].style.display = "none" 
398          carrossel[i].children[4].innerText = "Por:" 
399          carrossel[i].children[5].style.display = "none" 
400          carrossel[i].children[6].style.display = "none" 
401          carrossel[i].children[7].style.color = "#F6921E" 
402          carrossel[i].children[7].style.marginLeft = ".5rem" 
403          carrossel[i].style.marginTop = "10px" 
404
405        else { 
406          carrossel[i].children[0].innerHTML = "<del>De:</del>" 
407          carrossel[i].children[0].style.color = "#78849e" 
408          carrossel[i].children[1].classList.remove("price-value-inactive") 
409          let priceBefore = carrossel[i].children[1].innerText 
410          carrossel[i].children[1].innerHTML = '<del>'+priceBefore+'</del>' 
411          carrossel[i].children[1].style.color = "#78849e" 
412          carrossel[i].children[2].style.display = "none" 
413          carrossel[i].children[3].style.display = "none" 
414          carrossel[i].children[4].innerText = "Por:" 
415          carrossel[i].children[5].style.color = "#F6921E" 
416          carrossel[i].children[5].style.marginLeft = ".5rem" 
417          carrossel[i].style.marginTop = "10px" 
418
419
420  }, 1500); 
421   
422   
423   
424</script> 

eds-home-Óptica

Editor de produto

Um erro ocorreu enquanto processava o modelo.
The following has evaluated to null or missing:
==> serviceLocator.findService("br.senac.sp.editora.services.service.ProductService")  [in template "20102#20129#43698964" at line 13, column 27]

----
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 productService = serviceLocat...  [in template "20102#20129#43698964" at line 13, column 1]
----
1<#setting locale="pt_BR"> 
2 
3<#assign assetentry = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService") /> 
4<#assign assetCategoryRel = serviceLocator.findService("com.liferay.asset.entry.rel.service.AssetEntryAssetCategoryRelLocalService") /> 
5<#assign assetCategory = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService") /> 
6<#assign contentHelper = serviceLocator.findService("com.liferay.commerce.product.content.util.CPContentHelper") /> 
7<#assign CPDefinitionHelper = serviceLocator.findService("com.liferay.commerce.product.util.CPDefinitionHelper") /> 
8<#assign friendlyURLEntryLocalService = serviceLocator.findService("com.liferay.friendly.url.service.FriendlyURLEntryLocalService")> 
9 
10<#assign userLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.UserLocalService")> 
11<#assign warehouseService = serviceLocator.findService("com.liferay.commerce.inventory.service.CommerceInventoryWarehouseItemLocalService") /> 
12<#assign companyId =  userLocalService.getUser(themeDisplay.getUserId()).getCompanyId() /> 
13<#assign productService = serviceLocator.findService("br.senac.sp.editora.services.service.ProductService") /> 
14 
15<div class="slider4"> 
16    <#if entries?has_content> 
17        <#list entries as curCPCatalogEntry> 
18            <#if curCPCatalogEntry?counter < 12> 
19                <#assign friendlyURL = CPDefinitionHelper.getFriendlyURL(curCPCatalogEntry.getCPDefinitionId(),themeDisplay)> 
20                <div class="imgContainerEspecialCarrossel4"> 
21                    <a href="${friendlyURL}"> 
22                        <#assign cpMedia = contentHelper.getImages(curCPCatalogEntry.getCPDefinitionId(), themeDisplay) /> 
23                        <#assign defaultImage = "/documents/d/editora-senac/liferay_logo" /> 
24                        <#assign productImage = defaultImage /> 
25                        <#list cpMedia as media> 
26                          <#if media.getURL()?has_content && (media.getTitle()?? && media.getTitle()?contains("small"))> 
27                        <#assign productImage = media.getURL() /> 
28                        <#break> 
29                    </#if> 
30                </#list> 
31                  <#if productImage == defaultImage> 
32                     <#list cpMedia as media> 
33                     <#if media.getURL()?has_content> 
34                        <#assign productImage = media.getURL() /> 
35                        <#break> 
36                    </#if> 
37                  </#list> 
38                </#if> 
39                   <img src="${productImage}" onerror="this.onerror=null;this.src='${defaultImage}';" /> 
40                 </a> 
41                    <div class="informacoesProdutoCarrossel4"> 
42                      <a href="${friendlyURL}"> 
43                      <div class="infoSuperiores"> 
44                          <div class="tituloEspecialCarrossel4"> 
45                           ${curCPCatalogEntry.name?truncate(60, '...')} 
46                          </div> 
47                          <div class="autorEspecialCarrossel4">   
48                            <#list contentHelper.getCategorizedCPDefinitionSpecificationOptionValues(curCPCatalogEntry.getCPDefinitionId(),43620166) as specs>     
49                                <#if specs.CPSpecificationOptionId == 43594743> 
50                                    <#assign autor = specs.getValueCurrentValue() /> 
51                                        ${autor?truncate(45, '...')} 
52                                    <#break> 
53                                </#if> 
54                            </#list> 
55                          </div> 
56                      </div> 
57                      </a> 
58                      <div class="valorCarrossel4"> 
59                        <@liferay_commerce_ui["price"] 
60                            CPCatalogEntry=curCPCatalogEntry 
61                        /> 
62                    </div> 
63                    <div class="espiarCarrossel4"> 
64                      <#if productService.isAvailable( curCPCatalogEntry.getCPDefinitionId() ) > 
65                          <span class="comprarCarrossel4" data-sku="${curCPCatalogEntry.CPSkus[0].getSku()}"> 
66                             <#assign PortalUtil = staticUtil["com.liferay.portal.kernel.util.PortalUtil"] /> 
67                             <#assign id = "add-to-cart" + PortalUtil.generateRandomKey(request, "add-to-cart") + "" + curCPCatalogEntry.CPSkus[0].getSku() /> 
68                             
69                            <#list curCPCatalogEntry.getCPSkus() as skus> 
70                              <@liferay_commerce_ui["add-to-cart"] 
71                      CPInstanceId=skus.getCPInstanceId() 
72                                        id=id 
73                    />                      
74                              </#list>                     
75                     
76             
77                                                         
78                          </span> 
79                      <#else> 
80                        <span class="comprarCarrossel4"> 
81                         <button class="btnIndisponivelEspecialCarrossel4" disabled>Livro Indisponível</button> 
82                        </span> 
83                      </#if> 
84                    </div> 
85                    </div> 
86                </div> 
87            <#elseif curCPCatalogEntry?counter == 12> 
88                <!-- Ver Mais --> 
89                <div class="customCart"> 
90                    <#assign asset = assetentry.getEntry('com.liferay.commerce.product.model.CPDefinition',entries[0].getCPDefinitionId())/> 
91                    <#assign relateds = assetCategoryRel.getAssetEntryAssetCategoryRelsByAssetEntryId(asset.getEntryId())/> 
92                    <#if (currentURL?contains("catalogo?"))> 
93                        <#assign category = assetCategory.getAssetCategory(relateds[0].assetCategoryId)/> 
94                    <#else> 
95                        <#if relateds?has_content> 
96                            <#assign category = assetCategory.getAssetCategory(relateds[1].assetCategoryId)/> 
97                        </#if>   
98                    </#if>   
99                     
100                    <#if category?has_content> 
101                        <!-- classId de Category --> 
102                        <#assign friendlyURL = friendlyURLEntryLocalService.getMainFriendlyURLEntry(20013, category.categoryId)> 
103                    <#else> 
104                        <#assign friendlyURL = ""> 
105                    </#if>   
106                    <div class="verMaisCard"> 
107                        <div class="verMaisCardContent"> 
108                            <i class="fas fa-books fa-2x"></i> 
109                            <div>    
110                            <div class="background-left2"><i class="fas fa-circle circulo auxCirc" aria-hidden="true"></i>&nbsp;</div> 
111                            </div> 
112                            <span class="text">Quer mais livros dessa área?</span> 
113                            <span class="ancora"> 
114                             <#if friendlyURL?has_content> 
115                                <#assign categoryUrl = themeDisplay.getURLPortal() + '/categoria/' + friendlyURL.getUrlTitle(locale)/> 
116                                <a class="ancora-aux" href="${categoryUrl}">Confira todos</a></a> 
117                            </#if> 
118                            <!-- --> 
119                            <#assign entryName = entry.name?lower_case> 
120                            <#assign entryNameFormatted = entryName?replace(' ', '-')> 
121                            </span> 
122                            <div>    
123                                <div class="background-right2">&nbsp;<i class="fas fa-circle circulo auxCirc" aria-hidden="true"></i></div> 
124                            </div> 
125                        </div> 
126                    </div> 
127                </div> 
128                <#break> 
129            </#if> 
130        </#list> 
131    </#if> 
132</div> 
133 
134<style> 
135   
136.comprarCarrossel4 { 
137  margin-top: 0px; 
138
139 
140.comprarCarrossel4  div.form-group { 
141  display: none; 
142}  
143    .slider4 { 
144        display: none; 
145
146    .informacoesProdutoCarrossel4 span.commerce-discount { 
147        display: none; 
148
149     
150    .comprarCarrossel4 .add-to-cart-quantity-marker.active { 
151        opacity: 0; 
152        display: none; 
153
154 
155    .comprarCarrossel4  form.quantity-selector { 
156        display: none; 
157
158 
159    .comprarCarrossel4 .add-to-cart button.btn-add-to-cart{ 
160        background-color: #5ACC75; 
161        border-radius: 4px; 
162        width: 206px; 
163        padding: 1px; 
164        justify-content: center;  
165        padding-left: 13%; 
166
167   
168  .comprarCarrossel4 span.price-value-final { 
169     color: #D2691E !important; 
170
171   
172  .comprarCarrossel4 .btnIndisponivelEspecialCarrossel4 { 
173      margin-top: 0.75rem !important; 
174
175   
176    .comprarCarrossel4 .add-to-cart button.btn-add-to-cart{ 
177      background-color: #5ACC75 !important; 
178
179  
180    .informacoesProdutoCarrossel4 .product-price { 
181        font: normal normal bold 16px/17px Montserrat; 
182
183     
184    .slick-dots { 
185      z-index: 2; 
186
187 
188    @media (max-width: 1200px) { 
189      	.slick-dots { 
190            width: 100vw !important; 
191
192
193     
194    @media (min-width: 1023px) { 
195        .slick-dotted.slick-slider { 
196             
197
198        .slider4 { 
199            width: 1093px !important; 
200
201
202     
203    @media (max-width: 813px) { 
204        .divEspiarCarrossel4 { 
205            margin-top: 30px !important; 
206
207         
208         
209        .divValorCarrossel4 { 
210            margin-top: 15px !important; 
211
212
213     
214    @media (max-width: 768px) { 
215        .slider2 .next-arrow { 
216            right: 18px; 
217
218         
219        .slider2 .prev-arrow { 
220            left: 18px; 
221
222         
223        .slider2 .slide-arrow .fa { 
224            font-size: 22px; 
225            font-weight: 400; 
226
227 
228        .slider4 .valorCarrossel4 { 
229          margin-top: 5px; 
230
231 
232        .slider4 .espiarCarrossel4 { 
233          position: relative; 
234          top: -10px; 
235
236 
237        .valorCarrossel4 .price:not(.compact) .price-value { 
238            font: normal 600 18px/17px Montserrat !important; 
239
240        .valorCarrossel4 { 
241            position: relative; 
242            z-index: 9999; 
243            display: flex; 
244            padding-top: 25px; 
245            align-items: flex-end; 
246
247        .valorCarrossel4 .price-value { 
248            margin-left: 0!important; 
249
250        .comprarCarrossel4 .btn-add-to-cart { 
251          margin: 0 !important; 
252          padding-top: 2px !important; 
253
254        .comprarCarrossel4 .btn-add-to-cart::before { 
255          font-size: 16px; 
256
257 
258        .valorCarrossel4:not(.slider4semextracard .valorCarrossel4) { 
259          margin-top: 0!important; 
260          padding-top: 0!important; 
261
262        .slider4 .informacoesProdutoCarrossel4:not(.slider4semextracard) { 
263          top: unset; 
264          bottom: 4%; 
265
266 
267
268     
269    @media (max-width: 600px) { 
270      .comprarCarrossel4 button.btn.btn-primary { 
271        padding-left: 1px; 
272        height: 30px; 
273
274 
275      .btn-add-to-cart-inline::before { 
276        font-size: 14px; 
277        width: 100%; 
278        text-align: center; 
279        display: block; 
280
281
282     
283    .slider4:not(.slider4semextracard) .informacoesProdutoCarrossel4 > a .divValorCarrossel4 { 
284        display: flex; 
285        align-items: flex-end; 
286
287     
288    .slider4:not(.slider4semextracard) .informacoesProdutoCarrossel4 > a .divValorCarrossel4 .price { 
289        order: 1; 
290        margin-top: 0!important; 
291        margin-right: 2px; 
292
293     
294    .slider4:not(.slider4semextracard) .informacoesProdutoCarrossel4 > a .divValorCarrossel4 .parceladoCarrossel4 { 
295        order: 2; 
296
297     
298    .slider4:not(.slider4semextracard) .informacoesProdutoCarrossel4 > a .divValorCarrossel4 .parceladoCarrossel4 + .price { 
299        margin-right: 5px; 
300
301     
302    .slider4:not(.slider4semextracard) .informacoesProdutoCarrossel4 > a .divValorCarrossel4 .product-price { 
303        order: 3; 
304        margin-top: 0; 
305
306     
307    @media (max-width: 414px){ 
308        .slider4 { 
309            width: 100vw !important; 
310            /* margin-right: 0; */ 
311            margin-right: 20px; 
312            margin-left: 20px; 
313
314
315</style> 
316   
317<script> 
318  setTimeout(function(){ 
319    $(document).ready(function() { 
320      $('.slider4').slick({ 
321        arrows: true, 
322        slidesToShow: 4, 
323        slidesToScroll: 4, 
324        dots:true, 
325        infinite: false, 
326        prevArrow: '<a href="#" class="slide-arrow prev-arrow"><i class="fa fa-chevron-left gray"></i></a>', 
327        nextArrow: '<a href="#" class="slide-arrow next-arrow"><i class="fa fa-chevron-right gray"></i></a>', 
328        speed: 1000,  
329        index: 2, 
330        lazyLoad: 'ondemand', 
331        focusOnSelect:false, 
332        accessibility:false, 
333        adaptiveHeight:false, 
334        autoplay:false, 
335        responsive: [{ 
336          breakpoint: 1200, 
337          settings: { 
338            slidesToShow: 4, 
339            slidesToScroll: 4, 
340            variableWidth: true, 
341            infinite: false, 
342            centerMode: false, 
343            dots:true, 
344            arrows: true 
345
346        }, { 
347          breakpoint: 768, 
348          settings: { 
349            slidesToShow: 1, 
350            slidesToScroll: 1, 
351            variableWidth: true, 
352            infinite: false, 
353            centerPadding: 0, 
354            centerMode: false, 
355            dots:false, 
356            arrows: true 
357
358        }] 
359      }); 
360 
361      sendViewItemList([<#list entries as curCPCatalogEntry>${curCPCatalogEntry.getCPDefinitionId()},</#list>]) 
362    }); 
363     
364    const slider4 = document.getElementsByClassName("slider4"); 
365    for (let i = 0; i < slider4.length; i++) { 
366      slider4[i].style.display ='block'; 
367
368     
369    if (typeof promoPrice !== 'undefined') { 
370        promoPrice = document.getElementsByClassName("price"); 
371
372      else { 
373        promoPrice = document.getElementsByClassName("price"); 
374
375   
376      for (let i = 0; i < document.getElementsByClassName("price").length; i++) { 
377        let carrossel = document.getElementsByClassName("price"); 
378        if(carrossel[i].children.length < 5) { 
379          if(carrossel[i].children[0]) 
380            carrossel[i].children[0].innerText = "Por:" 
381 
382          if(carrossel[i].children[1]) { 
383            carrossel[i].children[1].style.color = "#F6921E" 
384            carrossel[i].children[1].style.marginLeft = ".5rem" 
385
386          carrossel[i].style.marginTop = "24px" 
387
388        else if (carrossel[i].children.length > 7){ 
389          carrossel[i].children[0].innerHTML = "<del>De:</del>" 
390          carrossel[i].children[0].style.color = "#78849e" 
391          carrossel[i].children[1].classList.remove("price-value-inactive") 
392          let priceBefore = carrossel[i].children[1].innerText 
393          carrossel[i].children[1].innerHTML = '<del>'+priceBefore+'</del>' 
394          carrossel[i].children[1].style.color = "#78849e" 
395                   
396          carrossel[i].children[2].style.display = "none" 
397          carrossel[i].children[3].style.display = "none" 
398          carrossel[i].children[4].innerText = "Por:" 
399          carrossel[i].children[5].style.display = "none" 
400          carrossel[i].children[6].style.display = "none" 
401          carrossel[i].children[7].style.color = "#F6921E" 
402          carrossel[i].children[7].style.marginLeft = ".5rem" 
403          carrossel[i].style.marginTop = "10px" 
404
405        else { 
406          carrossel[i].children[0].innerHTML = "<del>De:</del>" 
407          carrossel[i].children[0].style.color = "#78849e" 
408          carrossel[i].children[1].classList.remove("price-value-inactive") 
409          let priceBefore = carrossel[i].children[1].innerText 
410          carrossel[i].children[1].innerHTML = '<del>'+priceBefore+'</del>' 
411          carrossel[i].children[1].style.color = "#78849e" 
412          carrossel[i].children[2].style.display = "none" 
413          carrossel[i].children[3].style.display = "none" 
414          carrossel[i].children[4].innerText = "Por:" 
415          carrossel[i].children[5].style.color = "#F6921E" 
416          carrossel[i].children[5].style.marginLeft = ".5rem" 
417          carrossel[i].style.marginTop = "10px" 
418
419
420  }, 1500); 
421   
422   
423   
424</script> 

eds-home-Podologia

Editor de produto

Um erro ocorreu enquanto processava o modelo.
The following has evaluated to null or missing:
==> serviceLocator.findService("br.senac.sp.editora.services.service.ProductService")  [in template "20102#20129#43698964" at line 13, column 27]

----
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 productService = serviceLocat...  [in template "20102#20129#43698964" at line 13, column 1]
----
1<#setting locale="pt_BR"> 
2 
3<#assign assetentry = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService") /> 
4<#assign assetCategoryRel = serviceLocator.findService("com.liferay.asset.entry.rel.service.AssetEntryAssetCategoryRelLocalService") /> 
5<#assign assetCategory = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService") /> 
6<#assign contentHelper = serviceLocator.findService("com.liferay.commerce.product.content.util.CPContentHelper") /> 
7<#assign CPDefinitionHelper = serviceLocator.findService("com.liferay.commerce.product.util.CPDefinitionHelper") /> 
8<#assign friendlyURLEntryLocalService = serviceLocator.findService("com.liferay.friendly.url.service.FriendlyURLEntryLocalService")> 
9 
10<#assign userLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.UserLocalService")> 
11<#assign warehouseService = serviceLocator.findService("com.liferay.commerce.inventory.service.CommerceInventoryWarehouseItemLocalService") /> 
12<#assign companyId =  userLocalService.getUser(themeDisplay.getUserId()).getCompanyId() /> 
13<#assign productService = serviceLocator.findService("br.senac.sp.editora.services.service.ProductService") /> 
14 
15<div class="slider4"> 
16    <#if entries?has_content> 
17        <#list entries as curCPCatalogEntry> 
18            <#if curCPCatalogEntry?counter < 12> 
19                <#assign friendlyURL = CPDefinitionHelper.getFriendlyURL(curCPCatalogEntry.getCPDefinitionId(),themeDisplay)> 
20                <div class="imgContainerEspecialCarrossel4"> 
21                    <a href="${friendlyURL}"> 
22                        <#assign cpMedia = contentHelper.getImages(curCPCatalogEntry.getCPDefinitionId(), themeDisplay) /> 
23                        <#assign defaultImage = "/documents/d/editora-senac/liferay_logo" /> 
24                        <#assign productImage = defaultImage /> 
25                        <#list cpMedia as media> 
26                          <#if media.getURL()?has_content && (media.getTitle()?? && media.getTitle()?contains("small"))> 
27                        <#assign productImage = media.getURL() /> 
28                        <#break> 
29                    </#if> 
30                </#list> 
31                  <#if productImage == defaultImage> 
32                     <#list cpMedia as media> 
33                     <#if media.getURL()?has_content> 
34                        <#assign productImage = media.getURL() /> 
35                        <#break> 
36                    </#if> 
37                  </#list> 
38                </#if> 
39                   <img src="${productImage}" onerror="this.onerror=null;this.src='${defaultImage}';" /> 
40                 </a> 
41                    <div class="informacoesProdutoCarrossel4"> 
42                      <a href="${friendlyURL}"> 
43                      <div class="infoSuperiores"> 
44                          <div class="tituloEspecialCarrossel4"> 
45                           ${curCPCatalogEntry.name?truncate(60, '...')} 
46                          </div> 
47                          <div class="autorEspecialCarrossel4">   
48                            <#list contentHelper.getCategorizedCPDefinitionSpecificationOptionValues(curCPCatalogEntry.getCPDefinitionId(),43620166) as specs>     
49                                <#if specs.CPSpecificationOptionId == 43594743> 
50                                    <#assign autor = specs.getValueCurrentValue() /> 
51                                        ${autor?truncate(45, '...')} 
52                                    <#break> 
53                                </#if> 
54                            </#list> 
55                          </div> 
56                      </div> 
57                      </a> 
58                      <div class="valorCarrossel4"> 
59                        <@liferay_commerce_ui["price"] 
60                            CPCatalogEntry=curCPCatalogEntry 
61                        /> 
62                    </div> 
63                    <div class="espiarCarrossel4"> 
64                      <#if productService.isAvailable( curCPCatalogEntry.getCPDefinitionId() ) > 
65                          <span class="comprarCarrossel4" data-sku="${curCPCatalogEntry.CPSkus[0].getSku()}"> 
66                             <#assign PortalUtil = staticUtil["com.liferay.portal.kernel.util.PortalUtil"] /> 
67                             <#assign id = "add-to-cart" + PortalUtil.generateRandomKey(request, "add-to-cart") + "" + curCPCatalogEntry.CPSkus[0].getSku() /> 
68                             
69                            <#list curCPCatalogEntry.getCPSkus() as skus> 
70                              <@liferay_commerce_ui["add-to-cart"] 
71                      CPInstanceId=skus.getCPInstanceId() 
72                                        id=id 
73                    />                      
74                              </#list>                     
75                     
76             
77                                                         
78                          </span> 
79                      <#else> 
80                        <span class="comprarCarrossel4"> 
81                         <button class="btnIndisponivelEspecialCarrossel4" disabled>Livro Indisponível</button> 
82                        </span> 
83                      </#if> 
84                    </div> 
85                    </div> 
86                </div> 
87            <#elseif curCPCatalogEntry?counter == 12> 
88                <!-- Ver Mais --> 
89                <div class="customCart"> 
90                    <#assign asset = assetentry.getEntry('com.liferay.commerce.product.model.CPDefinition',entries[0].getCPDefinitionId())/> 
91                    <#assign relateds = assetCategoryRel.getAssetEntryAssetCategoryRelsByAssetEntryId(asset.getEntryId())/> 
92                    <#if (currentURL?contains("catalogo?"))> 
93                        <#assign category = assetCategory.getAssetCategory(relateds[0].assetCategoryId)/> 
94                    <#else> 
95                        <#if relateds?has_content> 
96                            <#assign category = assetCategory.getAssetCategory(relateds[1].assetCategoryId)/> 
97                        </#if>   
98                    </#if>   
99                     
100                    <#if category?has_content> 
101                        <!-- classId de Category --> 
102                        <#assign friendlyURL = friendlyURLEntryLocalService.getMainFriendlyURLEntry(20013, category.categoryId)> 
103                    <#else> 
104                        <#assign friendlyURL = ""> 
105                    </#if>   
106                    <div class="verMaisCard"> 
107                        <div class="verMaisCardContent"> 
108                            <i class="fas fa-books fa-2x"></i> 
109                            <div>    
110                            <div class="background-left2"><i class="fas fa-circle circulo auxCirc" aria-hidden="true"></i>&nbsp;</div> 
111                            </div> 
112                            <span class="text">Quer mais livros dessa área?</span> 
113                            <span class="ancora"> 
114                             <#if friendlyURL?has_content> 
115                                <#assign categoryUrl = themeDisplay.getURLPortal() + '/categoria/' + friendlyURL.getUrlTitle(locale)/> 
116                                <a class="ancora-aux" href="${categoryUrl}">Confira todos</a></a> 
117                            </#if> 
118                            <!-- --> 
119                            <#assign entryName = entry.name?lower_case> 
120                            <#assign entryNameFormatted = entryName?replace(' ', '-')> 
121                            </span> 
122                            <div>    
123                                <div class="background-right2">&nbsp;<i class="fas fa-circle circulo auxCirc" aria-hidden="true"></i></div> 
124                            </div> 
125                        </div> 
126                    </div> 
127                </div> 
128                <#break> 
129            </#if> 
130        </#list> 
131    </#if> 
132</div> 
133 
134<style> 
135   
136.comprarCarrossel4 { 
137  margin-top: 0px; 
138
139 
140.comprarCarrossel4  div.form-group { 
141  display: none; 
142}  
143    .slider4 { 
144        display: none; 
145
146    .informacoesProdutoCarrossel4 span.commerce-discount { 
147        display: none; 
148
149     
150    .comprarCarrossel4 .add-to-cart-quantity-marker.active { 
151        opacity: 0; 
152        display: none; 
153
154 
155    .comprarCarrossel4  form.quantity-selector { 
156        display: none; 
157
158 
159    .comprarCarrossel4 .add-to-cart button.btn-add-to-cart{ 
160        background-color: #5ACC75; 
161        border-radius: 4px; 
162        width: 206px; 
163        padding: 1px; 
164        justify-content: center;  
165        padding-left: 13%; 
166
167   
168  .comprarCarrossel4 span.price-value-final { 
169     color: #D2691E !important; 
170
171   
172  .comprarCarrossel4 .btnIndisponivelEspecialCarrossel4 { 
173      margin-top: 0.75rem !important; 
174
175   
176    .comprarCarrossel4 .add-to-cart button.btn-add-to-cart{ 
177      background-color: #5ACC75 !important; 
178
179  
180    .informacoesProdutoCarrossel4 .product-price { 
181        font: normal normal bold 16px/17px Montserrat; 
182
183     
184    .slick-dots { 
185      z-index: 2; 
186
187 
188    @media (max-width: 1200px) { 
189      	.slick-dots { 
190            width: 100vw !important; 
191
192
193     
194    @media (min-width: 1023px) { 
195        .slick-dotted.slick-slider { 
196             
197
198        .slider4 { 
199            width: 1093px !important; 
200
201
202     
203    @media (max-width: 813px) { 
204        .divEspiarCarrossel4 { 
205            margin-top: 30px !important; 
206
207         
208         
209        .divValorCarrossel4 { 
210            margin-top: 15px !important; 
211
212
213     
214    @media (max-width: 768px) { 
215        .slider2 .next-arrow { 
216            right: 18px; 
217
218         
219        .slider2 .prev-arrow { 
220            left: 18px; 
221
222         
223        .slider2 .slide-arrow .fa { 
224            font-size: 22px; 
225            font-weight: 400; 
226
227 
228        .slider4 .valorCarrossel4 { 
229          margin-top: 5px; 
230
231 
232        .slider4 .espiarCarrossel4 { 
233          position: relative; 
234          top: -10px; 
235
236 
237        .valorCarrossel4 .price:not(.compact) .price-value { 
238            font: normal 600 18px/17px Montserrat !important; 
239
240        .valorCarrossel4 { 
241            position: relative; 
242            z-index: 9999; 
243            display: flex; 
244            padding-top: 25px; 
245            align-items: flex-end; 
246
247        .valorCarrossel4 .price-value { 
248            margin-left: 0!important; 
249
250        .comprarCarrossel4 .btn-add-to-cart { 
251          margin: 0 !important; 
252          padding-top: 2px !important; 
253
254        .comprarCarrossel4 .btn-add-to-cart::before { 
255          font-size: 16px; 
256
257 
258        .valorCarrossel4:not(.slider4semextracard .valorCarrossel4) { 
259          margin-top: 0!important; 
260          padding-top: 0!important; 
261
262        .slider4 .informacoesProdutoCarrossel4:not(.slider4semextracard) { 
263          top: unset; 
264          bottom: 4%; 
265
266 
267
268     
269    @media (max-width: 600px) { 
270      .comprarCarrossel4 button.btn.btn-primary { 
271        padding-left: 1px; 
272        height: 30px; 
273
274 
275      .btn-add-to-cart-inline::before { 
276        font-size: 14px; 
277        width: 100%; 
278        text-align: center; 
279        display: block; 
280
281
282     
283    .slider4:not(.slider4semextracard) .informacoesProdutoCarrossel4 > a .divValorCarrossel4 { 
284        display: flex; 
285        align-items: flex-end; 
286
287     
288    .slider4:not(.slider4semextracard) .informacoesProdutoCarrossel4 > a .divValorCarrossel4 .price { 
289        order: 1; 
290        margin-top: 0!important; 
291        margin-right: 2px; 
292
293     
294    .slider4:not(.slider4semextracard) .informacoesProdutoCarrossel4 > a .divValorCarrossel4 .parceladoCarrossel4 { 
295        order: 2; 
296
297     
298    .slider4:not(.slider4semextracard) .informacoesProdutoCarrossel4 > a .divValorCarrossel4 .parceladoCarrossel4 + .price { 
299        margin-right: 5px; 
300
301     
302    .slider4:not(.slider4semextracard) .informacoesProdutoCarrossel4 > a .divValorCarrossel4 .product-price { 
303        order: 3; 
304        margin-top: 0; 
305
306     
307    @media (max-width: 414px){ 
308        .slider4 { 
309            width: 100vw !important; 
310            /* margin-right: 0; */ 
311            margin-right: 20px; 
312            margin-left: 20px; 
313
314
315</style> 
316   
317<script> 
318  setTimeout(function(){ 
319    $(document).ready(function() { 
320      $('.slider4').slick({ 
321        arrows: true, 
322        slidesToShow: 4, 
323        slidesToScroll: 4, 
324        dots:true, 
325        infinite: false, 
326        prevArrow: '<a href="#" class="slide-arrow prev-arrow"><i class="fa fa-chevron-left gray"></i></a>', 
327        nextArrow: '<a href="#" class="slide-arrow next-arrow"><i class="fa fa-chevron-right gray"></i></a>', 
328        speed: 1000,  
329        index: 2, 
330        lazyLoad: 'ondemand', 
331        focusOnSelect:false, 
332        accessibility:false, 
333        adaptiveHeight:false, 
334        autoplay:false, 
335        responsive: [{ 
336          breakpoint: 1200, 
337          settings: { 
338            slidesToShow: 4, 
339            slidesToScroll: 4, 
340            variableWidth: true, 
341            infinite: false, 
342            centerMode: false, 
343            dots:true, 
344            arrows: true 
345
346        }, { 
347          breakpoint: 768, 
348          settings: { 
349            slidesToShow: 1, 
350            slidesToScroll: 1, 
351            variableWidth: true, 
352            infinite: false, 
353            centerPadding: 0, 
354            centerMode: false, 
355            dots:false, 
356            arrows: true 
357
358        }] 
359      }); 
360 
361      sendViewItemList([<#list entries as curCPCatalogEntry>${curCPCatalogEntry.getCPDefinitionId()},</#list>]) 
362    }); 
363     
364    const slider4 = document.getElementsByClassName("slider4"); 
365    for (let i = 0; i < slider4.length; i++) { 
366      slider4[i].style.display ='block'; 
367
368     
369    if (typeof promoPrice !== 'undefined') { 
370        promoPrice = document.getElementsByClassName("price"); 
371
372      else { 
373        promoPrice = document.getElementsByClassName("price"); 
374
375   
376      for (let i = 0; i < document.getElementsByClassName("price").length; i++) { 
377        let carrossel = document.getElementsByClassName("price"); 
378        if(carrossel[i].children.length < 5) { 
379          if(carrossel[i].children[0]) 
380            carrossel[i].children[0].innerText = "Por:" 
381 
382          if(carrossel[i].children[1]) { 
383            carrossel[i].children[1].style.color = "#F6921E" 
384            carrossel[i].children[1].style.marginLeft = ".5rem" 
385
386          carrossel[i].style.marginTop = "24px" 
387
388        else if (carrossel[i].children.length > 7){ 
389          carrossel[i].children[0].innerHTML = "<del>De:</del>" 
390          carrossel[i].children[0].style.color = "#78849e" 
391          carrossel[i].children[1].classList.remove("price-value-inactive") 
392          let priceBefore = carrossel[i].children[1].innerText 
393          carrossel[i].children[1].innerHTML = '<del>'+priceBefore+'</del>' 
394          carrossel[i].children[1].style.color = "#78849e" 
395                   
396          carrossel[i].children[2].style.display = "none" 
397          carrossel[i].children[3].style.display = "none" 
398          carrossel[i].children[4].innerText = "Por:" 
399          carrossel[i].children[5].style.display = "none" 
400          carrossel[i].children[6].style.display = "none" 
401          carrossel[i].children[7].style.color = "#F6921E" 
402          carrossel[i].children[7].style.marginLeft = ".5rem" 
403          carrossel[i].style.marginTop = "10px" 
404
405        else { 
406          carrossel[i].children[0].innerHTML = "<del>De:</del>" 
407          carrossel[i].children[0].style.color = "#78849e" 
408          carrossel[i].children[1].classList.remove("price-value-inactive") 
409          let priceBefore = carrossel[i].children[1].innerText 
410          carrossel[i].children[1].innerHTML = '<del>'+priceBefore+'</del>' 
411          carrossel[i].children[1].style.color = "#78849e" 
412          carrossel[i].children[2].style.display = "none" 
413          carrossel[i].children[3].style.display = "none" 
414          carrossel[i].children[4].innerText = "Por:" 
415          carrossel[i].children[5].style.color = "#F6921E" 
416          carrossel[i].children[5].style.marginLeft = ".5rem" 
417          carrossel[i].style.marginTop = "10px" 
418
419
420  }, 1500); 
421   
422   
423   
424</script> 

eds-home-Radiologia

Editor de produto

Um erro ocorreu enquanto processava o modelo.
The following has evaluated to null or missing:
==> serviceLocator.findService("br.senac.sp.editora.services.service.ProductService")  [in template "20102#20129#43698964" at line 13, column 27]

----
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 productService = serviceLocat...  [in template "20102#20129#43698964" at line 13, column 1]
----
1<#setting locale="pt_BR"> 
2 
3<#assign assetentry = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService") /> 
4<#assign assetCategoryRel = serviceLocator.findService("com.liferay.asset.entry.rel.service.AssetEntryAssetCategoryRelLocalService") /> 
5<#assign assetCategory = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService") /> 
6<#assign contentHelper = serviceLocator.findService("com.liferay.commerce.product.content.util.CPContentHelper") /> 
7<#assign CPDefinitionHelper = serviceLocator.findService("com.liferay.commerce.product.util.CPDefinitionHelper") /> 
8<#assign friendlyURLEntryLocalService = serviceLocator.findService("com.liferay.friendly.url.service.FriendlyURLEntryLocalService")> 
9 
10<#assign userLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.UserLocalService")> 
11<#assign warehouseService = serviceLocator.findService("com.liferay.commerce.inventory.service.CommerceInventoryWarehouseItemLocalService") /> 
12<#assign companyId =  userLocalService.getUser(themeDisplay.getUserId()).getCompanyId() /> 
13<#assign productService = serviceLocator.findService("br.senac.sp.editora.services.service.ProductService") /> 
14 
15<div class="slider4"> 
16    <#if entries?has_content> 
17        <#list entries as curCPCatalogEntry> 
18            <#if curCPCatalogEntry?counter < 12> 
19                <#assign friendlyURL = CPDefinitionHelper.getFriendlyURL(curCPCatalogEntry.getCPDefinitionId(),themeDisplay)> 
20                <div class="imgContainerEspecialCarrossel4"> 
21                    <a href="${friendlyURL}"> 
22                        <#assign cpMedia = contentHelper.getImages(curCPCatalogEntry.getCPDefinitionId(), themeDisplay) /> 
23                        <#assign defaultImage = "/documents/d/editora-senac/liferay_logo" /> 
24                        <#assign productImage = defaultImage /> 
25                        <#list cpMedia as media> 
26                          <#if media.getURL()?has_content && (media.getTitle()?? && media.getTitle()?contains("small"))> 
27                        <#assign productImage = media.getURL() /> 
28                        <#break> 
29                    </#if> 
30                </#list> 
31                  <#if productImage == defaultImage> 
32                     <#list cpMedia as media> 
33                     <#if media.getURL()?has_content> 
34                        <#assign productImage = media.getURL() /> 
35                        <#break> 
36                    </#if> 
37                  </#list> 
38                </#if> 
39                   <img src="${productImage}" onerror="this.onerror=null;this.src='${defaultImage}';" /> 
40                 </a> 
41                    <div class="informacoesProdutoCarrossel4"> 
42                      <a href="${friendlyURL}"> 
43                      <div class="infoSuperiores"> 
44                          <div class="tituloEspecialCarrossel4"> 
45                           ${curCPCatalogEntry.name?truncate(60, '...')} 
46                          </div> 
47                          <div class="autorEspecialCarrossel4">   
48                            <#list contentHelper.getCategorizedCPDefinitionSpecificationOptionValues(curCPCatalogEntry.getCPDefinitionId(),43620166) as specs>     
49                                <#if specs.CPSpecificationOptionId == 43594743> 
50                                    <#assign autor = specs.getValueCurrentValue() /> 
51                                        ${autor?truncate(45, '...')} 
52                                    <#break> 
53                                </#if> 
54                            </#list> 
55                          </div> 
56                      </div> 
57                      </a> 
58                      <div class="valorCarrossel4"> 
59                        <@liferay_commerce_ui["price"] 
60                            CPCatalogEntry=curCPCatalogEntry 
61                        /> 
62                    </div> 
63                    <div class="espiarCarrossel4"> 
64                      <#if productService.isAvailable( curCPCatalogEntry.getCPDefinitionId() ) > 
65                          <span class="comprarCarrossel4" data-sku="${curCPCatalogEntry.CPSkus[0].getSku()}"> 
66                             <#assign PortalUtil = staticUtil["com.liferay.portal.kernel.util.PortalUtil"] /> 
67                             <#assign id = "add-to-cart" + PortalUtil.generateRandomKey(request, "add-to-cart") + "" + curCPCatalogEntry.CPSkus[0].getSku() /> 
68                             
69                            <#list curCPCatalogEntry.getCPSkus() as skus> 
70                              <@liferay_commerce_ui["add-to-cart"] 
71                      CPInstanceId=skus.getCPInstanceId() 
72                                        id=id 
73                    />                      
74                              </#list>                     
75                     
76             
77                                                         
78                          </span> 
79                      <#else> 
80                        <span class="comprarCarrossel4"> 
81                         <button class="btnIndisponivelEspecialCarrossel4" disabled>Livro Indisponível</button> 
82                        </span> 
83                      </#if> 
84                    </div> 
85                    </div> 
86                </div> 
87            <#elseif curCPCatalogEntry?counter == 12> 
88                <!-- Ver Mais --> 
89                <div class="customCart"> 
90                    <#assign asset = assetentry.getEntry('com.liferay.commerce.product.model.CPDefinition',entries[0].getCPDefinitionId())/> 
91                    <#assign relateds = assetCategoryRel.getAssetEntryAssetCategoryRelsByAssetEntryId(asset.getEntryId())/> 
92                    <#if (currentURL?contains("catalogo?"))> 
93                        <#assign category = assetCategory.getAssetCategory(relateds[0].assetCategoryId)/> 
94                    <#else> 
95                        <#if relateds?has_content> 
96                            <#assign category = assetCategory.getAssetCategory(relateds[1].assetCategoryId)/> 
97                        </#if>   
98                    </#if>   
99                     
100                    <#if category?has_content> 
101                        <!-- classId de Category --> 
102                        <#assign friendlyURL = friendlyURLEntryLocalService.getMainFriendlyURLEntry(20013, category.categoryId)> 
103                    <#else> 
104                        <#assign friendlyURL = ""> 
105                    </#if>   
106                    <div class="verMaisCard"> 
107                        <div class="verMaisCardContent"> 
108                            <i class="fas fa-books fa-2x"></i> 
109                            <div>    
110                            <div class="background-left2"><i class="fas fa-circle circulo auxCirc" aria-hidden="true"></i>&nbsp;</div> 
111                            </div> 
112                            <span class="text">Quer mais livros dessa área?</span> 
113                            <span class="ancora"> 
114                             <#if friendlyURL?has_content> 
115                                <#assign categoryUrl = themeDisplay.getURLPortal() + '/categoria/' + friendlyURL.getUrlTitle(locale)/> 
116                                <a class="ancora-aux" href="${categoryUrl}">Confira todos</a></a> 
117                            </#if> 
118                            <!-- --> 
119                            <#assign entryName = entry.name?lower_case> 
120                            <#assign entryNameFormatted = entryName?replace(' ', '-')> 
121                            </span> 
122                            <div>    
123                                <div class="background-right2">&nbsp;<i class="fas fa-circle circulo auxCirc" aria-hidden="true"></i></div> 
124                            </div> 
125                        </div> 
126                    </div> 
127                </div> 
128                <#break> 
129            </#if> 
130        </#list> 
131    </#if> 
132</div> 
133 
134<style> 
135   
136.comprarCarrossel4 { 
137  margin-top: 0px; 
138
139 
140.comprarCarrossel4  div.form-group { 
141  display: none; 
142}  
143    .slider4 { 
144        display: none; 
145
146    .informacoesProdutoCarrossel4 span.commerce-discount { 
147        display: none; 
148
149     
150    .comprarCarrossel4 .add-to-cart-quantity-marker.active { 
151        opacity: 0; 
152        display: none; 
153
154 
155    .comprarCarrossel4  form.quantity-selector { 
156        display: none; 
157
158 
159    .comprarCarrossel4 .add-to-cart button.btn-add-to-cart{ 
160        background-color: #5ACC75; 
161        border-radius: 4px; 
162        width: 206px; 
163        padding: 1px; 
164        justify-content: center;  
165        padding-left: 13%; 
166
167   
168  .comprarCarrossel4 span.price-value-final { 
169     color: #D2691E !important; 
170
171   
172  .comprarCarrossel4 .btnIndisponivelEspecialCarrossel4 { 
173      margin-top: 0.75rem !important; 
174
175   
176    .comprarCarrossel4 .add-to-cart button.btn-add-to-cart{ 
177      background-color: #5ACC75 !important; 
178
179  
180    .informacoesProdutoCarrossel4 .product-price { 
181        font: normal normal bold 16px/17px Montserrat; 
182
183     
184    .slick-dots { 
185      z-index: 2; 
186
187 
188    @media (max-width: 1200px) { 
189      	.slick-dots { 
190            width: 100vw !important; 
191
192
193     
194    @media (min-width: 1023px) { 
195        .slick-dotted.slick-slider { 
196             
197
198        .slider4 { 
199            width: 1093px !important; 
200
201
202     
203    @media (max-width: 813px) { 
204        .divEspiarCarrossel4 { 
205            margin-top: 30px !important; 
206
207         
208         
209        .divValorCarrossel4 { 
210            margin-top: 15px !important; 
211
212
213     
214    @media (max-width: 768px) { 
215        .slider2 .next-arrow { 
216            right: 18px; 
217
218         
219        .slider2 .prev-arrow { 
220            left: 18px; 
221
222         
223        .slider2 .slide-arrow .fa { 
224            font-size: 22px; 
225            font-weight: 400; 
226
227 
228        .slider4 .valorCarrossel4 { 
229          margin-top: 5px; 
230
231 
232        .slider4 .espiarCarrossel4 { 
233          position: relative; 
234          top: -10px; 
235
236 
237        .valorCarrossel4 .price:not(.compact) .price-value { 
238            font: normal 600 18px/17px Montserrat !important; 
239
240        .valorCarrossel4 { 
241            position: relative; 
242            z-index: 9999; 
243            display: flex; 
244            padding-top: 25px; 
245            align-items: flex-end; 
246
247        .valorCarrossel4 .price-value { 
248            margin-left: 0!important; 
249
250        .comprarCarrossel4 .btn-add-to-cart { 
251          margin: 0 !important; 
252          padding-top: 2px !important; 
253
254        .comprarCarrossel4 .btn-add-to-cart::before { 
255          font-size: 16px; 
256
257 
258        .valorCarrossel4:not(.slider4semextracard .valorCarrossel4) { 
259          margin-top: 0!important; 
260          padding-top: 0!important; 
261
262        .slider4 .informacoesProdutoCarrossel4:not(.slider4semextracard) { 
263          top: unset; 
264          bottom: 4%; 
265
266 
267
268     
269    @media (max-width: 600px) { 
270      .comprarCarrossel4 button.btn.btn-primary { 
271        padding-left: 1px; 
272        height: 30px; 
273
274 
275      .btn-add-to-cart-inline::before { 
276        font-size: 14px; 
277        width: 100%; 
278        text-align: center; 
279        display: block; 
280
281
282     
283    .slider4:not(.slider4semextracard) .informacoesProdutoCarrossel4 > a .divValorCarrossel4 { 
284        display: flex; 
285        align-items: flex-end; 
286
287     
288    .slider4:not(.slider4semextracard) .informacoesProdutoCarrossel4 > a .divValorCarrossel4 .price { 
289        order: 1; 
290        margin-top: 0!important; 
291        margin-right: 2px; 
292
293     
294    .slider4:not(.slider4semextracard) .informacoesProdutoCarrossel4 > a .divValorCarrossel4 .parceladoCarrossel4 { 
295        order: 2; 
296
297     
298    .slider4:not(.slider4semextracard) .informacoesProdutoCarrossel4 > a .divValorCarrossel4 .parceladoCarrossel4 + .price { 
299        margin-right: 5px; 
300
301     
302    .slider4:not(.slider4semextracard) .informacoesProdutoCarrossel4 > a .divValorCarrossel4 .product-price { 
303        order: 3; 
304        margin-top: 0; 
305
306     
307    @media (max-width: 414px){ 
308        .slider4 { 
309            width: 100vw !important; 
310            /* margin-right: 0; */ 
311            margin-right: 20px; 
312            margin-left: 20px; 
313
314
315</style> 
316   
317<script> 
318  setTimeout(function(){ 
319    $(document).ready(function() { 
320      $('.slider4').slick({ 
321        arrows: true, 
322        slidesToShow: 4, 
323        slidesToScroll: 4, 
324        dots:true, 
325        infinite: false, 
326        prevArrow: '<a href="#" class="slide-arrow prev-arrow"><i class="fa fa-chevron-left gray"></i></a>', 
327        nextArrow: '<a href="#" class="slide-arrow next-arrow"><i class="fa fa-chevron-right gray"></i></a>', 
328        speed: 1000,  
329        index: 2, 
330        lazyLoad: 'ondemand', 
331        focusOnSelect:false, 
332        accessibility:false, 
333        adaptiveHeight:false, 
334        autoplay:false, 
335        responsive: [{ 
336          breakpoint: 1200, 
337          settings: { 
338            slidesToShow: 4, 
339            slidesToScroll: 4, 
340            variableWidth: true, 
341            infinite: false, 
342            centerMode: false, 
343            dots:true, 
344            arrows: true 
345
346        }, { 
347          breakpoint: 768, 
348          settings: { 
349            slidesToShow: 1, 
350            slidesToScroll: 1, 
351            variableWidth: true, 
352            infinite: false, 
353            centerPadding: 0, 
354            centerMode: false, 
355            dots:false, 
356            arrows: true 
357
358        }] 
359      }); 
360 
361      sendViewItemList([<#list entries as curCPCatalogEntry>${curCPCatalogEntry.getCPDefinitionId()},</#list>]) 
362    }); 
363     
364    const slider4 = document.getElementsByClassName("slider4"); 
365    for (let i = 0; i < slider4.length; i++) { 
366      slider4[i].style.display ='block'; 
367
368     
369    if (typeof promoPrice !== 'undefined') { 
370        promoPrice = document.getElementsByClassName("price"); 
371
372      else { 
373        promoPrice = document.getElementsByClassName("price"); 
374
375   
376      for (let i = 0; i < document.getElementsByClassName("price").length; i++) { 
377        let carrossel = document.getElementsByClassName("price"); 
378        if(carrossel[i].children.length < 5) { 
379          if(carrossel[i].children[0]) 
380            carrossel[i].children[0].innerText = "Por:" 
381 
382          if(carrossel[i].children[1]) { 
383            carrossel[i].children[1].style.color = "#F6921E" 
384            carrossel[i].children[1].style.marginLeft = ".5rem" 
385
386          carrossel[i].style.marginTop = "24px" 
387
388        else if (carrossel[i].children.length > 7){ 
389          carrossel[i].children[0].innerHTML = "<del>De:</del>" 
390          carrossel[i].children[0].style.color = "#78849e" 
391          carrossel[i].children[1].classList.remove("price-value-inactive") 
392          let priceBefore = carrossel[i].children[1].innerText 
393          carrossel[i].children[1].innerHTML = '<del>'+priceBefore+'</del>' 
394          carrossel[i].children[1].style.color = "#78849e" 
395                   
396          carrossel[i].children[2].style.display = "none" 
397          carrossel[i].children[3].style.display = "none" 
398          carrossel[i].children[4].innerText = "Por:" 
399          carrossel[i].children[5].style.display = "none" 
400          carrossel[i].children[6].style.display = "none" 
401          carrossel[i].children[7].style.color = "#F6921E" 
402          carrossel[i].children[7].style.marginLeft = ".5rem" 
403          carrossel[i].style.marginTop = "10px" 
404
405        else { 
406          carrossel[i].children[0].innerHTML = "<del>De:</del>" 
407          carrossel[i].children[0].style.color = "#78849e" 
408          carrossel[i].children[1].classList.remove("price-value-inactive") 
409          let priceBefore = carrossel[i].children[1].innerText 
410          carrossel[i].children[1].innerHTML = '<del>'+priceBefore+'</del>' 
411          carrossel[i].children[1].style.color = "#78849e" 
412          carrossel[i].children[2].style.display = "none" 
413          carrossel[i].children[3].style.display = "none" 
414          carrossel[i].children[4].innerText = "Por:" 
415          carrossel[i].children[5].style.color = "#F6921E" 
416          carrossel[i].children[5].style.marginLeft = ".5rem" 
417          carrossel[i].style.marginTop = "10px" 
418
419
420  }, 1500); 
421   
422   
423   
424</script> 

eds-newsletter

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