====== Ecrire un widget générique de vote ======
Dans cet exercice vous serez amené à créer un widget générique permettant à un internaute de voter pour quelque chose.
===== Question 1 : Ecrire la classe Poll =====
Le widget prend 2 paramètres :
- **id** : correspond à l'identifiant du vote
- **path** : chemin de stockage des votes
Le widget possède 2 actions :
- **defaut** : Affichage du nombre de vote et d'un lien permettant de voter
- **poll** : Action permettant d'enregistrer un vote
__Conseil__ : Inutile d'inventer un système compliqué pour stocker et compter les votes :
// Compter des votes
if (file_exists($fichier)) $voix = filesize($fichier);
// Machine à voter
$fp = fopen($fichier, "a");
fwrite($fp, '.');
fclose($fp);
===== Question 2 : Ecrire les templates =====
Notre widget possède 2 actions donc 2 templates :
- **defaut.php.html** : affichage du nombre de vote et d'un bouton pour voter
- **poll.php.html** : permet éventuellement d'afficher la prise en compte du vote.
Pour être à la mode, le widget doit être AJAXisé. Lors d'un vote la page ne doit pas être rechargé et l'action de voter doit être asynchrone. Du coup le résultat de l'action //poll// ne doit pas être nécessairement affiché.
On prendra soin de séparer le code Javascript du code HTML. Tout le code Javascript sera regroupé dans un fichier **script.php.js**
__Aide__ : L'utilisation du framework Javascript Prototype est extrement simple à mettre en place grace au décorateur [[fr:doc:pxxo_widgets_javascript_prototype|Pxxo_Widgets_Javascript_Prototype]]
__Conseil__: Le but ici n'est pas d'apprendre à faire de l'Ajax. Voici comment déclencher l'action poll de l'objet tout en modifiant l'affichage.
new Ajax.Request('?=poll', {
method: 'get',
onSuccess: function(transport) {
$('').update('A voté').setStyle({ background: '#dfd' });
}});
===== Question 3 : Internationaliser =====
Utiliser la fonction **_po(...)** et le répertoire **i18n** pour rendre le widget multilangues.
__Aide__: Les fichiers de traductions ressemblent à ceci :
La correction de cet exercice est disponible ici :
{{fr:tutorials:exercises:poll.tar.gz|}}