Jump to content

Calcul des prix selon quantité


Recommended Posts

Bonjour à tous,

 

J'ai mis en place sur mes fiches produits des petits boutons (+ et -) à la place du seul input pour gérer les quantités.

 

Jusqu'ici tout va bien !

 

Mais je souhaiterai que mes prix (our_price_display et old_price_display) se mettent à jour automatiquement lorsque l'internaute clique sur le + ou le -

 

Merci d'avance pour vos retours

Edited by SWITCHBOARD (see edit history)
Link to comment
Share on other sites

Bonjour,

 

Ca ne va peut être pas t'être d'une grande aide ce que je vais dire mais peut être devrais tu repérer la fonction Ajax qui fait la même chose dans le panier? Il te faudra utiliser quelque chose de très similaire dans ta fiche produit pour faire ce que tu veux.

Link to comment
Share on other sites

Quelle est la version de votre presta?

 

Dans le panier, rien ne change? Ou bien le prix total par produit change mais pas le prix unitaire?

 

Car ici, en 1.5.3, cela fonctionne correctement dans le panier sauf si mon produit a des prix spécifiques. Dans ce cas, quand je diminue ou augmente la quantité, le prix unitaire ne change pas selon les règles définient par les prix spécifiques. J'ai ouvert un sujet là dessus sur le forum mais je n'ai pas eu de retour pour le moment.

Link to comment
Share on other sites

PS 1.5.0.17

 

Avant mon intervention, seul la quantité changeait.

J'ai rajouter un reload en javascript pour recharger la page en même temps et cela fonctionne (en attendant de trouver mieux).

 

J'ai également des prix spécifiques (règles catalogue + prix dégressifs)

Link to comment
Share on other sites

Bonjour à tous,

 

J'avance mais la solution n'est pas fonctionnelle en l'état...

 

 

Voici mes bouts de code :

 

product.tpl (la partie quantité avec les boutons + et - )

  <!-- quantity wanted -->
  <p id="quantity_wanted_p"{if (!$allow_oosp && $product->quantity <= 0) OR $virtual OR !$product->available_for_order OR $PS_CATALOG_MODE} style="display: none;"{/if}>
  <label>{l s='Quantity :'}</label>
  <span class="btn-qty"><a href="#" class="btn-down">-</a></span>
  <input type="text" name="qty" id="quantity_wanted" onchange="javascript:{if !isset($groups)}updateDisplay(){else}updatePrice(){/if};" class="text" style="width:20px; text-align:center" value="{if isset($quantityBackup)}{$quantityBackup|intval}{else}{if $product->minimal_quantity > 1}{$product->minimal_quantity}{else}1{/if}{/if}" size="2" maxlength="3" {if $product->minimal_quantity > 1}onkeyup="checkMinimalQuantity({$product->minimal_quantity});"{/if} />
  <span class="btn-qty"><a href="#" class="btn-up">+</a></span>
  </p>

 

product.js (la partie qui est censée calculer le prix dynamiquement)

//update price
function updatePrice()
{
 var tax = (taxRate / 100) + 1;
 var taxExclPrice = (specific_price ? (specific_currency ? specific_price : specific_price * currencyRate) : productPriceTaxExcluded);
if (specific_price)
  var productPriceWithoutReduction = productPriceTaxExcluded * currencyRate;
 if (!displayPrice && !noTaxForThisProduct)
 {
  var productPrice = ps_round(taxExclPrice * tax, 2);
  if (specific_price)
   productPriceWithoutReduction = ps_round(productPriceWithoutReduction * tax, 2);
 }
 else
 {
  var productPrice = ps_round(taxExclPrice, 2);
  if (specific_price)
   productPriceWithoutReduction = ps_round(productPriceWithoutReduction, 2);
 }
 var reduction = 0;
 if (reduction_price || reduction_percent)
 {
  reduction = productPrice * (parseFloat(reduction_percent) / 100) + reduction_price;
  if (reduction_price && (displayPrice || noTaxForThisProduct))
   reduction = reduction / tax;
 }
 if (!specific_price)
  productPriceWithoutReduction = productPrice;
 productPrice -= reduction;

//get quantity
var quantity_wanted = document.getElementById("quantity_wanted").value;
var normal_price = productPriceWithoutReduction * parseInt(quantity_wanted);
var new_price = productPrice * parseInt(quantity_wanted);

$('#our_price_display').text(formatCurrency(new_price, currencyFormat, currencySign, currencyBlank));
$('#old_price_display').text(formatCurrency(normal_price, currencyFormat, currencySign, currencyBlank));
}

 

footer.tpl (pour le script des boutons)

<!-- on affiche le script uniquement si l'on se trouve sur la page produit   -->
{if $page_name eq 'product'}
{literal}
<script type="text/javascript">// <![CDATA[
   $(document).ready(function() {
    var btn = $(".btn-qty a");
    //on affiche les boutons +/-
    $(btn).css('display','block');
    $(btn).click(function() {
	    var $button = $(this);
	    var input_qtity = $('#quantity_wanted');
	    var qty_value=$(input_qtity).val();
	    var qty_min=parseFloat($('#minimal_quantity_label').html());
	    var qty_min_p = $('#minimal_quantity_wanted_p');
	    //on vérifie si le le produit ou la combinaison a une quantité minimum de commande
	    if($('#minimal_quantity_wanted_p').is(':hidden')){
		    var min=false;
	    }
	    else
	    {
		    var min=true;
	    }
	    //si le btn a la class btn-up, on est sur le btn +
	    if ($button.hasClass('btn-up')) {
		    var newVal = parseFloat(qty_value) + 1;
		    $(input_qtity).val(newVal);
		    $(qty_min_p).css('color','');
		    $(input_qtity).css('border', '');
	    }
	    else
	    {
		    //btn -
		    //condition pour vérifier que le champ est >= 1
		    if (qty_value - 1 >= 1) {
			    //minimum de commande et qtité >= mini de commande
			    if (min=true && qty_value - 1 >= qty_min) {
				    var newVal = parseFloat(qty_value) - 1;
				    $(input_qtity).val(newVal);
				    $(qty_min_p).css('color','');
				    $(input_qtity).css('border', '');
			    }
			    // qtité <= mini de commande
			    else if(min=true && qty_value - 1 <= qty_min)
			    {
				    $(qty_min_p).css('color','red');
				    $(input_qtity).css('border', '1px solid red');
			    }
		    }
	    }
	    return false;
    });
   });
// ]]></script>
{/literal}
{/if}

 

Si avec ces éléments, une âme charitable pouvait me débugger la chose... ^_^

Link to comment
Share on other sites

  • 9 months later...

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...