====== 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|}}