Prestashop : détournement de minimum quantity en multiple
Vente de produits par multiple de quantité en détournant la fonctionnalité « quantité minimale » de Prestashop
sujet évoqué ici https://www.prestashop.com/forums/topic/228452-resolu-multiple-de-quantite-minimum/
Prestashop 1.5
PRODUITS
product.js remplacer dans function checkMinimalQuantity
if ($('#quantity_wanted').val() < minimal_quantity)
par
if ($('#quantity_wanted').val() % minimal_quantity !=0)
fonction preProcess() du CartController
cet ajout doit se faire après les lignes
// If no errors, process product addition
if (!$this->errors && $mode == 'add')
{
// collisage par qte min
if ((int)$this->id_product_attribute)
$minimal_quantity = Attribute::getAttributeMinimalQty((int)$this->id_product_attribute);
else
$minimal_quantity = $product->minimal_quantity;
if ($this->qty % $minimal_quantity != 0)
{
$this->errors[] = Tools::displayError('You can only add this quantity ('.$this->qty.') to your cart with a quantity multiple of '.$minimal_quantity);
}
// fin col par qte min
PANIER
pour que les boutons + - fonctionnent dans le panier en prenant en compte minimum.quantity en tant que multiple de (détourné de sa fonction première)
dans shopping-cart-product-line.tpl
j’attribue la valeur minimal_quantity à un input hidden
ajout de
{if $product.minimal_quantity > 0}
<input type="hidden" value="{$product.minimal_quantity}" name="par_quantite_{$product.id_product}_{$product.id_product_attribute}
{if isset($product.id_address_delivery)}_0_{$product.id_address_delivery|intval}{/if}" />{/if}
environ ligne 60 juste avant <input type="hidden"...
ensuite dans cart-summary.js
je récupère la valeur de l’input (par_quantite_id) que je substitue à qty
fonction upQuantity
ajout de var qty
upQuantity = function(id, qty)
{
var qty = $('input[name=par_quantite_'+id+']').val();
etc ..
fonction downQuantity
ajout de var qty
downQuantity = function(id, qty)
{
var val = $('input[name=quantity_'+id+']').val();
var newVal = val;
var qty = $('input[name=par_quantite_'+id+']').val();
etc ..
DÉCLINAISONS
en prenant en compte les quantités mini (multiple de) par déclinaison il faut faire une petite modif dans la fonction getAttributeMinimalQty
car dans le cas des attributs il faut overrider la fonction getAttributeMinimalQty de la classe Attribute et ajouter = après > sinon on obtient une division par zéro
Attribute::getAttributeMinimalQty retourne false -> if ($minimal_quantity >= 1) return (int)$minimal_quantity; return false;
normalement ça fonctionne
bon code
Prestashop 1.6
en cours de rédaction