Product Details

An error occurred while processing the template.
The following has evaluated to null or missing:
==> curCPCatalogEntry.getUrl()  [in template "84465#84493#1093610" at line 330, column 30]

----
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 Url = curCPCatalogEntry.getUrl()  [in template "84465#84493#1093610" at line 330, column 17]
----
1<#--  ---- ADT-ProductDetail ver. 1.6 ---- --> 
2<#--  ------ copyright ACSoftware -------  --> 
3<#--  -- written by Mattia Giovinazzo ---  --> 
4 
5<#assign 
6is_login_redirect_required = portalUtil.isLoginRedirectRequired(request) 
7is_signed_in = themeDisplay.isSignedIn() 
8portal_url = themeDisplay.getPortalURL() 
9/> 
10<style> 
11    .portlet-body { 
12        padding:2rem; 
13
14 
15    #productDetails.bg-prod { 
16        padding: 1rem; 
17        background: #fafafa; 
18        border-radius: 20px; 
19        box-shadow: 2px 2px 10px rgb(0 0 0 / 20%); 
20        margin-bottom: 1rem; 
21        position:relative; 
22
23 
24    #productDetails .nav-tabs { 
25        border-bottom: 1px solid #eee; 
26        width: calc(100% - 64px); 
27        padding: 0 1rem; 
28        margin: 0 auto; 
29
30 
31    #productDetails .nav-tabs .nav-link.active { 
32        background-color: transparent; 
33        border-color: transparent transparent #f1f2f5; 
34        color: #272833; 
35        border-radius: 10px 10px 0 0; 
36        padding: 0.5rem 1rem; 
37        box-shadow: 0px -2px 6px rgb(0 0 0 / 10%); 
38
39 
40    /* 
41        #productDetails .card-top:before { 
42            content: ""; 
43            background-position: top; 
44            display: block; 
45            position: absolute; 
46            bottom: 0; 
47            left: -40px; 
48            top: -40px; 
49            border-radius: 20px; 
50            z-index: 1; 
51            height: calc(100% + 80px); 
52            width: 100%; 
53            max-width: 1440px; 
54            clip-path: circle(100% at 0% 0%); 
55            min-height: 150px; 
56            background-color: #393a4a; 
57            overflow: hidden; 
58
59 
60        #productDetails .card-top:after { 
61            content: ''; 
62            position: absolute; 
63            box-shadow: 2px 2px 10px rgb(0 0 0 / 20%); 
64            border-radius: 20px; 
65            padding: 2rem; 
66            background-color: #64c7ff55; 
67            top: -40px; 
68            left: -40px; 
69            width: calc(100% + 20px); 
70            height: calc(100% + 80px); 
71            z-index: 1; 
72
73    */ 
74    #productDetails .card-img { 
75        flex-shrink: 0; 
76        width: 100%; 
77        z-index: 2; 
78        position: relative; 
79        left: -20px; 
80        top: -20px; 
81
82 
83    #productDetails .name { 
84        margin: 2rem 0; 
85
86 
87    #productDetails .name h1 { 
88        font-weight: normal; 
89        font-size: 64px; 
90        line-height: 60px; 
91
92 
93    @media (max-width:1440px) { 
94        #productDetails .name h1 { 
95            font-size: 52px; 
96            line-height: 50px; 
97
98
99 
100    @media (max-width:1180px) { 
101        #productDetails .name h1 { 
102            font-size: 44px; 
103            line-height: 42px; 
104
105
106 
107    #productDetails .price { 
108        font-size: 44px; 
109        text-align: right; 
110        margin-bottom: 1rem; 
111
112 
113    .product-price { 
114        z-index: 2; 
115        position: relative; 
116        color: white; 
117        right: 2rem; 
118
119 
120    .product-promo-price { 
121        color: #0033B4; 
122        padding-right: 1rem; 
123        z-index: 2; 
124        position: relative; 
125        font-size: 30px; 
126
127 
128    .product-promo-price ~ .product-price { 
129        right: 0; 
130
131 
132    .priceBand { 
133        position: absolute; 
134        height: 80px; 
135        right: -14px; 
136        margin-top: -4px; 
137        z-index: 1; 
138        filter: drop-shadow(0px 0px 4px rgba(0,0,0, 0.2)); 
139
140 
141    .imgBand { 
142        position: absolute; 
143        left: -22px; 
144        margin-top: -4px; 
145        z-index: 1; 
146        filter: drop-shadow(0px 0px 4px rgba(0,0,0, 0.2)); 
147
148 
149    @media (max-width:1280px) { 
150        .imgBand { 
151            left: -19px; 
152
153
154 
155    @media (max-width:1024px) { 
156        .imgBand { 
157            left: -16px; 
158
159
160 
161    @media (max-width:767px) { 
162        #productDetails .mt-5 { 
163            margin-top: 1rem !important; 
164
165 
166        .imgBand { 
167            left: -20px; 
168
169
170 
171    .msg-login { 
172        width: 100%; 
173        text-align: right; 
174        margin-top: 1rem; 
175        padding: 1rem; 
176        border-top: 1px solid #eee; 
177
178 
179    @keyframes grow { 
180        from { 
181            transform: scale(0, 0); 
182            opacity: 1; 
183
184        to { 
185            transform: scale(1.5, 1.5); 
186            opacity: 0; 
187
188
189 
190    #productDetails .addCart > div{ 
191        display: flex; 
192        width: auto; 
193        justify-content: flex-end; 
194        gap: 2rem; 
195        align-items: end; 
196        flex-direction: row; 
197        right: 2rem; 
198        position: relative; 
199
200 
201    #productDetails .btnLG, #productDetails .taglib-add-to-cart { 
202        font-size: 15px; 
203        line-height: 1.5; 
204        color: #fff; 
205        text-transform: uppercase; 
206        width: auto; 
207        min-width: 140px; 
208        height: 50px; 
209        background: #006EB4; 
210        display: -webkit-box; 
211        display: -moz-box; 
212        display: -ms-flexbox; 
213        display: -webkit-flex; 
214        display: flex; 
215        justify-content: center; 
216        align-items: center; 
217        padding: 0 1rem; 
218        -webkit-transition: all 0.5s; 
219        -o-transition: all 0.5s; 
220        -moz-transition: all 0.5s; 
221        transition: all 0.5s; 
222        border-radius: 25px; 
223        border: 0; 
224        overflow:hidden; 
225        text-align:center; 
226        text-decoration:none; 
227        position:relative; 
228        box-shadow:rgba(0,0,0,.15) 0 1px 2px; 
229        outline:none; 
230        z-index:3; 
231
232    .btnLG:hover, .taglib-add-to-cart:hover { 
233        box-shadow:rgba(0,0,0,.3) 0 8px 25px, rgba(0,0,0,.2)0 1px; 
234        text-shadow:#fff 0 0 12px; 
235        text-decoration:none; 
236
237    .btnLG:active, .taglib-add-to-cart:active { 
238        box-shadow:rgba(0,0,0,.2) 0 8px 25px; 
239        transition: all 0s; 
240
241    .btnLG span, .taglib-add-to-cart span { 
242        position:relative; 
243        z-index:9; 
244
245    .btnLG:before, .btnLG:after, .taglib-add-to-cart:before, .taglib-add-to-cart:after { 
246        position:absolute; 
247        top:0; 
248        left:0; 
249        display:block; 
250        content:" "; 
251
252    .btnLG:before, .taglib-add-to-cart:before { 
253        z-index:2; 
254
255 
256    .btnLG:after, .taglib-add-to-cart:after { 
257        z-index:1; 
258
259 
260    .btnLG:after, .taglib-add-to-cart:after { 
261        height:100%; 
262        width:2000px; 
263        transition: all .8s; 
264        background: linear-gradient(135deg, #31a0e3 0%,#0d5682 19%,#2a79ca 37%,#ffffff 50%,#c2c2c2 66%,#2a7aca 75%,#64c7ff 100%); 
265        mix-blend-mode: overlay; 
266
267    .btnLG:before, .taglib-add-to-cart:before { 
268        height:26px; 
269        width:100%; 
270        top:-50px; 
271        opacity:0; 
272        background-color:rgba(255,255,255,.15); 
273        transition: all .5s; 
274
275    .btnLG:hover:before, .taglib-add-to-cart:hover:before { 
276        top:0; 
277        opacity:1; 
278
279    .btnLG:hover:after, .taglib-add-to-cart:hover:after { 
280        left:-1750px; 
281
282    .btnLG:active:before, .taglib-add-to-cart:active:before { 
283        height:100%; 
284        background-color:rgba(255,255,255,.8); 
285        box-shadow:inset rgba(255,255,255,.5)0 0 25px; 
286        transition: all 0s; 
287
288 
289    .nav-tabs + .tab-content .tab-pane { 
290        background-color: transparent; 
291
292 
293    #productDetails .btnLG.circle { 
294        height: 50px; 
295        width: 50px; 
296        padding: 0; 
297        min-width: 50px; 
298        position: absolute; 
299        text-align: right; 
300        right: 1rem; 
301
302 
303    svg.share { 
304        z-index: 9; 
305        position: relative; 
306        color: white; 
307        fill: currentColor; 
308
309 
310    .commerce-quantity-container { 
311        width:0!important; 
312        heigth:0!important; 
313        display:none; 
314
315 
316 
317</style> 
318<div id="productDetails" class="contBox-1440 bg-prod"> 
319    <button class="btnLG circle" onclick="copyToClipboard()"  title="Copy and Share Link"> 
320        <svg class="share" style="width:24px;height:24px" viewBox="0 0 24 24"> 
321            <path d="M18,16.08C17.24,16.08 16.56,16.38 16.04,16.85L8.91,12.7C8.96,12.47 9,12.24 9,12C9,11.76 8.96,11.53 8.91,11.3L15.96,7.19C16.5,7.69 17.21,8 18,8A3,3 0 0,0 21,5A3,3 0 0,0 18,2A3,3 0 0,0 15,5C15,5.24 15.04,5.47 15.09,5.7L8.04,9.81C7.5,9.31 6.79,9 6,9A3,3 0 0,0 3,12A3,3 0 0,0 6,15C6.79,15 7.5,14.69 8.04,14.19L15.16,18.34C15.11,18.55 15.08,18.77 15.08,19C15.08,20.61 16.39,21.91 18,21.91C19.61,21.91 20.92,20.61 20.92,19A2.92,2.92 0 0,0 18,16.08Z" /> 
322        </svg> 
323    </button> 
324 
325    <#if entries?has_content> 
326        <#list entries as curCPCatalogEntry> 
327            <#if curCPCatalogEntry?has_content> 
328                <#assign Image=curCPCatalogEntry.getDefaultImageFileUrl() /> 
329                <#assign Name=curCPCatalogEntry.getName() /> 
330                <#assign Url=curCPCatalogEntry.getUrl() /> 
331                <#assign SKUs=curCPCatalogEntry.CPSkus[0] /> 
332                <#assign DefinitionID=curCPCatalogEntry.getCPDefinitionId() /> 
333                <#assign InstanceId=SKUs.getCPInstanceId() /> 
334 
335 
336                <div class="row mt-5"> 
337                    <div class="col-md-6 card-top"> 
338                        <img class="card-img" title="" alt="" src="${Image}" /> 
339                        <svg class="imgBand" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 400" xml:space="preserve"> 
340                        <g> 
341                            <path fill="#005F82" d="M14.8,350.5V399C7.4,399,0,394.8,0,388.8v-38h14.8V350.5z"/> 
342                            <path fill="#005F82" d="M14.8,49.5V1C7.4,1,0,6.3,0,12.2v37.3H14.8L14.8,49.5z"/> 
343                            <path fill="#009FE3" d="M511.5,379.4L580,19.6c-80.1,0-564.9,0-564.9,0S0,21.7,0,12.5c0-0.4,0,377.4,0,375c0-8,15.1-8.1,15.1-8.1 s417.5,0,498.1,0H511.5z"/> 
344                        </g> 
345                        </svg> 
346 
347                    </div> 
348                    <div class="col-md-6 card-details"> 
349                        <div class="name"> 
350                            <h1>${Name}</h1> 
351                        </div> 
352                        <div class="price"> 
353                            <@liferay_commerce["price"] 
354                            CPDefinitionId=curCPCatalogEntry.getCPDefinitionId() 
355                            CPInstanceId=curCPCatalogEntry.CPSkus[0].getCPInstanceId() 
356                            showDiscount=true 
357                            /> 
358                            <svg class="priceBand" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 100" > 
359                                <g> 
360                                    <path fill="#005F82" d="M308,16.1V-0.1c7.4,0,12,3.6,12,5.3v10.8H308L308,16.1z"/> 
361                                    <path fill="#005F82" d="M308,83.8v16.1c7.4,0,12-3.6,12-5.3V83.8H308L308,83.8z"/> 
362                                    <path fill="#009FE3" d="M16.6,9.7L0,89.9c19.4,0,307.8,0,307.8,0s12.2,0,12.2,5.3c0,0.1,0-91.2,0-90.6c0,4.6-12.2,5-12.2,5v0.1 C288.3,9.7,36.1,9.7,16.6,9.7L16.6,9.7z"/> 
363                                </g> 
364                            </svg> 
365                        </div> 
366                        <div class="addCart"> 
367                            <#if is_signed_in> 
368                                <div> 
369<#-- 
370                                    <div class="quantity-input"> 
371                                        <@liferay_commerce["quantity-input"] key="com.liferay.commerce.taglib.servlet.taglib.QuantityInputTag" 
372                                        CPDefinitionId=curCPCatalogEntry.getCPDefinitionId() 
373                                        _allowedOrderQuantities=true 
374                                        useSelect=false 
375                                        updateOnChange=true 
376                                        /> 
377                                    </div> 
378                                     --> 
379                                    <@liferay_util["dynamic-include"] key="com.liferay.commerce.product.content.web#/add_to_cart#" /> 
380 
381<#-- 
382                                    <@liferay_util["dynamic-include"] key="com.liferay.commerce.product.content.web#/add_to_cart#pre" /> 
383                                    <div id="${request}"> 
384                                        <button class="taglib-add-to-cart btnLG" id="${request}" cp-definition-id="${InstanceId}" cp-instance-id="${DefinitionID}" type="button"  onclick=" null " href="${portal_url}/cart"  title="Add to Cart"><span>Add to Cart</span></button> 
385                                    </div> 
386                                    <@liferay_util["dynamic-include"] key="com.liferay.commerce.product.content.web#/add_to_cart#post" /> 
387 --> 
388 
389 
390                                </div> 
391 
392                            <#else> 
393                                <div> 
394<#-- 
395                                    <div class="quantity-input"> 
396                                        <@liferay_commerce["quantity-input"] key="com.liferay.commerce.taglib.servlet.taglib.QuantityInputTag" 
397                                        CPDefinitionId=curCPCatalogEntry.getCPDefinitionId() 
398                                        _allowedOrderQuantities=true 
399                                        useSelect=false 
400                                        updateOnChange=true 
401                                        /> 
402                                    </div> 
403  --> 
404                                    <a id="addCart" cp-definition-id="${InstanceId}" cp-instance-id="${DefinitionID}" class="taglib-add-to-cart btnLG" href="${portal_url}/c/portal/login"  title="Add to Cart"><span>Add to Cart</span></a> 
405                                </div> 
406 
407                                <div class="msg-login" > 
408                                    <span class="title-light small txt-c">To complete the purchase procedure you need to 
409                                        <a href="${portal_url}/c/portal/login"><b>login</b></a> 
410                                        <br/> If you are a new customer, 
411                                        <a href="${portal_url}/web/guest/home?p_p_id=com_liferay_login_web_portlet_LoginPortlet&p_p_lifecycle=0&p_p_state=maximized&p_p_mode=view&saveLastPath=false&_com_liferay_login_web_portlet_LoginPortlet_mvcRenderCommandName=%2Flogin%2Fcreate_account"><b>crea un nuovo account</b>,</a> 
412                                        register and proceed with the purchase. 
413                                    </span> 
414                                </div> 
415                            </#if> 
416                        </div> 
417                    </div> 
418 
419                </div> 
420                <div class="row mt-5 block"> 
421                    <ul class="nav nav-tabs" id="myTab" role="tablist"> 
422                        <li class="nav-item"> 
423                            <a class="nav-link lead active" role="tab" data-toggle="tab" href="#tabDescription" key="">Description</a> 
424                        </li> 
425                    </ul> 
426                    <div class="tab-content" id="myTabContent"> 
427                        <div class="card-desc tab-pane pt-4 active" role="tabpanel" id="tabDescription"> 
428                            <p>${curCPCatalogEntry.description}</p> 
429                        </div> 
430                    </div> 
431                </div> 
432 
433            <#else> 
434            </#if> 
435        </#list> 
436    </#if> 
437</div> 
438<@liferay_aui["script"]> 
439    Liferay.after( 
440    'commerce:productAddedToCart', 
441    function(event) { 
442    Liferay.Portlet.refresh('#p_p_id<@portlet.namespace />'); 
443
444    ); 
445</@> 
446 
447<script> 
448    var cartUrl = "${portal_url}/cart"; 
449    $('.taglib-add-to-cart').click(function() { 
450        setTimeout(function () 
451        { window.location.reload(true); 
452            window.location.href = cartUrl; 
453        }, 500); 
454    }); 
455</script> 
456<script> 
457    function copyToClipboard(text) { 
458        var inputc = document.body.appendChild(document.createElement("input")); 
459        inputc.value = window.location.href; 
460        inputc.focus(); 
461        inputc.select(); 
462        document.execCommand('copy'); 
463        inputc.parentNode.removeChild(inputc); 
464        alert("URL Copied."); 
465
466</script>