Gu1llaume Posted March 15, 2020 Share Posted March 15, 2020 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 More sharing options...
Eolia Posted March 15, 2020 Share Posted March 15, 2020 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 More sharing options...
Gu1llaume Posted March 15, 2020 Author Share Posted March 15, 2020 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 More sharing options...
Eolia Posted March 15, 2020 Share Posted March 15, 2020 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 More sharing options...
Gu1llaume Posted March 15, 2020 Author Share Posted March 15, 2020 Donc en 1.6 c'est insoluble pour qu'une déclinaison avec un prix différents de la déclinaison par défaut soit accepté sur Google Shopping ? Link to comment Share on other sites More sharing options...
Eolia Posted March 15, 2020 Share Posted March 15, 2020 si vous avez le module de buisnesstech c'est assez facile à résoudre vu qu'il transmet l'id dans l'url à GoogleShopping Link to comment Share on other sites More sharing options...
Eolia Posted March 15, 2020 Share Posted March 15, 2020 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} 1 Link to comment Share on other sites More sharing options...
Gu1llaume Posted March 15, 2020 Author Share Posted March 15, 2020 Ha super merci, je vais étudier ça... Effectivement j'utilise le module de buisnesstech Link to comment Share on other sites More sharing options...
Gu1llaume Posted March 15, 2020 Author Share Posted March 15, 2020 ça marche ! Un grand merci pour votre aide, ça m'enlève une sacré épine du pied... Link to comment Share on other sites More sharing options...
Mediacom87 Posted March 15, 2020 Share Posted March 15, 2020 il y a 50 minutes, Eolia a dit : si vous avez le module de buisnesstech c'est assez facile à résoudre vu qu'il transmet l'id dans l'url à GoogleShopping Ah, parce que il y a des modules Google Shopping qui ne le font pas ? Link to comment Share on other sites More sharing options...
Eolia Posted March 15, 2020 Share Posted March 15, 2020 Je n'ai pas été étudier le fonctionnement des autres modules mais ayant le patch pour celui-ci sous la main je le communique^^ 1 Link to comment Share on other sites More sharing options...
Gu1llaume Posted March 15, 2020 Author Share Posted March 15, 2020 Vous n'auriez pas le même bout de code pour la disponibilité du produit par hasard ? :) Link to comment Share on other sites More sharing options...
Eolia Posted March 15, 2020 Share Posted March 15, 2020 Quand on vend sur GS il est conseillé d'avoir toujours les produits en stock (au autorisés hors-stock) autrement autant ne pas les envoyer. Link to comment Share on other sites More sharing options...
Gu1llaume Posted March 16, 2020 Author Share Posted March 16, 2020 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 More sharing options...
Eolia Posted March 16, 2020 Share Posted March 16, 2020 (edited) Allez, une piste Dans StockAvailable.php public static function getQuantityAvailableByProduct($id_product, $id_product_attribute = null, $id_shop = null) Edited March 16, 2020 by Eolia (see edit history) Link to comment Share on other sites More sharing options...
Gu1llaume Posted March 16, 2020 Author Share Posted March 16, 2020 Merci pour la piste... J'ai essayé mais je n'y arrive pas si j'arrivais juste a avoir la quantité dispo pour un id_attribut donné dans le product.tpl j'arriverais à m'en sortir... Link to comment Share on other sites More sharing options...
Eolia Posted March 16, 2020 Share Posted March 16, 2020 sérieux ? Vous avez essayé quoi ? Link to comment Share on other sites More sharing options...
Gu1llaume Posted March 16, 2020 Author Share Posted March 16, 2020 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 More sharing options...
Eolia Posted March 16, 2020 Share Posted March 16, 2020 (edited) 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 March 16, 2020 by Eolia (see edit history) Link to comment Share on other sites More sharing options...
Gu1llaume Posted March 16, 2020 Author Share Posted March 16, 2020 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 More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now