Jump to content

[Prestashop 1.6x] Déclinaisons et données structurées


Gu1llaume

Recommended Posts

Bonjour,

Comment gérez vous une page produit avec des des déclinaisons pour que les données structurées soient à jour (surtout le prix et la disponibilité) ?

J'ai  modifié le product.js et ajouté un truc du genre  :

$('#our_price_display').attr('content',formatCurrency(priceWithDiscountsDisplay, currencyFormat, currencySign, currencyBlank)).trigger('change');

en dessous de :

$('#our_price_display').text(formatCurrency(0, currencyFormat, currencySign, currencyBlank)).trigger('change');

Ça marche bien dans les navigateurs, mais Google n'en tient pas compte il n'a pas l'air d'utiliser le javascript dans son outils de test de donnés structurées...

Si vous faites le test avec une URL avec une déclinaison précise sélectionnée, vous verrez que ce n'est pas bon !  😞

Pour tester : https://search.google.com/structured-data/testing-tool/u/0/?hl=fr

Le but de ce message est que j'ai de nombreux refus/erreurs sur Google Shopping de type :

- Non-correspondance [prix] (exploration de page)

Ce qui est logique car il se base sur les données structurées...

Comment avez-vous fait chez vous ? :)

Merci

Link to comment
Share on other sites

ca pose surtout problème avec google Shopping.

Vu que les robots n'utilisent JAMAIS le javascript (car il n'utilisent pas de navigateurs) il faut modifier controleur et product.tpl pour envoyer les bonnes valeurs (prix, nom) après analyse de l'attribut demandé dans l'url.

 

Attention si vous avez des json-ld (pour facebook ou autre) car eux aussi envoient toujours la décli par défaut en haut de page et google récupère leur balise "price" en priorité.

Link to comment
Share on other sites

Ok merci ! Effectivement sans javascript on ne peut pas accéder directement  (même si on connait l'url précise avec le #) à la page produit d'une déclinaison. Je viens de tester et c'est toujours le prix de la déclinaison par défaut d'afficher...

Ça s'annonce costaud a résoudre 😕

Link to comment
Share on other sites

En 1.6 le problème ne se pose pas (ce qu'il y a après un # n'est pas interprété/pris en compte par les robots), en 1.7 ils ont mis l'id de l'attribut dans l'url donc celui-ci doit être ajusté systématiquement.

Link to comment
Share on other sites

En tête du product.tpl (modif de l'existant)

{if isset($smarty.get.bt_product_attribute)}
	{if !$priceDisplay || $priceDisplay == 2}
		{assign var='productPrice' value=$product->getPrice(true, $smarty.get.bt_product_attribute, 6)}
		{assign var='productPriceWithoutReduction' value=$product->getPriceWithoutReduct(false, $smarty.get.bt_product_attribute)}
	{elseif $priceDisplay == 1}
		{assign var='productPrice' value=$product->getPrice(false, $smarty.get.bt_product_attribute, 6)}
		{assign var='productPriceWithoutReduction' value=$product->getPriceWithoutReduct(true, $smarty.get.bt_product_attribute)}
	{/if}
{else}
	{if !$priceDisplay || $priceDisplay == 2}
		{assign var='productPrice' value=$product->getPrice(true, $smarty.get.price, 6)}
		{assign var='productPriceWithoutReduction' value=$product->getPriceWithoutReduct(false, $smarty.const.NULL)}
	{elseif $priceDisplay == 1}
		{assign var='productPrice' value=$product->getPrice(false, $smarty.const.NULL, 6)}
		{assign var='productPriceWithoutReduction' value=$product->getPriceWithoutReduct(true, $smarty.const.NULL)}
	{/if}
{/if}

 

  • Like 1
Link to comment
Share on other sites

oui enfin ce n'est pas du tout la question là...

Mais typiquement si une rupture de stock est constaté par Google en journée, après la syncho, c'est bien qu'il le sache pour ne plus afficher le produit ! Ça marche très bien sur les produits sans déclinaisons, mais pas ceux avec 😕

Link to comment
Share on other sites

J'ai essayé une boucle sur $combinations qui est disponible mais je n'ai pas accès a id_product_attribute dedans ... y'a juste l'id de la combinaison, le nom la quantité ... 

Je fais peut être une confusion entre "combinaison" et "attribute"

Link to comment
Share on other sites

La fonction que je vous ai indiquée est une statique donc utilisable partout, même dans le tpl.

Du coup, vous n'avez qu'à modifier le début de la boucle:

{assign var='available_quantity' value=$product->quantity}
{if isset($smarty.get.bt_product_attribute)}
    {assign var='available_quantity' value=StockAvailable::getQuantityAvailableByProduct($product->id,$smarty.get.bt_product_attribute)}
	{if !$priceDisplay || $priceDisplay == 2}
		{assign var='productPrice' value=$product->getPrice(true, $smarty.get.bt_product_attribute, 6)}
		{assign var='productPriceWithoutReduction' value=$product->getPriceWithoutReduct(false, $smarty.get.bt_product_attribute)}
	{elseif $priceDisplay == 1}
		{assign var='productPrice' value=$product->getPrice(false, $smarty.get.bt_product_attribute, 6)}
		{assign var='productPriceWithoutReduction' value=$product->getPriceWithoutReduct(true, $smarty.get.bt_product_attribute)}
	{/if}
{else}
	{if !$priceDisplay || $priceDisplay == 2}
		{assign var='productPrice' value=$product->getPrice(true, $smarty.get.price, 6)}
		{assign var='productPriceWithoutReduction' value=$product->getPriceWithoutReduct(false, $smarty.const.NULL)}
	{elseif $priceDisplay == 1}
		{assign var='productPrice' value=$product->getPrice(false, $smarty.const.NULL, 6)}
		{assign var='productPriceWithoutReduction' value=$product->getPriceWithoutReduct(true, $smarty.const.NULL)}
	{/if}
{/if}

Et remplacer les $product->quantity par $available_quantity dans le reste du tpl

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

Merci beaucoup !

J'ai juste remplacé (qui me retournait l'ID du stock et non la quantité)

{assign var='available_quantity' value=StockAvailable::getStockAvailableIdByProductId($product->id,$smarty.get.bt_product_attribute)}

par

{assign var='available_quantity' value=StockAvailable::getQuantityAvailableByProduct($product->id,$smarty.get.bt_product_attribute)}

ça fonctionne comme je le souhaite :)

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