Jump to content

Rating star


Recommended Posts

Salut à tous, j'utilise la derniere version de presta avec le theme madame. J'utilise le petit systeme de rating déja incorporer a prestashop, lorsque l'on commente un produit et je voudrais l'améliorer un peu.

 

Je me demandais si c'étais possible de faire afficher les rating des produits, mais en les affichant pas critere a la place de la note moyenne. Vous voyez ce que je veux dire, je voudrais faire afficher les étoiles moyenne du critere 1 et les étoiles moyenne du critere 2 en dessous.

 

Savez-vous si c'est jouable ou c'est peine perdu, c'est mon premier projet prestashop alors je suis pas tres callé avec les hook et tout ça, mais je suis programmeur alors je devrais comprendre vos explications.

 

Merci d'avance

J-Francois H

Link to comment
Share on other sites

Bonjour,

 

Ça demande quelques connaissances en dév, étant donné qu'il faut créer des variables pour les notations.

Je pense que ça doit être possible, en somme il faut que le client note plusieurs choses, ça ne m'as pas l'air impossible.

 

Mais avant ça par hasard, tu as déjà regardé si des modules peuvent faire une chose similaire ?

Parce que si tu trouve un module peu cher, autant le prendre que de perdre du temps sur une solution de 'bricolage'.

Link to comment
Share on other sites

ouais, ya des modules qui le font, mais ils sont plutot cher, dans les 75$ à 100$. Mais le client note déja plusieurs choses, j'ai deux critere de rating par produit et par defaut, la note moyenne des 2 critères est affichée, j'esperais qu'il y avais une variable pemettant d'aller récupérer un nombre (du genre 3,2/5 dépendant de la cote donnée par les clients, en fait) par critère. On obtenant un chiffre comme sa, je pourrais gérer combien d'étoiles faire afficher et c'est du tout cuit. 1/5 = une étoile, et ainsi de suite.

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

N'utilisant pas ce module personnellement, je suppose que ce que tu veux comme variable est en faite la note donnée par tel client sur tel critére.

----------------------------------------------

Exemple:

 

M.Dupont as noté le produit 'stylo bic' sur le critére 'durée de vie' ==> 5/10

 

Toi tu veux récuperer ton 5/10 pour pouvoir afficher 5 étoiles.

---------------------------------------------

Si c'est cela, ta valeur doit être stockée dans la BD (peut être).

Link to comment
Share on other sites

Les notes sont stockées dans la BD

tables :

ps_product_comments

ps_product_grade

ps_product_criterion

 

Les valeurs nécessaires sont :

Id_product_comment id_product grade

id_product_comment_criterion

id_product_comment_criterion_type

 

Le module s'appelle productcomments

Les fichiers tpl productcomments-extra.tpl productcomments.tpl

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

Tu dois aussi avoir un fichier php je présume,

 

Il faut donc faire une requête SQL pour aller chercher sur ta table ps_product_comments ton id_product_comment_id_product grade.

 

Une chose du genre SELECT Id_product_comment id_product grade,id_product_comment_criterion,id_product_comment_criterion_type

FROM ps_product_comments pc,ps_product_grade pg,ps_product_criterion pcri

WHERE pc.Id_product_comment id_product grade = pg.Id_product_comment id_product grade

...

 

Faut regarder les jointures de ces tables pour faire correctement la requête.

Tu stocke le résultat de ta requête dans une variable type tableau, avec un foreach tu parcours le tableau pour en extraire le nombre d'étoiles au final à afficher.

 

Enfin j’espère que c'est bien ça que tu veux :)

Link to comment
Share on other sites

Tu dois aussi avoir un fichier php je présume,

oui, ProductComment.php

 

@Blue_shadow tu trouveras peut-être ton bonheur dans la fuction :)

    public static function getAveragesByProduct($id_product, $id_lang)
   {
       /* Get all grades */
       $grades = ProductComment::getGradeByProduct((int)$id_product, (int)$id_lang);
       $total = ProductComment::getGradedCommentNumber((int)$id_product);
       if (!count($grades) || (!$total))
           return array();

       /* Addition grades for each criterion */
       $criterionsGradeTotal = array();
       $count_grades = count($grades);
       for ($i = 0; $i < $count_grades; ++$i)
           if (array_key_exists($grades[$i]['id_product_comment_criterion'], $criterionsGradeTotal) === false)
               $criterionsGradeTotal[$grades[$i]['id_product_comment_criterion']] = (int)($grades[$i]['grade']);
           else
               $criterionsGradeTotal[$grades[$i]['id_product_comment_criterion']] += (int)($grades[$i]['grade']);

       /* Finally compute the averages */
       $averages = array();
       foreach ($criterionsGradeTotal as $key => $criterionGradeTotal)
           $averages[(int)($key)] = (int)($total) ? ((int)($criterionGradeTotal) / (int)($total)) : 0;
       return $averages;
   }

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