Bonjour Nicolas,
merci pour votre réponse.
J'ai bien fait la modif dans show_quantity, ca marche très bien, et c'est plus propre que le script que j'avait commencé :
// QUANTITY FIELD MIN PER ORDER
$(document).ready(function () {
// Fonction pour valider et corriger les quantités
const validateAndCorrectQuantities = () => {
$("input[data-hk-qty-min]").each(function () {
const $input = $(this); // Champ actuel
const minStep = parseFloat($input.data("hk-qty-min")); // Récupérer le step (data-hk-qty-min)
let value = parseFloat($input.val()) || 0; // Quantité saisie
// Supprimer tout ancien message d'infobulle
$input.next(".quantity-tooltip").remove();
if (value % minStep !== 0) {
// Calcul de la quantité valide (arrondie à la valeur supérieure)
const correctedValue = Math.ceil(value / minStep) * minStep;
// Mettre à jour l'input avec la valeur corrigée
$input.val(correctedValue);
// Ajouter une infobulle à côté de l'input
const message = `
<div class="quantity-tooltip" style="
position: absolute;
background: #fff3f3;
color: red;
border: 1px solid red;
border-radius: 5px;
padding: 5px 10px;
font-size: 0.9em;
z-index: 1000;
white-space: nowrap;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
cursor: pointer;
">
${value} n'est pas une quantité autorisée. Ce produit est vendu par ${minStep}.
La quantité a été arrondie à ${correctedValue}.
</div>
`;
$input.after(message);
// Positionner la tooltip au bon endroit
const inputPosition = $input.position();
const inputHeight = $input.outerHeight();
$input.next(".quantity-tooltip").css({
top: inputPosition.top + inputHeight + 5 + "px",
left: inputPosition.left + "px",
});
}
});
};
// Événement : Validation et correction lors de la saisie
$("input[data-hk-qty-min]").on("blur", function () {
validateAndCorrectQuantities();
});
// Événement : Validation et correction lors de clics sur les boutons (+/-)
$("button").on("click", function () {
// Vérifie si le clic modifie la quantité
if ($(this).hasClass("increment") || $(this).hasClass("decrement")) {
validateAndCorrectQuantities();
}
});
// Événement : Supprimer l'infobulle au clic sur celle-ci
$(document).on("click", ".quantity-tooltip", function () {
$(this).remove();
});
});
J'avais aussi modifié les
<div class="hikashop_product_quantity_change_div_plus_regrouped">
<a class="hikashop_product_quantity_field_change_plus hikashop_product_quantity_field_change <?php echo $css_button; ?>"
href="#" data-hk-qty-mod="1"
onclick="return window.hikashop.updateQuantity(this, '<?php echo $id; ?>');">+</a>
</div>
<div class="hikashop_product_quantity_change_div_minus_regrouped">
<a class="hikashop_product_quantity_field_change_minus hikashop_product_quantity_field_change <?php echo $css_button; ?>"
href="#" data-hk-qty-mod="-1"
onclick="return window.hikashop.updateQuantity(this, '<?php echo $id; ?>');">–</a>
</div>
en
<div class="hikashop_product_quantity_change_div_plus_regrouped">
<a class="hikashop_product_quantity_field_change_plus hikashop_product_quantity_field_change <?php echo $css_button; ?>"
href="#" data-hk-qty-mod="<?php echo $min_quantity; ?>"
onclick="return window.hikashop.updateQuantity(this, '<?php echo $id; ?>');">+</a>
</div>
<div class="hikashop_product_quantity_change_div_minus_regrouped">
<a class="hikashop_product_quantity_field_change_minus hikashop_product_quantity_field_change <?php echo $css_button; ?>"
href="#" data-hk-qty-mod="-<?php echo $min_quantity; ?>"
onclick="return window.hikashop.updateQuantity(this, '<?php echo $id; ?>');">–</a>
</div>
ca je le garde
par contre le script que j'avais commencé incluait aussi le panier, j'ai tenté de faire le même type de modif dans layout quantity mais sans succès