Jump to content
Salamandre

[RESOLU] Afficher Quantity discount sur product-list.tpl

Recommended Posts

Bonjour,

 

je cherche à afficher le prix le plus petit de Quantity Discount à la place du prix "de base" dans la page product-list.tpl de mon template.

 

Si quelqu'un à une idée...

 

Merci par avance et bonne fin d'après midi à tous.

Edited by Salamandre (see edit history)

Share this post


Link to post
Share on other sites

Bonjour, je reviens sur ma question, comment puis je faire pour appeler les fonctions de la classe SpecificPrice.php dans la page product-list.tpl ? Si quelqu'un avait une idée ça m'aiderai et ça aiderai surement d'autres personnes.

 

Merci par avance

Share this post


Link to post
Share on other sites

J'ai trouvé une solution, dans la fonction getProductProperties de la classe Product.php, juste avant :

 

self::$producPropertiesCache[$cacheKey] = $row;
return self::$producPropertiesCache[$cacheKey];

 

j'ai ajouté :

 

// PRIX MINI POUR AFFICHER LE PRIX LE PLUS PETIT DANS QUANTITE DISCOUNT
 $id_product = $row['id_product'];
 // Requete qui récupère le prix le plus petit
 $result = Db::getInstance()->Execute('
 SELECT *
 FROM `'._DB_PREFIX_.'specific_price`
 WHERE `id_product` = '.$id_product.' AND `price` = (SELECT MIN(price) FROM `'._DB_PREFIX_.'specific_price` WHERE `id_product` = '.$id_product.')');
 $result = mysql_fetch_array($result);

 // Affichage du prix le plus petit
 $row['prixMini'] =  Tools::displayPrice(Tools::convertPrice($result['price'], $currency), $currency);
 // Si pas de prix de reduction, afficher prix normal
 if ( $row['prixMini'] == 0) {
  $row['prixMini'] = $row['price_without_reduction'];
 }

 

et dans product-list.tpl j'ai ajouté pour l'affichage :

 

{$product.prixMini}

 

Si ça peut aider quelqu'un.

 

Bonne journée à tous.

Share this post


Link to post
Share on other sites

Bonjour à tous, le code de Salamandre fonctionne mais pas pour tout les types de réduction (seulement pour celle où on donne le Prix produit (HT) directement).

 

J'ai eu besoin de le faire pour un client donc voici mon code pour la version PrestaShop™ 1.4.7.3 (devrai fonctionner pour toutes les versions 1.4)

 

Cette modif fonctionne pour les réductions en pourcentage et en montant (celle où on ne donne par le prix final HT) aussi !

 

1) D'abord, j'ai copié la fonction formatQuantityDiscounts du controller ProductController et l'ai mise telle qu'elle dans la classe Product.php

 

2) Ensuite dans la classe Product.php j'ai remplacé

$row['specific_prices'] = $specific_prices;

 

par

 

$product = new Product((int)$row['id_product']);
$customer = new Customer((int)$cookie->id_customer);

$row['specific_prices'] = Product::formatQuantityDiscounts(SpecificPrice::getQuantityDiscounts((int)$row['id_product'], (int)Shop::getCurrentShop(), (int)$cookie->id_currency, (int)$cookie->id_country, (int)$customer->id_default_group), $product->getPrice(Product::$_taxCalculationMethod == PS_TAX_INC, false), (float)Tax::getProductTaxRate($row['id_product'], (int)$cart->{Configuration::get('PS_TAX_ADDRESS_TYPE')}));

 

Il faut aussi rajouter en haut de la fonction getProductProperties (celle qui est modifiée dans cette étape)

 

global $cart, $cookie;

 

3) Ensuite dans produt-list.tpl il faut mettre :

 

{assign var='start_price' value=$product.price_tax_exc}
{assign var="mini_price" value=$product.price_tax_exc}
{if !$priceDisplay}
 {assign var='start_price' value=$product.price}
 {assign var='mini_price' value=$product.price}
{/if}

{assign var="quantity_discounts" value=$product.specific_prices}

