Jump to content

Problème utilisation API Produit avis vérifiés pour récupérer : nombre d'avis par produit et moyenne par produit


Recommended Posts

Bonjour,

Je suis entrain d'améliorer les micro-données envoyée à Google afin d'améliorer les résultats des test enrichis et j'ai quelques soucis pour récolter les avis avec "Aggregateating".

Je m'explique sur la page d'accueil de ma boutique j'ai des sliders qui présente un certains nombre de produits par catégories, c'est gérer par le module "featuredproducts".

J'ai donc ouvert le fichier product.tpl ( chemin : themes/lifestyle/modules/featuredproducts/view/templates/hook/product.tpl) dans ce dossier afin d'ajouter le code HTML pour y insérer les micro-données comme ceci :

 

<div itemprop="aggregateRating" itemscope itemtype="http://schema.org/AggregateRating">
                <meta itemprop="ratingValue" content="{$product_average_rate|default:'4.4'}" />
                <meta itemprop="reviewCount" content="{$product_review_count|default:'86'}" />
            </div>

(ps: la valeur default me permettait de testé afin de voir si quand je fais le test résultat enrichi ça remonter et oui, maintenant je dois récupérer depuis l'API par produit grâce aux variables)

 

J'ai donc crée un controller dans le dossier "featuredproducts" à la racine de mon presta sous le chemin /featuredproducts/controller/front/FeaturedProductsController.php

voici son contenu que j'ai fais :
 

<?php

class FeaturedProductsController extends ModuleFrontController
{
    public function initContent()
    {
        parent::initContent();

        // Récupération de l'ID du produit depuis les paramètres GET
        $productId = (int) Tools::getValue('id_product');

        // URL de l'API pour récupérer les données de notation
        $apiUrl = 'LIEN DE LAPI ICI' . $productId . '.json';

        // Initialisation des variables
        $rate = null;
        $count = null;
        $errorMessage = '';

        try {
            // Récupération des données depuis l'API
            $json = @file_get_contents($apiUrl);
            if ($json !== false) {
                $data = json_decode($json, true);
                if (json_last_error() === JSON_ERROR_NONE) {
                    // Extraction des données de moyenne et de sommes d'avis
                    $rate = isset($data['rate']) ? $data['rate'] : null;
                    $count = isset($data['count']) ? $data['count'] : null;
                } else {
                    $errorMessage = "JSON Decode Error: " . json_last_error_msg();
                }
            } else {
                $errorMessage = "API Request Error: Unable to retrieve data from " . $apiUrl;
            }
        } catch (Exception $e) {
            $errorMessage = "API Error: " . $e->getMessage();
        }

        // Assignation des données à Smarty pour l'affichage dans le template
        $this->context->smarty->assign([
            'product_average_rate' => $rate,
            'product_review_count' => $count,
            'api_error_message' => $errorMessage,
        ]);

        // Affichage du template correspondant
        $this->setTemplate('module:featuredproducts/views/templates/hook/product.tpl');
    }
}

 

Et malgré cela rien ne remonte.. Hors j'ai fais un petit script PHP sur le cotée pour tester l'API Produit qui elle me récupère les données sous la même logique :

<?php
// ID de produit valide pour le test
$productId = 32;
$apiUrl = 'URL DE LAPI PRODUIT' . $productId . '.json';

$json = @file_get_contents($apiUrl);
if ($json === false) {
    echo "API Request Error: Unable to retrieve data from " . $apiUrl;
} else {
    $data = json_decode($json, true);
    if (json_last_error() === JSON_ERROR_NONE) {
        echo "Rate: " . (isset($data['rate']) ? $data['rate'] : 'Not found') . "\n";
        echo "Count: " . (isset($data['count']) ? $data['count'] : 'Not found') . "\n";
    } else {
        echo "JSON Decode Error: " . json_last_error_msg();
    }
}

Le rendu sur le navigateur donne Rate: 4.8 Count: 5

 

Je vous remercie pour votre aide, je me gratte la tête depuis ce matin ! Arg, bonne journée tout le monde.
 

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