Jump to content

[RESOLU] - Modification dans product-list.tpl sans effet sur blockbestsellers 1.6


Recommended Posts

Bonjour à la communauté,

j'ai un prestashop 1.6 et pour répondre au attente de notre ami "Google", j'ai du faire des modifs sur mon product-list.tpl de mon thème.

Tout semblait fonctionner mais le blockbestsellers de la page d’accueil est réfractaire à une des modifications.

"Nombre à virgule flottante non valide dans la propriété "price" (dans "offers")" car la devise est accolée au montant dans le code lu par google!

Voici l'extrait du code de mon product-list.tpl:

 <div itemprop="offers" itemscope itemtype="http://schema.org/Offer" class="content_price">
        {if isset($product.show_price) && $product.show_price && !isset($restricted_country_mode)}
                        <span itemprop="price" content="{$product.price}" class="price product-price{if isset($product.specific_prices) && $product.specific_prices && isset($product.specific_prices.reduction) && $product.specific_prices.reduction > 0} product-price-new{/if}">

Voici le résultat dans le blockbestsellers  de la page d’accueil (content="99.00€"):

<div itemprop="offers" itemscope="" itemtype="http://schema.org/Offer" class="content_price"> <span itemprop="price" content="99.00€" class="price product-price">99.00€ </span><meta itemprop="priceCurrency" content="EUR">

Alors que les autres pages de catégorie affiche le prix correctement (content="99")

<div itemprop="offers" itemscope="" itemtype="http://schema.org/Offer" class="content_price"> <span itemprop="price" content="99" class="price product-price">99.00€ </span> 8.25€ par Kg<meta itemprop="priceCurrency" content="EUR"> 

Si quelqu'un a une piste?

Merci d'avance

 

Edited by Yvan07
Résolu (see edit history)
Link to comment
Share on other sites

bonjour @Eolia,

Je viens à l'instant de trouver la solution et oui le cache était bien purgé.

Le fichier blockbestsellers.php de mon module calcule le prix en fonction de la devise et des taxes de manière indépendante

protected function getBestSellers($params)
	{
		if (Configuration::get('PS_CATALOG_MODE'))
			return false;

		if (!($result = ProductSale::getBestSalesLight((int)$params['cookie']->id_lang, 0, (int)Configuration::get('PS_BLOCK_BESTSELLERS_TO_DISPLAY'))))
			return (Configuration::get('PS_BLOCK_BESTSELLERS_DISPLAY') ? array() : false);

		$currency = new Currency($params['cookie']->id_currency);
		$usetax = (Product::getTaxCalculationMethod((int)$this->context->customer->id) != PS_TAX_EXC);
		foreach ($result as &$row)
			$row['price'] = Tools::displayPrice(Product::getPriceStatic((int)$row['id_product'], $usetax), $currency);
		
		return $result;
	}

En commentant la zone du calcul du prix, l'affichage est pris en charge par mon fichier product-list.tpl

protected function getBestSellers($params)
	{
		if (Configuration::get('PS_CATALOG_MODE'))
			return false;

		if (!($result = ProductSale::getBestSalesLight((int)$params['cookie']->id_lang, 0, (int)Configuration::get('PS_BLOCK_BESTSELLERS_TO_DISPLAY'))))
			return (Configuration::get('PS_BLOCK_BESTSELLERS_DISPLAY') ? array() : false);

		/*$currency = new Currency($params['cookie']->id_currency);
		$usetax = (Product::getTaxCalculationMethod((int)$this->context->customer->id) != PS_TAX_EXC);
		foreach ($result as &$row)
			$row['price'] = Tools::displayPrice(Product::getPriceStatic((int)$row['id_product'], $usetax), $currency);
		*/
		return $result;
	}

Du coup mon affichage est correct (content="99")

<div itemprop="offers" itemscope="" itemtype="http://schema.org/Offer" class="content_price"> <span itemprop="price" content="99" class="price product-price">99.00€ </span><meta itemprop="priceCurrency" content="EUR"> 

Merci d'avoir pris le temps de me répondre 😉

Link to comment
Share on other sites

  • Yvan07 changed the title to [RESOLU] - Modification dans product-list.tpl sans effet sur blockbestsellers 1.6

En fait i vous commentez ce bloc, les prix seront en HT dans le bloc Meilleures ventes (celui affiché dans les colonnes gauche ou droite)

Il est préférable de modifier le code comme suit

protected function getBestSellers($params)
	{
		if (Configuration::get('PS_CATALOG_MODE'))
			return false;

		if (!($result = ProductSale::getBestSalesLight((int)$params['cookie']->id_lang, 0, (int)Configuration::get('PS_BLOCK_BESTSELLERS_TO_DISPLAY'))))
			return (Configuration::get('PS_BLOCK_BESTSELLERS_DISPLAY') ? array() : false);

		$currency = new Currency($params['cookie']->id_currency);
		$usetax = (Product::getTaxCalculationMethod((int)$this->context->customer->id) != PS_TAX_EXC);
		foreach ($result as &$row)
			$row['price_display'] = Tools::displayPrice(Product::getPriceStatic((int)$row['id_product'], $usetax), $currency);
		
		return $result;
	}

et de remplacer price par price_display dans le fichier blockbestsellers.tpl

                    {if !$PS_CATALOG_MODE}
                        <div class="price-box">
                            <span class="price">{convertPrice price=$product.price_display}</span>
                            {hook h="displayProductPriceBlock" product=$product type="price"}
                        </div>
                    {/if}

 

  • Thanks 1
Link to comment
Share on other sites

Merci @Eolia,

Je testerai tes modifications ce soir (préparation des commandes obligent), je suis certains que tes modifications sont plus propres que les miennes 😅.

Par contre, j'ai testé, les prix s'affichent bien ttc (en fonction du lieu de livraison).

Je te tiens au courant des changements.

Merci pour tout. 🙏

Link to comment
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...