Dans cet exercice vous serez amené à créer un widget générique permettant à un internaute de voter pour quelque chose.
Le widget prend 2 paramètres :
Le widget possède 2 actions :
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);
Notre widget possède 2 actions donc 2 templates :
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 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('?<?php echo $ClassID ?>=poll', { method: 'get', onSuccess: function(transport) { $('<?php echo $ClassID ?>').update('A voté').setStyle({ background: '#dfd' }); }});
Utiliser la fonction _po(…) et le répertoire i18n pour rendre le widget multilangues.
Aide: Les fichiers de traductions ressemblent à ceci :
<?php $GLOBALS['i18n']['label'] = 'traduction'; ?>
La correction de cet exercice est disponible ici :