[Résolu] Affichage moyenne de vote

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Bonjour,

je travaille actuellement sur un site type annuaire sur lequel les utilisateurs peuvent laisser des notes (évaluations) sur des fiches.

Ma config: Drupal 7.7, views-7.x-3.0-rc1, votingapi-7.x-2.4, fivestar-7.x-2.x-dev notamment

Dans un premier temps j'ai créer un type de contenu Avis rattaché à mon node principal et qui permet aux utilisateurs de laisser des avis avec des notes d'appréciations (via des champs CCK de type entier).

Jusque là tout va bien, j'arrive à stoker ces données et à les restituées par une vue contextualisée (pour afficher les notes relatives au node/à la fiche consulté).

Or je souhaiterai pourvoir présenter des informations agrégées sur ces votes: moyenne pour chaque note, nombre de vote, ... là aussi bien évidemment contextualisé

Normalement, le module view dans sa version 3 pour drupal 7 permet cette chose

Le hic, c'est que je n'y arrive pas
Il doit y avoir quelque chose qui m’échappe.
J'applique bien un contextal filter de la même manière que sur mes vues simples (sans agrégation).
Je mets "use aggregation" à oui ... peut être pas avec le bon paramètre (j'avoue ne pas bien comprendre ce qui est demandé)
je sélectione le champ que je veux agréger et là aussi j'ai des problèmes avec les paramètres

Si quelqu'un a déjà mis en oeuvre cette solution et peut m'expliquer ...?

Question complémentaire:
A force de chercher sur ce sujet j'ai découvert le module fivestar (qui permet la notation avec l'utilisation d'un widget graphique assez sympa).
Le problème c'est qu'il ne règle pas ma question de moyenne ...

Merci de votre aide

Version de Drupal : 
Tags : 

Les fonctions d'agrégation de Views 3 permettent d'influer sur la clause GROUP BY des requêtes SQL que Views exécute.

Donc, pour chaque champ de la requête, il faut choisir la fonction à appliquer. Par exemple, ce sera Average pour le champ note, et "Group results together" pour les autres.

Mais bien sûr cela dépend du contexte d'exécution de la vue et de ce qu'il y d'autre à afficher sur la page.

Une autre approche serait d'utiliser du code dans preprocess_node, de requêter les infos dont tu as besoin pour faire les calculs et de les afficher dans une variable maison. C'est moins beau qu'une vue qui fonctionne bien, mais ça peut simplifier les choses.

Merci pour ces propositions

effectivement mon objectif est plutôt de bien faire fonctionner le module views que de faire du code (surtout que je ne suis pas très bon).

en fait je cherche à avoir un mode d'emploi ou tuto me permettant de bien savoir ce qu'il faut faire.
J'ai beaucoup appris à l'aide de tuto mais là j'en trouve pas qui explique bien comment faire.

Et pourtant ça semble assez trivial comme résultat attendu, faire une vue qui affiche la moyenne du champ "note" du type de contenu "avis" lié par une node reference au type de contenu "fiche".

Je créé donc une vue block avec:
* filtre: contenu de type 'avis' et 'publié'
* contextual filter: nore reference de ma fiche qui apparait dans 'avis' avec un 'provide default value' de type 'Content ID from URL'
(nb sur ce point j'ai pas trop d'inquiétude puisque je l'utilise dans une vue détail qui affiche la liste des avis et des notes, c'est à dire vue non agrégée)

et là je veux faire mon agregation, c'est à dire que je veux faire la moyenne du champ note pour tous les avis sur une fiche

  • je change donc use aggregation pour faire des aggregation
    là j'obtiens des aggregation settings pour pas mal de paramétrage de la vue

globalement il faut que j'arrive à dire: appliquer la fonction 'average' au champs 'note' et dire que la rupture s'effectue sur le node reference (le group by)

  • je rajoute donc dans la selection le champ 'note' sur lequel j'applique le type d'agrégation 'average'
    jusque là ça semble cohérent
    ensuite je choisi la group column 'value' pour dire d'appliquer la fonction average sur la colonne value du champ note (là aussi cela me semble cohérent.

si je m’arrête là, j'obtiens un résultat pas satisfaisant puisqu'il affiche rien à coté du label de ma requête de moyenne.

j'ai vérifié et la colonne value du champ note est en int(11) donc normalement la fonction average devrait bien s'appliquer (j'espère)

reste le group by, je sais pas s'il est fait ou pas

est que quelqu'un sait comment afficher la requete sql générée par views?

j'ai trouvé comment afficher la requête sql exécutée:

dans structure/views , aller dans l'onglet paramètres (au lieu de la liste des vues) et il y a un paramètre permettant d'afficher le sql lors de la preview

bon, ça me permet de voir un peu ce qui est fait, mais j'ai toujours pas de solution pour mon agrégation

si quelqu'un sait faire ....

TROUVE!

enfin presque ... ;)

j'arrive maintenant à faire une requête agrégée avec views 3!
je peux maintenant afficher ma moyenne!

SOLUTION: je suis passé de la version views-7.x-3.0-rc1 à la version de dev views-7.x-3.x-dev dans laquelle il semble qu'un sertain nombre de bugs soient fixés.

reste plus qu'à voir comment implémenter le widget fivestar pour afficher le résultat

RESOLU

bon, ben ce fut simple pour le fivestar.

lorsqu'on applique la fonction average à un champ défini comme rating, le widget d'affichage fivestar est disponible dans le paramétrage du champ dans la vue

donc finger in the nose

Au fait complément de solution concernant l’agrégation, le group by se code dans les critères de tri (sort criteria)