Attribuer des points à un article
Etude de cas
L'idée
Cela est utilisé notamment sur les sites
d'information collaboratifs, on clique sur une image pour indiquer que
l'on apprécie l'article, et les articles qui obtiennent le plus de
points vont en première page du site.
On va voir comment réaliser ce système de notation avec quelques
fonctions JavaScript et une feuille de style.
Pour cela on utilisera un fichier qui enregistrara le nombre de point obtenus
par l'article, portant le nom de la page avec l'extension .dat.
La feuille de style
Elle définit l'image qui contient le nombre de points:
.markstyle
{
font-family: "Trebuchet MS", Arial, sans;
font-size: 40px;
border-top:2px solid #0C0;
border-left:2px solid #0C0;
border-right:2px solid #060;
border-bottom:2px solid #060;
background-color:#0B0;
text-align:center;
width:64px;
color:#FFF;
padding-left:8px;
padding-right:8px;
}
On peut facilement modifier les couleurs, la police de caractère, la taille...
Le programme JavaScript
Quelque fonctions sont nécessaires pour récupérer le nombre de point dans un fichier et le sauver, ainsi que pour afficher ce nombre.
function read(url, fun, element)
Fonction Ajax appelée à chaque chargement de la page qui contient l'article à noter, avec le nom du compteur, la fonction initialize en callback et l'élément de la page pour l'affichage.
function writeFile(url)
La fonction writeFile complète la bibliothèque Ajax et permet
de passer des données à un script PHP qui va stocker le nombre
de points et autres données éventuelles.
function initialize(valeur, element)
C'est un callback, une fonction donnée en argument d'une fonction Ajax
qui lit le fichier de données. Dans cette démo il ne contient
que le nombre de points pour cette page.
function display(entier, element)
Cette fonction est appelée par la fonction mark et par le callback
initialize pour afficher le score.Le nombre de points est limité à 99 dans cette démo.
function mark(element)
La fonction principale qui est appelée quand on clique sur l'image.
Elle incrémente le nombre de votes affiché et utilise Ajax donner
le nom de la page à un script qui conserve le nombre de vote dans un
fichier. Elle appelle aussi la fonction display.
window.onload=function()
{
dataURL = changeExtension(location.href, ".dat");
var element = document.getElementById("mark");
read(dataURL, initialize, element);
}
Quand on charge la page, il faut que l'image s'affiche avec le nombre de points
obtenus jusque là. Ce sera accomplit par l'évènement
onload de window, auquel on associe la fonction ci-dessus qui utilise Ajax
pour lire le nombre de points conservé dans un fichier. DataURL est le nom de ce fichier, il est fabriqué à partir du nom de la page qui appelle la fonction.
Empêcher les votes multiples
Pour empêcher un même lecteur d'ajouter plus d'un point à l'article, on peut:
- Tester son adresse IP, l'ajouter dans une liste et ignorer les clics
venant d'une même addresse IP.
Mais l'inconvénent est que des adresses IP dynamiques sont utilisées par différents utilisateurs. - Installer des cookies sur les machines des utilisateurs.
Ici l'inconvénient est qu'il en faudrait pour chaque article et chaque visiteur qui aurait cliqué, on n'en sortirait pas. - Demander aux utilisateurs de s'enregistrer avant de marquer les articles.
Cela peut requérir aussi, pour empêcher les enregistrements
multiples, d'installer des cookies, mais un seul par utilisateur enregistré.
On peut ensuite gérer la liste des clics pour chaque utilisateur.
Télécharger
- Tous les fichiers requis sont inclus dans l'archive marks.zip.