hachoir Posted March 7, 2020 Share Posted March 7, 2020 Bonjour, Je suis actuellement sur Prestashop 1.7.1.1. J'ai besoin d'aide sur un problème concernant le panier à savoir: Quand j'ajoute un produit dans mon Panier, la quantité ne se met pas à jour toute seul. Il faut rafraîchir la page pour avoir le panier avec les bonnes quantités. J'ai essayé beaucoup de choses: -vider les caches -activer le mode debug -Réinitialiser le thème Je n'ai pas d'erreur PHP (en mode debug) ou javascript (dans la console). J'ai essayé de bidouiller des fichiers tpl et js mais je n'arrive pas à corriger le problème. <div id="_desktop_cart"> <div class="blockcart cart-preview {if $cart.products_count > 0}active{else}inactive{/if}" data-refresh-url="{$refresh_url}"> <div class="header"> {if $cart.products_count > 0} <a rel="nofollow" href="{$cart_url}"> {/if} <i class="material-icons shopping-cart">shopping_cart</i> <span class="hidden-sm-down"> {l s='Panier' d='Shop.Theme.Chekout'}</span> <span class="cart-products-count">({$cart.products_count})</span> {if $cart.products_count > 0} </a> {/if} </div> </div> </div> Le code ci dessus est issue du fichier: Montheme/modules/ps_shopping_cart.tpl La variable $cart.products_count ne se met pas à jour. Plus généralement si j'insère d'autres variables dans le block _desktop_cart, elles ne mettent pas à jour. Par exemple, $cart.subtotals.products.amount. Avez-vous des idées ? Merci pour votre aide ou votre réponse. Link to comment Share on other sites More sharing options...
hachoir Posted March 9, 2020 Author Share Posted March 9, 2020 J'ai trouver une solution. Le problème venait du fichier modules/ps_shoppingcart/ps_shoppingcart.js code dans ce fichier /* global $, prestashop */ /** * This module exposes an extension point in the form of the `showModal` function. * * If you want to override the way the modal window is displayed, simply define: * * prestashop.blockcart = prestashop.blockcart || {}; * prestashop.blockcart.showModal = function myOwnShowModal (modalHTML) { * // your own code * // please not that it is your responsibility to handle closing the modal too * }; * * Attention: your "override" JS needs to be included **before** this file. * The safest way to do so is to place your "override" inside the theme's main JS file. * */ $(document).ready(function () { prestashop.blockcart = prestashop.blockcart || {}; var showModal = prestashop.blockcart.showModal || function (modal) { var $body = $('body'); $body.append(modal); $body.one('click', '#blockcart-modal', function (event) { if (event.target.id === 'blockcart-modal') { $(event.target).remove(); } }); }; prestashop.on( 'updateCart', function (event) { var refreshURL = $('.blockcart').data('refresh-url'); var requestData = {}; if (event && event.reason && typeof event.resp !== 'undefined' && !event.resp.hasError) { requestData = { id_customization: event.reason.idCustomization, id_product_attribute: event.reason.idProductAttribute, id_product: event.reason.idProduct, action: event.reason.linkAction }; $.post(refreshURL, requestData).then(function (resp) { $('.blockcart').replaceWith($(resp.preview).find('.blockcart')); if (resp.modal) { window.location.replace(prestashop.urls.pages.cart); } }).fail(function (resp) { prestashop.emit('handleError', { eventType: 'updateShoppingCart', resp: resp }); }); } if (event && event.resp && event.resp.hasError) { prestashop.emit('showErrorNextToAddtoCartButton', { errorMessage: event.resp.errors.join('<br/>')}); } } ); }); A remplacer par le code de prestashop 1.7.1.1 vierge à savoir /* global $, prestashop */ /** * This module exposes an extension point in the form of the `showModal` function. * * If you want to override the way the modal window is displayed, simply define: * * prestashop.blockcart = prestashop.blockcart || {}; * prestashop.blockcart.showModal = function myOwnShowModal (modalHTML) { * // your own code * // please not that it is your responsibility to handle closing the modal too * }; * * Attention: your "override" JS needs to be included **before** this file. * The safest way to do so is to place your "override" inside the theme's main JS file. * */ $(document).ready(function () { prestashop.blockcart = prestashop.blockcart || {}; var showModal = prestashop.blockcart.showModal || function (modal) { var $body = $('body'); $body.append(modal); $body.one('click', '#blockcart-modal', function (event) { if (event.target.id === 'blockcart-modal') { $(event.target).remove(); } }); }; $(document).ready(function () { prestashop.on( 'updateCart', function (event) { var refreshURL = $('.blockcart').data('refresh-url'); var requestData = {}; if (event && event.reason) { requestData = { id_product_attribute: event.reason.idProductAttribute, id_product: event.reason.idProduct, action: event.reason.linkAction }; } $.post(refreshURL, requestData).then(function (resp) { $('.blockcart').replaceWith($(resp.preview).find('.blockcart')); if (resp.modal) { showModal(resp.modal); } }).fail(function (resp) { prestashop.emit('handleError', {eventType: 'updateShoppingCart', resp: resp}); }); } ); }); }); 1 1 Link to comment Share on other sites More sharing options...
Skyiiess Posted February 17, 2023 Share Posted February 17, 2023 Bonjour, cela me fait pareil mais j'ai essayé ta solution, mais cela ne marche pas, je vais attendre de voir et chercher une autre solution que je partagerais ici. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now