Jump to content

lezard

Members
  • Posts

    15
  • Joined

  • Last visited

1 Follower

Profile Information

  • First Name
    juelin
  • Last Name
    demade

lezard's Achievements

Newbie

Newbie (1/14)

0

Reputation

  1. Bonjour, j'aimerais permettre a l'utilisateur de choisir sa quantité directement depuis la liste des produits (sans rentrer dans la fiche produit ). J'ai essayer plusieurs technique pour y parvenir cependant le panier ajax ne prends jamais la valeur de l'input ajouté . Le dernier tuto que j'ai suivi est ce lui ci https://mypresta.eu/en/art/prestashop-16/quantity-product-list.html je pense que mon problème viens du thème que j'utilise car d'après les retour la technique fonctionne. je suis sous prestashop 1.6.1.5 Thème optima (version tool) le site est en prod mais je test sur une version en local sous wamp je vous copie les deux bout de code concerné par la modif au cas ou ../themes/pos_optima-tools/js/modules/blockcart/ajax-cart.js : var ajaxCart = { nb_total_products: 0, //override every button in the page in relation to the cart overrideButtonsInThePage : function(){ //for every 'add' buttons... $(document).on('click', '.ajax_add_to_cart_button', function(e){ e.preventDefault(); var idProduct = $(this).data('id-product'); if ($(this).prop('disabled') != 'disabled') ajaxCart.add(idProduct, null, false, this, $('#quantity_to_cart_'+idProduct+'').val()); }); ../themes/pos_optima-tools/js/product-list.tpl : {if ($product.id_product_attribute == 0 || (isset($add_prod_display) && ($add_prod_display == 1))) && $product.available_for_order && !isset($restricted_country_mode) && $product.minimal_quantity <= 1 && $product.customizable != 2 && !$PS_CATALOG_MODE} {if ($product.allow_oosp || $product.quantity > 0)} {if isset($static_token)} <input style="font-size:27px; text-align:center; width:30px;" type="text" name="qty" id="quantity_to_cart_{$product.id_product|intval}" value="1"/> <a class="button ajax_add_to_cart_button btn btn-default" href="{$link->getPageLink('cart',false, NULL, 'add=1&id_product={$product.id_product|intval}&token={$static_token}', false)|escape:'html':'UTF-8'}" rel="nofollow" title="{l s='Add to cart'}" data-id-product="{$product.id_product|intval}"> <span>{l s='Add to cart'}</span> </a> {else} <a class="button ajax_add_to_cart_button btn btn-default" href="{$link->getPageLink('cart',false, NULL, 'add=1&id_product={$product.id_product|intval}', false)|escape:'html':'UTF-8'}" rel="nofollow" title="{l s='Add to cart'}" data-id-product="{$product.id_product|intval}"> <span>{l s='Add to cart'}</span> </a> {/if} {else} <span class="button ajax_add_to_cart_button btn btn-default disabled"> <span>{l s='Add to cart'}</span> </span> {/if} {/if} Merci d'avance .
  2. Hi, i have a problem, a tried several times to resolve it but it persist and i believe it's about my prestashop theme : Like it said in the title, i want to add a quantity field in the product list, for that i following a lot of tutorials and read all the comments attached to, but after all these tries i think my problem come from my theme "optima tool". I trying to apply the vekia's tutorials here https://mypresta.eu/en/art/prestashop-16/quantity-product-list.html because i know he's an expert and know what he did but nothing work for me, i can add the input field, change the number in, but the ajax cart don't take the number added . My version is prestashop 1.6.1.5 The site is in prod but i test all the changes on a local server wamp. If somebody can help me, if you need the paste code of the default theme to compare i can provide it. Best regards /* * 2007-2014 PrestaShop * * NOTICE OF LICENSE * * This source file is subject to the Academic Free License (AFL 3.0) * that is bundled with this package in the file LICENSE.txt. * It is also available through the world-wide-web at this URL: * http://opensource.org/licenses/afl-3.0.php * If you did not receive a copy of the license and are unable to * obtain it through the world-wide-web, please send an email * to [email protected] so we can send you a copy immediately. * * DISCLAIMER * * Do not edit or add to this file if you wish to upgrade PrestaShop to newer * versions in the future. If you wish to customize PrestaShop for your * needs please refer to http://www.prestashop.com for more information. * * @author PrestaShop SA <[email protected]> * @copyright 2007-2014 PrestaShop SA * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) * International Registered Trademark & Property of PrestaShop SA */ $(document).ready(function(){ ajaxCart.overrideButtonsInThePage(); $(document).on('click', '.block_cart_collapse', function(e){ e.preventDefault(); ajaxCart.collapse(); }); $(document).on('click', '.block_cart_expand', function(e){ e.preventDefault(); ajaxCart.expand(); }); var cart_qty = 0; var current_timestamp = parseInt(new Date().getTime() / 1000); if (typeof $('.ajax_cart_quantity').html() == 'undefined' || (typeof generated_date != 'undefined' && generated_date != null && (parseInt(generated_date) + 30) < current_timestamp)) ajaxCart.refresh(); else cart_qty = parseInt($('.ajax_cart_quantity').html()); /* roll over cart */ var cart_block = new HoverWatcher('#header .cart_block'); var shopping_cart = new HoverWatcher('#header .shopping_cart'); if ('ontouchstart' in document.documentElement) { $('.shopping_cart > a:first').on('click', function(e){ e.preventDefault(); }); $(document).on('touchstart', '#header .shopping_cart a:first', function(){ if ($(this).next('.cart_block:visible').length) $("#header .cart_block").stop(true, true).slideUp(450); else $("#header .cart_block").stop(true, true).slideDown(450); e.preventDefault(); e.stopPropagation(); }); } else $("#header .shopping_cart a:first").hover( function(){ if (ajaxCart.nb_total_products >= 0 || cart_qty > 0) $("#header .cart_block").stop(true, true).slideDown(450); }, function(){ setTimeout(function(){ if (!shopping_cart.isHoveringOver() && !cart_block.isHoveringOver()) $("#header .cart_block").stop(true, true).slideUp(450); }, 200); } ); $("#header .shopping_cart").hover( function(){ }, function(){ setTimeout(function(){ if (!shopping_cart.isHoveringOver()) $("#header .cart_block").stop(true, true).slideUp(450); }, 200); } ); /* $("#header .cart_block").hover( function(){ }, function(){ setTimeout(function(){ if (!shopping_cart.isHoveringOver()) $("#header .cart_block").stop(true, true).slideUp(450); }, 200); } ); */ $(document).on('click', '.delete_voucher', function(e){ e.preventDefault(); $.ajax({ type: 'POST', headers: { "cache-control": "no-cache" }, async: true, cache: false, url:$(this).attr('href') + '?rand=' + new Date().getTime() }); $(this).parent().parent().remove(); if ($('body').attr('id') == 'order' || $('body').attr('id') == 'order-opc') { if (typeof(updateAddressSelection) != 'undefined') updateAddressSelection(); else location.reload(); } }); $(document).on('click', '#cart_navigation input', function(e){ $(this).prop('disabled', 'disabled').addClass('disabled'); $(this).closest("form").get(0).submit(); }); $(document).on('click', '#layer_cart .cross, #layer_cart .continue, .layer_cart_overlay', function(e){ e.preventDefault(); $('.layer_cart_overlay').hide(); $('#layer_cart').fadeOut('fast'); }); $('#columns #layer_cart, #columns .layer_cart_overlay').detach().prependTo('#columns'); }); //JS Object : update the cart by ajax actions var ajaxCart = { nb_total_products: 0, //override every button in the page in relation to the cart overrideButtonsInThePage : function(){ //for every 'add' buttons... $(document).on('click', '.ajax_add_to_cart_button', function(e){ e.preventDefault(); var idProduct = $(this).data('id-product'); if ($(this).prop('disabled') != 'disabled') ajaxCart.add(idProduct, null, false, this, $('#quantity_to_cart_'+idProduct+'').val()); }); //for product page 'add' button... $(document).on('click', '#add_to_cart button', function(e){ e.preventDefault(); ajaxCart.add( $('#product_page_product_id').val(), $('#idCombination').val(), true, null, $('#quantity_wanted').val(), null); }); //for 'delete' buttons in the cart block... $(document).on('click', '.cart_block_list .ajax_cart_block_remove_link', function(e){ e.preventDefault(); // Customized product management var customizationId = 0; var productId = 0; var productAttributeId = 0; var customizableProductDiv = $($(this).parent().parent()).find("div[data-id^=deleteCustomizableProduct_]"); var idAddressDelivery = false; if (customizableProductDiv && $(customizableProductDiv).length) { var ids = customizableProductDiv.data('id').split('_'); if (typeof(ids[1]) != 'undefined') { customizationId = parseInt(ids[1]); productId = parseInt(ids[2]); if (typeof(ids[3]) != 'undefined') productAttributeId = parseInt(ids[3]); if (typeof(ids[4]) != 'undefined') idAddressDelivery = parseInt(ids[4]); } } // Common product management if (!customizationId) { //retrieve idProduct and idCombination from the displayed product in the block cart var firstCut = $(this).parent().parent().data('id').replace('cart_block_product_', ''); firstCut = firstCut.replace('deleteCustomizableProduct_', ''); ids = firstCut.split('_'); productId = parseInt(ids[0]); if (typeof(ids[1]) != 'undefined') productAttributeId = parseInt(ids[1]); if (typeof(ids[2]) != 'undefined') idAddressDelivery = parseInt(ids[2]); } // Removing product from the cart ajaxCart.remove(productId, productAttributeId, customizationId, idAddressDelivery); }); }, // try to expand the cart expand : function(){ if ($('.cart_block_list').hasClass('collapsed')) { $('.cart_block_list.collapsed').slideDown({ duration: 450, complete: function(){ $(this).addClass('expanded').removeClass('collapsed'); } }); // save the expand statut in the user cookie $.ajax({ type: 'POST', headers: { "cache-control": "no-cache" }, url: baseDir + 'modules/blockcart/blockcart-set-collapse.php' + '?rand=' + new Date().getTime(), async: true, cache: false, data: 'ajax_blockcart_display=expand', complete: function(){ $('.block_cart_expand').fadeOut('fast', function(){ $('.block_cart_collapse').fadeIn('fast'); }); } }); } }, // try to collapse the cart collapse : function(){ if ($('.cart_block_list').hasClass('expanded')) { $('.cart_block_list.expanded').slideUp('slow', function(){ $(this).addClass('collapsed').removeClass('expanded'); }); // save the expand statut in the user cookie $.ajax({ type: 'POST', headers: { "cache-control": "no-cache" }, url: baseDir + 'modules/blockcart/blockcart-set-collapse.php' + '?rand=' + new Date().getTime(), async: true, cache: false, data: 'ajax_blockcart_display=collapse' + '&rand=' + new Date().getTime(), complete: function(){ $('.block_cart_collapse').fadeOut('fast', function(){ $('.block_cart_expand').fadeIn('fast'); }); } }); } }, // Fix display when using back and previous browsers buttons refresh : function(){ $.ajax({ type: 'POST', headers: { "cache-control": "no-cache" }, url: baseUri + '?rand=' + new Date().getTime(), async: true, cache: false, dataType : "json", data: 'controller=cart&ajax=true&token=' + static_token, success: function(jsonData) { ajaxCart.updateCart(jsonData); } }); }, // Update the cart information updateCartInformation : function (jsonData, addedFromProductPage){ ajaxCart.updateCart(jsonData); //reactive the button when adding has finished if (addedFromProductPage) { $('#add_to_cart button').removeProp('disabled').removeClass('disabled'); if (!jsonData.hasError || jsonData.hasError == false) $('#add_to_cart button').addClass('added'); else $('#add_to_cart button').removeClass('added'); } else $('.ajax_add_to_cart_button').removeProp('disabled'); }, // close fancybox updateFancyBox : function (){}, // add a product in the cart via ajax add : function(idProduct, idCombination, addedFromProductPage, callerElement, quantity, whishlist){ if (addedFromProductPage && !checkCustomizations()) { if (!!$.prototype.fancybox) $.fancybox.open([ { type: 'inline', autoScale: true, minHeight: 30, content: '<p class="fancybox-error">' + fieldRequired + '</p>' } ], { padding: 0 }); else alert(fieldRequired); return; } emptyCustomizations(); //disabled the button when adding to not double add if user double click if (addedFromProductPage) { $('#add_to_cart button').prop('disabled', 'disabled').addClass('disabled'); $('.filled').removeClass('filled'); } else $(callerElement).prop('disabled', 'disabled'); if ($('.cart_block_list').hasClass('collapsed')) this.expand(); //send the ajax request to the server $.ajax({ type: 'POST', headers: { "cache-control": "no-cache" }, url: baseUri + '?rand=' + new Date().getTime(), async: true, cache: false, dataType : "json", data: 'controller=cart&add=1&ajax=true&qty=' + ((quantity && quantity != null) ? quantity : '1') + '&id_product=' + idProduct + '&token=' + static_token + ( (parseInt(idCombination) && idCombination != null) ? '&ipa=' + parseInt(idCombination): ''), success: function(jsonData,textStatus,jqXHR) { // add appliance to whishlist module if (whishlist && !jsonData.errors) WishlistAddProductCart(whishlist[0], idProduct, idCombination, whishlist[1]); if (!jsonData.hasError) { window.parent.ajaxCart.updateCartInformation(jsonData, addedFromProductPage); if (jsonData.crossSelling) $('.crossseling').html(jsonData.crossSelling); if (idCombination) $(jsonData.products).each(function(){ if (this.id != undefined && this.id == parseInt(idProduct) && this.idCombination == parseInt(idCombination)) window.parent.ajaxCart.updateLayer(this); }); else $(jsonData.products).each(function(){ if (this.id != undefined && this.id == parseInt(idProduct)) window.parent.ajaxCart.updateLayer(this); }); if (contentOnly) parent.$.fancybox.close(); } else { if (addedFromProductPage) $('#add_to_cart button').removeProp('disabled').removeClass('disabled'); else $(callerElement).removeProp('disabled'); } }, error: function(XMLHttpRequest, textStatus, errorThrown) { var error = "Impossible to add the product to the cart.<br/>textStatus: '" + textStatus + "'<br/>errorThrown: '" + errorThrown + "'<br/>responseText:<br/>" + XMLHttpRequest.responseText; if (!!$.prototype.fancybox) $.fancybox.open([ { type: 'inline', autoScale: true, minHeight: 30, content: '<p class="fancybox-error">' + error + '</p>' }], { padding: 0 }); else alert(error); //reactive the button when adding has finished if (addedFromProductPage) $('#add_to_cart button').removeProp('disabled').removeClass('disabled'); else $(callerElement).removeProp('disabled'); } }); }, //remove a product from the cart via ajax remove : function(idProduct, idCombination, customizationId, idAddressDelivery){ //send the ajax request to the server $.ajax({ type: 'POST', headers: { "cache-control": "no-cache" }, url: baseUri + '?rand=' + new Date().getTime(), async: true, cache: false, dataType : "json", data: 'controller=cart&delete=1&id_product=' + idProduct + '&ipa=' + ((idCombination != null && parseInt(idCombination)) ? idCombination : '') + ((customizationId && customizationId != null) ? '&id_customization=' + customizationId : '') + '&id_address_delivery=' + idAddressDelivery + '&token=' + static_token + '&ajax=true', success: function(jsonData) { ajaxCart.updateCart(jsonData); if ($('body').attr('id') == 'order' || $('body').attr('id') == 'order-opc') deleteProductFromSummary(idProduct+'_'+idCombination+'_'+customizationId+'_'+idAddressDelivery); }, error: function() { var error = 'ERROR: unable to delete the product'; if (!!$.prototype.fancybox) { $.fancybox.open([ { type: 'inline', autoScale: true, minHeight: 30, content: error } ], { padding: 0 }); } else alert(error); } }); }, //hide the products displayed in the page but no more in the json data hideOldProducts : function(jsonData){ //delete an eventually removed product of the displayed cart (only if cart is not empty!) if ($('.cart_block_list:first dl.products').length > 0) { var removedProductId = null; var removedProductData = null; var removedProductDomId = null; //look for a product to delete... $('.cart_block_list:first dl.products dt').each(function(){ //retrieve idProduct and idCombination from the displayed product in the block cart var domIdProduct = $(this).data('id'); var firstCut = domIdProduct.replace('cart_block_product_', ''); var ids = firstCut.split('_'); //try to know if the current product is still in the new list var stayInTheCart = false; for (aProduct in jsonData.products) { //we've called the variable aProduct because IE6 bug if this variable is called product //if product has attributes if (jsonData.products[aProduct]['id'] == ids[0] && (!ids[1] || jsonData.products[aProduct]['idCombination'] == ids[1])) { stayInTheCart = true; // update the product customization display (when the product is still in the cart) ajaxCart.hideOldProductCustomizations(jsonData.products[aProduct], domIdProduct); } } //remove product if it's no more in the cart if (!stayInTheCart) { removedProductId = $(this).data('id'); if (removedProductId != null) { var firstCut = removedProductId.replace('cart_block_product_', ''); var ids = firstCut.split('_'); $('dt[data-id="' + removedProductId + '"]').addClass('strike').fadeTo('slow', 0, function(){ $(this).slideUp('slow', function(){ $(this).remove(); // If the cart is now empty, show the 'no product in the cart' message and close detail if($('.cart_block:first dl.products dt').length == 0) { $("#header .cart_block").stop(true, true).slideUp(200); $('.cart_block_no_products:hidden').slideDown(450); $('.cart_block dl.products').remove(); } }); }); $('dd[data-id="cart_block_combination_of_' + ids[0] + (ids[1] ? '_'+ids[1] : '') + (ids[2] ? '_'+ids[2] : '') + '"]').fadeTo('fast', 0, function(){ $(this).slideUp('fast', function(){ $(this).remove(); }); }); } } }); } }, hideOldProductCustomizations : function (product, domIdProduct){ var customizationList = $('ul[data-id="customization_' + product['id'] + '_' + product['idCombination'] + '"]'); if(customizationList.length > 0) { $(customizationList).find("li").each(function(){ $(this).find("div").each(function(){ var customizationDiv = $(this).data('id'); var tmp = customizationDiv.replace('deleteCustomizableProduct_', ''); var ids = tmp.split('_'); if ((parseInt(product.idCombination) == parseInt(ids[2])) && !ajaxCart.doesCustomizationStillExist(product, ids[0])) $('div[data-id="' + customizationDiv + '"]').parent().addClass('strike').fadeTo('slow', 0, function(){ $(this).slideUp('slow'); $(this).remove(); }); }); }); } var removeLinks = $('.deleteCustomizableProduct[data-id="' + domIdProduct + '"]').find('.ajax_cart_block_remove_link'); if (!product.hasCustomizedDatas && !removeLinks.length) $('div[data-id="' + domIdProduct + '"]' + ' span.remove_link').html('<a class="ajax_cart_block_remove_link" rel="nofollow" href="' + baseUri + '?controller=cart&delete=1&id_product=' + product['id'] + '&ipa=' + product['idCombination'] + '&token=' + static_token + '"> </a>'); if (product.is_gift) $('div[data-id="' + domIdProduct + '"]' + ' span.remove_link').html(''); }, doesCustomizationStillExist : function (product, customizationId){ var exists = false; $(product.customizedDatas).each(function(){ if (this.customizationId == customizationId) { exists = true; // This return does not mean that we found nothing but simply break the loop return false; } }); return (exists); }, //refresh display of vouchers (needed for vouchers in % of the total) refreshVouchers : function (jsonData){ if (typeof(jsonData.discounts) == 'undefined' || jsonData.discounts.length == 0) $('.vouchers').hide(); else { $('.vouchers tbody').html(''); for (i=0;i<jsonData.discounts.length;i++) { if (parseFloat(jsonData.discounts[i].price_float) > 0) { var delete_link = ''; if (jsonData.discounts[i].code.length) delete_link = '<a class="delete_voucher" href="'+jsonData.discounts[i].link+'" title="'+delete_txt+'"><i class="icon-remove-sign"></i></a>'; $('.vouchers tbody').append($( '<tr class="bloc_cart_voucher" data-id="bloc_cart_voucher_'+jsonData.discounts[i].id+'">' +' <td class="quantity">1x</td>' +' <td class="name" title="'+jsonData.discounts[i].description+'">'+jsonData.discounts[i].name+'</td>' +' <td class="price">-'+jsonData.discounts[i].price+'</td>' +' <td class="delete">' + delete_link + '</td>' +'</tr>' )); } } $('.vouchers').show(); } }, // Update product quantity updateProductQuantity : function (product, quantity){ $('dt[data-id=cart_block_product_' + product.id + '_' + (product.idCombination ? product.idCombination : '0')+ '_' + (product.idAddressDelivery ? product.idAddressDelivery : '0') + '] .quantity').fadeTo('fast', 0, function(){ $(this).text(quantity); $(this).fadeTo('fast', 1, function(){ $(this).fadeTo('fast', 0, function(){ $(this).fadeTo('fast', 1, function(){ $(this).fadeTo('fast', 0, function(){ $(this).fadeTo('fast', 1); }); }); }); }); }); }, //display the products witch are in json data but not already displayed displayNewProducts : function(jsonData){ //add every new products or update displaying of every updated products $(jsonData.products).each(function(){ //fix ie6 bug (one more item 'undefined' in IE6) if (this.id != undefined) { //create a container for listing the products and hide the 'no product in the cart' message (only if the cart was empty) if ($('.cart_block:first dl.products').length == 0) { $('.cart_block_no_products').before('<dl class="products"></dl>'); $('.cart_block_no_products').hide(); } //if product is not in the displayed cart, add a new product's line var domIdProduct = this.id + '_' + (this.idCombination ? this.idCombination : '0') + '_' + (this.idAddressDelivery ? this.idAddressDelivery : '0'); var domIdProductAttribute = this.id + '_' + (this.idCombination ? this.idCombination : '0'); if ($('dt[data-id="cart_block_product_' + domIdProduct + '"]').length == 0) { var productId = parseInt(this.id); var productAttributeId = (this.hasAttributes ? parseInt(this.attributes) : 0); var content = '<dt class="unvisible" data-id="cart_block_product_' + domIdProduct + '">'; var name = $.trim($('<span />').html(this.name).text()); name = (name.length > 12 ? name.substring(0, 10) + '...' : name); content += '<a class="cart-images" href="' + this.link + '" title="' + name + '"><img src="' + this.image_cart + '" alt="' + this.name +'"></a>'; content += '<div class="cart-info"><div class="product-name">' + '<span class="quantity-formated"><span class="quantity">' + this.quantity + '</span> x </span><a href="' + this.link + '" title="' + this.name + '" class="cart_block_product_name">' + name + '</a></div>'; if (this.hasAttributes) content += '<div class="product-atributes"><a href="' + this.link + '" title="' + this.name + '">' + this.attributes + '</a></div>'; if (typeof(freeProductTranslation) != 'undefined') content += '<span class="price">' + (parseFloat(this.price_float) > 0 ? this.priceByLine : freeProductTranslation) + '</span></div>'; if (typeof(this.is_gift) == 'undefined' || this.is_gift == 0) content += '<span class="remove_link"><a rel="nofollow" class="ajax_cart_block_remove_link" href="' + baseUri + '?controller=cart&delete=1&id_product=' + productId + '&token=' + static_token + (this.hasAttributes ? '&ipa=' + parseInt(this.idCombination) : '') + '"> </a></span>'; else content += '<span class="remove_link"></span>'; content += '</dt>'; if (this.hasAttributes) content += '<dd data-id="cart_block_combination_of_' + domIdProduct + '" class="unvisible">'; if (this.hasCustomizedDatas) content += ajaxCart.displayNewCustomizedDatas(this); if (this.hasAttributes) content += '</dd>'; $('.cart_block dl.products').append(content); } //else update the product's line else { var jsonProduct = this; if($.trim($('dt[data-id="cart_block_product_' + domIdProduct + '"] .quantity').html()) != jsonProduct.quantity || $.trim($('dt[data-id="cart_block_product_' + domIdProduct + '"] .price').html()) != jsonProduct.priceByLine) { // Usual product if (!this.is_gift) $('dt[data-id="cart_block_product_' + domIdProduct + '"] .price').text(jsonProduct.priceByLine); else $('dt[data-id="cart_block_product_' + domIdProduct + '"] .price').html(freeProductTranslation); ajaxCart.updateProductQuantity(jsonProduct, jsonProduct.quantity); // Customized product if (jsonProduct.hasCustomizedDatas) { customizationFormatedDatas = ajaxCart.displayNewCustomizedDatas(jsonProduct); if (!$('ul[data-id="customization_' + domIdProductAttribute + '"]').length) { if (jsonProduct.hasAttributes) $('dd[data-id="cart_block_combination_of_' + domIdProduct + '"]').append(customizationFormatedDatas); else $('.cart_block dl.products').append(customizationFormatedDatas); } else { $('ul[data-id="customization_' + domIdProductAttribute + '"]').html(''); $('ul[data-id="customization_' + domIdProductAttribute + '"]').append(customizationFormatedDatas); } } } } $('.cart_block dl.products .unvisible').slideDown(450).removeClass('unvisible'); var removeLinks = $('dt[data-id="cart_block_product_' + domIdProduct + '"]').find('a.ajax_cart_block_remove_link'); if (this.hasCustomizedDatas && removeLinks.length) $(removeLinks).each(function(){ $(this).remove(); }); } }); }, displayNewCustomizedDatas : function(product){ var content = ''; var productId = parseInt(product.id); var productAttributeId = typeof(product.idCombination) == 'undefined' ? 0 : parseInt(product.idCombination); var hasAlreadyCustomizations = $('ul[data-id="customization_' + productId + '_' + productAttributeId + '"]').length; if (!hasAlreadyCustomizations) { if (!product.hasAttributes) content += '<dd data-id="cart_block_combination_of_' + productId + '" class="unvisible">'; if ($('ul[data-id="customization_' + productId + '_' + productAttributeId + '"]').val() == undefined) content += '<ul class="cart_block_customizations" data-id="customization_' + productId + '_' + productAttributeId + '">'; } $(product.customizedDatas).each(function(){ var done = 0; customizationId = parseInt(this.customizationId); productAttributeId = typeof(product.idCombination) == 'undefined' ? 0 : parseInt(product.idCombination); content += '<li name="customization"><div class="deleteCustomizableProduct" data-id="deleteCustomizableProduct_' + customizationId + '_' + productId + '_' + (productAttributeId ? productAttributeId : '0') + '"><a rel="nofollow" class="ajax_cart_block_remove_link" href="' + baseUri + '?controller=cart&delete=1&id_product=' + productId + '&ipa=' + productAttributeId + '&id_customization=' + customizationId + '&token=' + static_token + '"></a></div>'; // Give to the customized product the first textfield value as name $(this.datas).each(function(){ if (this['type'] == CUSTOMIZE_TEXTFIELD) { $(this.datas).each(function(){ if (this['index'] == 0) { content += ' ' + this.truncatedValue.replace(/<br \/>/g, ' '); done = 1; return false; } }) } }); // If the customized product did not have any textfield, it will have the customizationId as name if (!done) content += customizationIdMessage + customizationId; if (!hasAlreadyCustomizations) content += '</li>'; // Field cleaning if (customizationId) { $('#uploadable_files li div.customizationUploadBrowse img').remove(); $('#text_fields input').attr('value', ''); } }); if (!hasAlreadyCustomizations) { content += '</ul>'; if (!product.hasAttributes) content += '</dd>'; } return (content); }, updateLayer : function(product){ $('#layer_cart_product_title').text(product.name); $('#layer_cart_product_attributes').text(''); if (product.hasAttributes && product.hasAttributes == true) $('#layer_cart_product_attributes').html(product.attributes); $('#layer_cart_product_price').text(product.price); $('#layer_cart_product_quantity').text(product.quantity); $('.layer_cart_img').html('<img class="layer_cart_img img-responsive" src="' + product.image + '" alt="' + product.name + '" title="' + product.name + '" />'); var n = parseInt($(window).scrollTop()) + 'px'; $('.layer_cart_overlay').css('width','100%'); $('.layer_cart_overlay').css('height','100%'); $('.layer_cart_overlay').show(); $('#layer_cart').css({'top': n}).fadeIn('fast'); crossselling_serialScroll(); }, //genarally update the display of the cart updateCart : function(jsonData){ //user errors display if (jsonData.hasError) { var errors = ''; for (error in jsonData.errors) //IE6 bug fix if (error != 'indexOf') errors += $('<div />').html(jsonData.errors[error]).text() + "\n"; if (!!$.prototype.fancybox) $.fancybox.open([ { type: 'inline', autoScale: true, minHeight: 30, content: '<p class="fancybox-error">' + errors + '</p>' } ], { padding: 0 }); else alert(errors); } else { ajaxCart.updateCartEverywhere(jsonData); ajaxCart.hideOldProducts(jsonData); ajaxCart.displayNewProducts(jsonData); ajaxCart.refreshVouchers(jsonData); //update 'first' and 'last' item classes $('.cart_block .products dt').removeClass('first_item').removeClass('last_item').removeClass('item'); $('.cart_block .products dt:first').addClass('first_item'); $('.cart_block .products dt:not(:first,:last)').addClass('item'); $('.cart_block .products dt:last').addClass('last_item'); } }, //update general cart informations everywhere in the page updateCartEverywhere : function(jsonData){ $('.ajax_cart_total').text($.trim(jsonData.productTotal)); if (parseFloat(jsonData.shippingCostFloat) > 0) $('.ajax_cart_shipping_cost').text(jsonData.shippingCost); else if (typeof(freeShippingTranslation) != 'undefined') $('.ajax_cart_shipping_cost').html(freeShippingTranslation); $('.ajax_cart_tax_cost').text(jsonData.taxCost); $('.cart_block_wrapping_cost').text(jsonData.wrappingCost); $('.ajax_block_cart_total').text(jsonData.total); $('.ajax_block_products_total').text(jsonData.productTotal); $('.ajax_total_price_wt').text(jsonData.total_price_wt); if (parseFloat(jsonData.freeShippingFloat) > 0) { $('.ajax_cart_free_shipping').html(jsonData.freeShipping); $('.freeshipping').fadeIn(0); } else if (parseFloat(jsonData.freeShippingFloat) == 0) $('.freeshipping').fadeOut(0); this.nb_total_products = jsonData.nbTotalProducts; if (parseInt(jsonData.nbTotalProducts) > 0) { $('.ajax_cart_no_product').hide(); $('.ajax_cart_quantity').text(jsonData.nbTotalProducts); $('.ajax_cart_quantity').fadeIn('slow'); $('.ajax_cart_total').fadeIn('slow'); if (parseInt(jsonData.nbTotalProducts) > 1) { $('.ajax_cart_product_txt').each( function (){ $(this).hide(); }); $('.ajax_cart_product_txt_s').each( function (){ $(this).show(); }); } else { $('.ajax_cart_product_txt').each( function (){ $(this).show(); }); $('.ajax_cart_product_txt_s').each( function (){ $(this).hide(); }); } } else { $('.ajax_cart_quantity, .ajax_cart_product_txt_s, .ajax_cart_product_txt, .ajax_cart_total').each(function(){ $(this).hide(); }); $('.ajax_cart_no_product').show('slow'); } } }; function HoverWatcher(selector) { this.hovering = false; var self = this; this.isHoveringOver = function(){ return self.hovering; } $(selector).hover(function(){ self.hovering = true; }, function(){ self.hovering = false; }) } function crossselling_serialScroll() { if (!!$.prototype.bxSlider) $('#blockcart_caroucel').bxSlider({ minSlides: 2, maxSlides: 4, slideWidth: 178, slideMargin: 20, moveSlides: 1, infiniteLoop: false, hideControlOnEnd: true, pager: false }); }
  3. Alors j'ai pu regler entre guillemet le problème en definissant les variables au debut de mon fichier "product.js" en ajoutant : var currencyFormat = 2; aroundvar currencySign = '€'; aroundvar currencyBlank = 1; Ces informations correspondent aux données de ma table "ps_currency" et sont déjà rentrées donc j'en deduis que quelque part dans mon fichier "product.js" , "product.php" ou "product.tpl" une fonction ou une variable récuperant les données de ma table ne fonctionne plus, si une âme charitable vois laquelle cible les données de cette table et pouvait me la renseigner ca m'aiderait beaucoup . Sinon si le bout de code peux aider quelqu'un c'est deja bien .. je vous remet l'erreur d'origine si quelqu'un a un problème similaire pour l'aider Uncaught ReferenceError: currencyFormat is not definedaround at updatePrice (product.js:812)around at updateDisplay (product.js:666)around at findCombination (product.js:497)around at HTMLDocument.<anonymous> (product.js:128)around at j (jquery-1.11.0.min.js:2)around at Object.fireWith [as resolveWith] (jquery-1.11.0.min.js:2)around at Function.ready (jquery-1.11.0.min.js:2)around at HTMLDocument.K (jquery-1.11.0.min.js:2)
  4. Bonjour, Me voici confronté à un problème embêtant, lorsque que je suis sur ma page produit mon menu horizontal ne fonctionne plus et dans la console d'erreur j'obtiens " Uncaught ReferenceError: currencyFormat is not defined " C'est un problème que je n'avais pas il y a une semaine j'ai donc essayé de recréer des version local sous WAMP ultérieures et toutes celles ci ont le problème sauf que lorsque qu'un produit n'a pas de déclinaison ça refonctionne. Si quelqu'un voit d'ou le problème peut venir..
  5. Salut poisson, tu as essayé d'automatiser ton import via une tâche CRON ? tu aurais juste à upload ton fichier au bon endroit et ça se ferait tout seul avec une notification de démarrage en plus . Pour mon cas, ça sera la prochaine étape et puis après sans doute un ERP si tout va bien .
  6. Bonjour, Je reviens vers vous car mon dernier POST à été solutionné avec succès. Je voudrais effectué une mise a jour de mes stock par fichier CSV tous les soirs, pour ça j'ai trouvé et testé un script plutôt sympa, cependant celui ci dans sa version plus simple m'additionne les valeur des stock car pas de reinitialisation au démarrage et dans sa version amélioré tout se passe bien mais des fois le script fini en "Maximum execution time of 120 seconds exceeded". Alors je voudrais avoir votre aide pour savoir, si il y a moyen de modifier le fichier d'import CSV presta pour enlever les champs attributs et valeur en obligatoire pour passer par le BO pour faire la mise a jour ( et savoir du coup si celui m'additionnerait les valeurs comme dans la première version du script ou si il réinitialiserait avant ) ou si il y a un moyen de modifier le script pour une exécution plus rapide, au lieu de passer par un array pour réinitialiser les valeur de stock a 0, par exemple faire un update de la valeur ps_stock_available quantity a 0 comme je l'ai fait pour out_of_stock pour les passer toutes à "par default voir preference". ou si sur OVH je peux modifier le max_execution_time pour l'augmenter en sachant que j'ai tester en local sur WAMP et que ça n'a pas changé le message qui est a 120 seconds alors que reglé sur 600 seconds (peut être il y a t il un fichier de config interne a prestashop pour ça et si le cas est ce qu il est judicieux de le modifier ?). Merci d'avance pour vos retours .
  7. Re, bah apparemment ça a marché grâce a ton astuce Alex, j'ai plus de doublons, que ce soit en déclinaison ou en quantité. Un grand merci à toi !
  8. Salut, j'essaye ça de suite et je reviens vers toi pour te dire si ça a marché. Merci pour ton aide !
  9. update: j'ai trouvé un moyen de supprimer toutes les déclinaisons en trop rapidement si ca peux aider quelqu'un. Je suis allé dans la base de données, dans la table ps_product_attribute, et j'ai cliqué sur la colonne default_on jusqu'à que ce soit classé par valeur " NULL" ensuite j'ai sélectionné toutes les cases via le bouton tout cocher en bas ( il y avait par tranche de 500, 2 pages et 8 lignes ) j'ai tenté au debut un delete par requete SQL mais je pense qu'il faut cibler chaque ID un a un car en ciblant NULL aucune passait ( d'ailleurs si quelqu'un a une solution pour ca je suis preneur, car ca serait plus simple un DELETE * FROM 'ps_product_attribute' WHERE 'default_on' = NULL mais ca ne fonctionne pas ). Cependant malgré cela, j'ai toujours des doublons ID_product dans ma table ps_stock_available dont a peu pres 700 a valeur 0 sur la colonne id_product_attribute, ce qui amène aussi a des valeur doublées garder en mémoire par le système. Si avec ces précisions mon problème parle a quelqu'un j'ai toujours besoin d'un coup de main .( ou si j'ai pu aider une personne a nettoyer ses doublons tant mieux ) Merci d'avance.
  10. Bonsoir, J'ai recherché une solution dans les sujets existants et sur google mais rien de bien concluant. Je sus confronté à un problème lors d'un import de déclinaison : Lors de l'import de mes déclinaison (découpé en 6 parties car trop de produits pour un seul fichier) mes premiers produits affichent la bonne quantité cependant a partir d'un certain point certaines déclinaison s'importe en double et me double la quantité, j'avais commencer a supprimer la déclinaison de trop de chaque produits concerné mais il y a un trop grand nombre de produits soumis à ce problème et j'aimerais en plus comprendre ce qui se passe . J'ai essayé de regarder dans le fichier CSV mais je ne vois rien de suspect, Lors de l'import de mon premier fichier je supprime les déclinaison existante en cochant la case réservé à cet effet. Mes imports de déclinaisons contiennent une colonne ID produit, une colonne attribut en contenant 3, une colonne valeur avec les 3 valeur, et une url pour l'image. Le seul élément perturbateur que je verrais serais le fait qu'un des attribut est parfois vide mais les produits impactés sont tous deux avec l'attribut présent. ex.: 1575; Couleur:color:2, Capacite:radio:1, libelle:radio:0; NOIR:2, 6500p:1, Compatible:0, URL de l'image l'import se déroule bien avec validation du BO presta (sauf lorsque un champs est vide pour l'attribut capacité ) et mes images sont bien importées. Si vous pouviez me donner un coup de pouce, ou m'indiquer un sujet qui a deja traité de ce sujet ca serait très apprécier . merci
  11. Bonjour, après quelques recherches sur le forum je viens vers vous en quête de réponse. je souhaiterais que lorsqu'on arrive dans ma liste de produit (classée par catégorie) à la place de l'image du produit ou voit l'image de sa catégorie . Donc en somme, remplacer toutes les images produit par les image catégorie correspondante, j'ai essayer de manipuler l'appel à la balise img dans product_list.tpl pour cibler celui de la categorie mais pour l'instant rien de concret. Je vous serais reconnaissant de m'aider ou de m'indiquer un sujet que j'aurais éventuellement raté contenant des éléments de réponse . merci
  12. Désolé j'ai du mal m'exprimer.. En fait un même produit a 4 prix différents en fonction du niveau d'importance du client . Par exemple je veux acheter une tablette de chocolat si je fais parti du groupe 1 elle sera a 10€ si je fais parti du groupe 2 elle sera a 8€ etc .. mais les remise ne sont pas applicable car poucentage de ristourne variable. Mon fichier CSV contient 4 prix pour chaque produit correspondant chacun a un groupe de client.
  13. Bonjour, après de multiple recherche je viens vers vous pour essayer de trouver une solution. -Je crée une boutique pour un client ou le prix des produits dépend de quel groupe client ils font partis, jusque la ça va, seul hic c'est que le prix fixé est a la louche ( pas de pourcentage appliqués) car le prix de certain produit dépendent de leur succès ou de la veille concurrentielle effectuée par le client. -pour remplir le catalogue je dispose d'un fichier CSV ou il y a a part les autres champs 4 champs prix, un pour chaque groupe ( groupe1, groupe2, groupe3, groupe4). Il y aurait il un module ou un moyen de contourner le système et d'appliquer le prix de base que je veux pour chaque groupe client. Merci d'avance.
×
×
  • Create New...