Notation avec étoiles et possibilité de modification de la note

Description

Tout d'abord, je tiens à préciser que ce n'est pas moi qui ai créé cette source.
Mais je me suis permit de modifier la source, de la traduire et de l'améliorer.

La grosse amélioration est qu'il est possible au membre votant, de modifier son vote par la suite.

J'en viens à la description.
Les enregistrements se font par une table SQL.
_drawrating.php affiche la barre.
_config-rating.php contient quelques notes à lire et des configurations.
rpc.php modifie ou ajoute dans la table en passant pas AJAX.
db.php modifie ou ajoute dans la table sans passer par AJAX (si JS désactivé).
index.php sert uniquement d'exemple.
rating.js et behavior.js sert pour l'AJAX.
structure.sql contient la structure de la table SQL.

Source / Exemple :


<?php
//Affichage de la barre de notation
function rating_bar($id_serie, $units = '', $static = '')
{
//enregistrement de la page de notation
$_SESSION['referer'] = $_SERVER['SCRIPT_URL'];

//info
require('_config-rating.php');
	
//config variable
if (!$units) {$units = ETOILE_MAX;} //par défaut, affichage de 10 étoiles
if (!$static) {$static = FALSE;} // par défaut, activation des votes.

//on prend les infos propre à la série
$query = mysql_query('SELECT count(note) as count, sum(note) as total_value FROM '.$rating_tableName.' WHERE id_serie="'.$id_serie.'" ') or die('Error (1): '.mysql_error());
$numbers = mysql_fetch_assoc($query);

//calcul du nombre de votes
$count = $numbers['count'];

//somme des votes
$current_rating = $numbers['total_value'];

//singulier / pluriel
$tense = ($count <= 1) ? "vote" : "votes";

//On regarde si le membre à déja voté.
//si MOD = false on désactive les modification de vote
if (MOD == false) {
	$voted = mysql_fetch_array(mysql_query('SELECT id FROM '.$rating_tableName.' WHERE id_user="'.$id_user.'" AND id_serie="'.$id_serie.'" ')); 
}

//On calcul la taille de la barre de notation
$rating_width = @number_format($current_rating/$count,2)*$rating_unitwidth;
$rating1 = @number_format($current_rating/$count,1);
$rating2 = @number_format($current_rating/$count,2);

//Si on a choisi de désactiver les votes
if ($static == 'static')
{
	$static_rater = array();
	$static_rater[] .= "\n".'<div class="ratingblock">';
	$static_rater[] .= '<div id="unit_long'.$id_serie.'">';
	$static_rater[] .= '<ul id="unit_ul'.$id_serie.'" class="unit-rating" style="width:'.$rating_unitwidth*$units.'px;" style="text-align:center;">';
	$static_rater[] .= '<li class="current-rating" style="width:'.$rating_width.'px;">Actuellement '.$rating2.'/'.$units.'</li>';
	$static_rater[] .= '</ul>';
	$static_rater[] .= '<p class="static" style="text-align:center;">Note : <strong> '.$rating1.'</strong>/'.$units.' ('.$count.' '.$tense.')</p>';
	$static_rater[] .= '</div>';
	$static_rater[] .= '</div>'."\n\n";
	
	return join("\n", $static_rater);
}
else
{
	$rater ='';
	$rater.='<div class="ratingblock">';
	
	$rater.='<div id="unit_long'.$id_serie.'">';
	$rater.='  <ul id="unit_ul'.$id_serie.'" class="unit-rating" style="width:'.$rating_unitwidth*$units.'px;" style="text-align:center;">';
	$rater.='     <li class="current-rating" style="width:'.$rating_width.'px;">Actuellement '.$rating2.'/'.$units.'</li>';
	
	//boucle pour afficher le nombre d'étoiles voulues
	for ($ncount = 1; $ncount <= $units; $ncount++)
	{
		//si le membre n'a pas encore voté, on affiche la possibilité de voter
		if(!$voted or MOD == true)
		{
			$rater .= '<li><a href="db.php?j='.$ncount.'&amp;q='.$id_serie.'&amp;t='.$id_user.'&amp;c='.$units.'" title="'.$ncount.' sur '.$units.'" class="r'.$ncount.'-unit rater" rel="nofollow">'.$ncount.'</a></li>';
		}
	}
	
	$rater.='  </ul>';
	$rater.='  <p style="text-align:center;"';
	if($voted) //si membre a voté
	{ $rater.=' class="voted"';}
	$rater.='>Note : <strong> '.$rating1.'</strong>/'.$units.' ('.$count.' '.$tense.')';
	if($voted) //si membre a voté
	{ $rater.='<br/>Ma note : <strong> '.$voted['note'].'</strong>/'.$units.'';}
	$rater.='  </p>';
	$rater.='</div>';
	$rater.='</div>';
	return $rater;
}
}
?>

Conclusion :


Étant donné que c'est ma première source ici je suis ouvert à toutes les critiques pour pouvoir m'améliorer.

N'oubliez pas de configurer et lire le fichier _config-rating.php.

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.