{section name=quantity_discount loop=$quantity_discounts step=-1}
 {if $quantity_discounts[quantity_discount].price != 0 OR $quantity_discounts[quantity_discount].reduction_type == 'amount'}					  
  {if $priceDisplay == 1}
   {assign var='prixProduct' value=($start_price - $quantity_discounts[quantity_discount].real_value|floatval)}

   {if $prixProduct < $mini_price}
	{assign var='mini_price' value=$prixProduct}
   {/if}
  {else}
   {assign var='prixProduct' value=($start_price - $quantity_discounts[quantity_discount].real_value|floatval)}

   {if $prixProduct < $mini_price}
	{assign var='mini_price' value=$prixProduct}
   {/if}
  {/if}
 {else}	  
  {if $priceDisplay == 1}
   {assign var='prixProduct' value=($start_price-($quantity_discounts[quantity_discount].real_value*$start_price/100)|floatval)}

   {if $prixProduct < $mini_price}
	{assign var='mini_price' value=$prixProduct}
   {/if}
  {else}
   {assign var='prixProduct' value=($start_price-($quantity_discounts[quantity_discount].real_value*$start_price/100)|floatval)}

   {if $prixProduct < $mini_price}
	{assign var='mini_price' value=$prixProduct}
   {/if}
  {/if}
 {/if}
{/section}

{convertPrice price=$mini_price|floatval}

 

{convertPrice price=$mini_price|floatval} permet d'afficher le prix avec la devise du client à la place du prix par défaut

 

J'espère que cela aura aidé quelqu'un.

Edited by luciep (see edit history)

Share this post


Link to post
Share on other sites

Bonjour pour l'étape 1:

 

Vous avez copiez le code entier? :

 

public function formatQuantityDiscounts($specificPrices, $price, $taxRate)
{
 foreach ($specificPrices AS $key => &$row)
 {
  $row['quantity'] = &$row['from_quantity'];
  // The price may be directly set
  if ($row['price'] != 0)
  {
   $cur_price = (Product::$_taxCalculationMethod == PS_TAX_EXC ? $row['price'] : $row['price'] * (1 + $taxRate / 100));
		    if ($row['reduction_type'] == 'amount')
	   $cur_price = Product::$_taxCalculationMethod == PS_TAX_INC ? $cur_price - $row['reduction'] : $cur_price - ($row['reduction'] / (1 + $taxRate / 100));
   else
    $cur_price = $cur_price * ( 1  - ($row['reduction']));
   $row['real_value'] = $price - $cur_price;
  }
  else
  {
		    global $cookie;
		    $id_currency = (int)$cookie->id_currency;
   if ($row['reduction_type'] == 'amount')
   {
		  $reduction_amount = $row['reduction'];
		  if (!$row['id_currency'])
			  $reduction_amount = Tools::convertPrice($reduction_amount, $id_currency);
	   $row['real_value'] = Product::$_taxCalculationMethod == PS_TAX_INC ? $reduction_amount : $reduction_amount / (1 + $taxRate / 100);
		    }
   else
		    {
    $row['real_value'] = $row['reduction'] * 100;
		    }
  }
  $row['nextQuantity'] = (isset($specificPrices[$key + 1]) ? (int)($specificPrices[$key + 1]['from_quantity']) : -1);
 }
 return $specificPrices;
}

 

Et ou avez-vous imbriquer ce code dans la classe product.php?

 

Merci d'avance pour votre réponse.

 

Cordialement.

Share this post


Link to post
Share on other sites

attention

dans produt-list.tpl

 

ce n'est pas OR

{section name=quantity_discount loop=$quantity_discounts step=-1}
	 {if $quantity_discounts[quantity_discount].price != 0 OR $quantity_discounts[quantity_discount].reduction_type == 'amount'}	

mais AND

{section name=quantity_discount loop=$quantity_discounts step=-1}
	 {if $quantity_discounts[quantity_discount].price != 0 AND $quantity_discounts[quantity_discount].reduction_type == 'amount'}	

Share this post


Link to post
Share on other sites

Bonjour, je cherche à faire la même modification sur une version 1.6, car la solution ci-dessus n'est pas compatible :)

Vous avez une idée pour que je puisse faire cela avec un overwrite de la classe Product !!

Merci

Share this post


Link to post
Share on other sites

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...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More