afficher la moyenne etoile "avis" directement dans le catalogue

5 messages dans ce sujet

Posté(e) (modifié) · Signaler ce message

bonjour,

sur peel 8.0.1 

 

comment mettre la moyenne en étoile du module "AVIS"directement sur le catalogue et la fiche produits

apparemment c'est ceci qu'il faut mettre dans le tpl 

 

<b>{$STR_MODULE_AVIS_AVERAGE_RATING_GIVEN}</b> {for $foo=1 to $avisnote}<img src="{$star_src|escape:'html'}" alt="" />{/for}

 

Modifié (le) par neomega

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Bonjour,

Pour implémenter les avis de produits sur les pages de catégories, il faut modifier le fichier produits.tpl et ajouter le code PHP dans la fonction affiche_produits du fichier lib/fonctions/display_product.php

Le code PHP doit être repris de la fonction render_avis_public_list du fichier modules/avis/fonctions.php

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

bonjour,

merci pour cette information

j'ai mis le code dans lib/fonction/display_product.php

ligne 886

 

			/************************************************************************************************************************/
		$prodid= $product_object->id ;
		$type='produit';
		$sqlAvis = "SELECT a.*, u.civilite
			FROM peel_avis a
			INNER JOIN peel_utilisateurs u ON a.id_utilisateur = u.id_utilisateur AND " . get_filter_site_cond('utilisateurs', 'u') . "
			WHERE a.id_produit='" . intval($prodid) . "' AND a.etat='1' AND a.lang='" . nohtml_real_escape_string($_SESSION['session_langue']) . "'
			ORDER BY a.note DESC";
		$resAvis = query($sqlAvis);	
		
		if (num_rows($resAvis) > 0) {
		$are_results = true;
		$tpl->assign('are_results', true);
		$qid_avis = "SELECT AVG(note) AS average_rating
			FROM peel_avis
			WHERE";
		if ($type == 'produit') {
			$qid_avis .= " id_produit = '" . intval($prodid) . "'";
		} elseif ($type == 'annonce') {
			$qid_avis .= " ref = '" . intval($prodid) . "'";
		}
		$qid_avis .= " AND etat = '1'";

		$id = query($qid_avis);
		$note = fetch_assoc($id);
		$avisnote = number_format($note['average_rating'], 0);

		$tpl->assign('avisnote', $avisnote);
$tpl->assign('star_src', get_url('/images/star1.gif'));
		$tpl_results = array();
		$tpl_notation = array();
		$notation_array = array();
		$i = 0;
		while ($Avis = fetch_assoc($resAvis)) {
			// Compte le nombre de vote par note
			if (!isset($notation_array[$Avis['note']])) {
				$notation_array[$Avis['note']] = 0;
			}
			$notation_array[$Avis['note']]++;
			
			if (!empty($display_specific_note) && ($Avis['note'] != $display_specific_note)) {
				// Permet d'afficher une note seléctionnée en excluant les votes avec une autre note, tout en conservant le comptage du nombre total, et le calcul du nombre de vote par note
				continue;
			}
			if (!empty($Avis['pseudo'])) {
				$pseudo = String::html_entity_decode_if_needed($Avis['pseudo']);
			} else {
				$pseudo = String::html_entity_decode_if_needed($Avis['prenom']);
			}
			$tpl_results[] = array('i' => $i,
				'pseudo' => $pseudo,
				'date' => get_formatted_date($Avis['datestamp'], 'short', true),
				'avis' => $Avis['avis'],
				'note' => $Avis['note'],
				'id' => $Avis['id'],
				'allow_edit_and_suppr_avis' => vn($GLOBALS['site_parameters']['allow_edit_and_suppr_avis_by_owner']) && vn($_SESSION['session_utilisateur']['id_utilisateur']) == $Avis['id_utilisateur']
				);
			$i++;
		}
		$tpl->assign('results', $tpl_results);
		
		$total_vote = array_sum($notation_array);
		for($j=5;$j!=0;$j--) {
			// Affiche les votes par ordre décroissant. Utilisation d'un for et non pas un foreach pour permettre l'affichage des notes sans vote (et donc pas présent dans le tableau notation_array)
			$width = (vn($notation_array[$j]) / $total_vote) * 100;
			$tpl_notation[] = array('note' => $j,
				'nb_this_vote' => vn($notation_array[$j]),
				'width' => ceil($width),
				'link' => get_current_url(false) . '?prodid='.$prodid.'&display_specific_note='.$j
				);
		}
		$tpl->assign('notations', $tpl_notation);
		$tpl->assign('STR_MODULE_AVIS_AVERAGE_RATING_GIVEN', $GLOBALS['STR_MODULE_AVIS_AVERAGE_RATING_GIVEN']);
		$tpl->assign('display_nb_vote_graphic_view', vn($GLOBALS['site_parameters']['display_nb_vote_graphic_view']) && empty($ad_owner_opinion));
		$tpl->assign('module_avis_no_notation', vn($GLOBALS['site_parameters']['module_avis_no_notation']));
		$tpl->assign('all_results_url', get_current_url(false). '?prodid='.$prodid);
		$tpl->assign('total_vote', $total_vote);
	} else {
		$tpl->assign('are_results', false);
		$are_results = false;
		$tpl->assign('STR_MODULE_AVIS_AVERAGE_RATING_GIVEN',' pas de note');
	}
		
		
		/************************************************************************************************************************/

juste au dessus de :

 

	$j++;
			unset($product_object);
			$prods[] = $tmpProd;

		}

mais dans le catalogue sa m'affiche le résultat du dernier produits pour tous

 

image jointe : alors que seul "resto test" a deux note

 

 

merci par avance

test.jpg

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) (modifié) · Signaler ce message

test effectué aussi en mettant :

 $prodid= $prod['id'] ;

le tout sous :

    $j++;
            unset($product_object);
            $prods[] = $tmpProd;

        }
        

et j'ai mis en test :

$tpl->assign('id_prod',$prod['id']);

et l'id afficher sur tout les produits est le même

 

donc comment récupérer l'id pour chacun des produis

Modifié (le) par neomega

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

product_object->id doit être différent à chaque boucle, et vous initialisez déjà les tableaux $tpl_results = array(); $tpl_notation = array(); et $notation_array = array(); donc à priori le code fourni doit fonctionner, je ne vois pas de problème dans le code fourni de cette façon. Pour comprendre le problème il faut nécessairement investiguer plus en profondeur dans le code pour faire des tests avec la fonction var_dump par exemple.

Partager ce message


Lien à poster
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !


Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.


Connectez-vous maintenant

Twitter Advisto ecommerce

Facebook PEEL Shopping