Pour fonctionner correctement le script a besoin d'avoir accès à une base de données de type MySQL pour stocker les informations des signatures.
La table "guild_stat" sert à stocker les informations qui ont été parsées sur la page du ladder de Guildwars pour ne pas avoir à parser la page à chaque fois que l'ont veut créer/raffraichir une signatures.
Structure de la table "guild_stat" :
id tinyit(1) unsigned auto_increment primary_key
ranking varchar(8)
rating smallint(1) unsigned
wins smallint(1) unsigned
looses smallint(1) unsigned
date varchar(19)
Cette table est faite assez bizarrement, en effet elle ne contient que 2 entrées (2 lignes) :
- Une ligne pour les informations sauvegardées une fois par jours pour effectuer des stats (+x)
- Une ligne pour les informations qui ont été parsées.
La table "utilisateurs" sert à stocker les informations des signatures :
- Le nom du joueur.
- La date de son dernier changement de signature.
- Son adresse IP.
- Le nom du background qu'il a choisi.
Structure de la table "utilisateurs" :
id int(10) unsigned auto_increment primary_key
nom varchar(19)
date varchar(19)
ip varchar(15)
image varchar(255)
La table "signatures" est utilisée pour l'interface d'administration, elle permet de stocker :
- Le nom du background de la signature.
- La classe à laquelle elle se réfère.
"La classe à laquelle..." ce champ est en réalité utilisé pour l'affichage sur la page web pour créer sa signature. Les signatures sont affichées sur la page dynamiquement et classées par classe (Guerrier, Envoûteur, etc.).
Cette table peut ne pas être utilisée, si vous ne comptez pas faire d'interface d'administration pour ajouter de nouvelles signatures et si vous ne comptez pas afficher les signatures sur une page web dynamiquement à partir de la base de données.
Structure de la table "signatures" :
id int(10) unsigned auto_increment primary_key
nom varchar(255)
classe tinyint(1) unsigned
Pour créer une signature il n'y a besoin que d'une seule fonction : "CreateImage($nom,$img)"
Cette fonction prend en paramètre 2 chaînes de caractères :
- Un nom (le nom du joueur qui sera affiché sur la signature).
- Le nom du background qui sera utilisé pour créer la signature.
Dans mon cas, les backgrounds s'appelent : signature1, signature2, etc.
En réalité (dans le répertoire des backgrounds) ils s'appelent : signature1_jour.jpg, signature1_nuit.jpg, signature2_jour.jpg, signature_nuit.jpg, etc.
Le suffixe _jour.jpg et _nuit.jpg a été retiré lors de l'insertion dans la base car nous n'avons pas besoin de nous en occuper, le script choisira lui-même quelle version du background il veut utiliser (_jour.jpg, ou _nuit.jpg).
Ca peut paraître assez compliqué comme ça, mais tout ce qu'il faut retenir c'est que dans le répertoire des backgrounds il faut avoir des images nommées "signatureX_jour.jpg" et "signatureX_nuit.jpg" (X est le numéro de la signature) et dans le paramètre "$img" il faut avoir "signatureX" uniquement.
Déjà elle vérifie quelle heure il est et formate le nom du background qui sera utilisé :
- Après 20h elle ajoutera "_nuit.jpg" au nom de la signature passé en paramètre ("signature1" pour l'exemple) qui deviendra donc "signature1_nuit.jpg" !
- Après 8h elle ajoutera "_jour.jpg" au nom de la signature passé en paramètre ("signature1" pour l'exemple) qui deviendra donc "signature1_jour.jpg" !
Ensuite elle va appeler la fonction "GetGuildInfoFromDB()" qui va renvoyer un tableau contenant les informations stockées dans la base de données (rang, classement, victoires, défaites). (Ces informations sont par défaut mises-à-jour toutes les 10 minutes dans la base).
Après avoir récupéré les informations courantes dans la base de données elle va appeler la fonction "GetGuildStatsFromDB()" qui elle va renvoyer le même tableau que la fonction précédente, sauf que celui-ci contiendra les informations antérieurs, stockées dans la base (ces infos sont mises à jour une fois par jours à 20h, par défaut).
-> GetGuildInfoFromDB() correspond à la seconde ligne dans la table "guild_stat" (id=2 donc).
-> GetGuildStatsFromDB() correspond à la première ligne dans la table "guild_stat" (id=1 donc).
Notre petite fonction va ensuite fait un tas de petits calculs pour générer et formater le texte de sortie et fini par enregistrer la signature avec le background choisi, le nom du joueur, le nom de sa guilde ainsi que les informations du ladder la concernant sous le nom de : "$nom.jpg" tout simplement.
Comme il y a obligatoirement un espace au minimum dans le nom du joueur, tout les espaces sont remplacés par des underscores
"_". Ce qui donne pour moi "Bisous_Partout.jpg".
Le formulaire doit contenir au minimum 2 champs :
- Un champ contenant le nom du joueur (en général un <input type="text" ... />)
- Un groupe de champ contenant le numéro de chaque signature (en général un
<input type="radio" ... />)
Dans mon cas le groupe de champ des signatures a comme valeur : value="X" (X désignant le numéro de la signature).
Exemple : "signature1" aura comme numéro "1".
Tout en haut de votre page PHP il faut ajouter ce code :
<?php require("Includes/constantes.php"); require("Includes/MySQL_Class.php"); require("Includes/fonctions.php"); $bdd=new MySQL_Class(DATABASE,DOMAINE,IDENTIFIANT,MDP); $msg_type=0; if(isset($_POST['i_str_nom'])){ $nom=$_POST['i_str_nom']; if($nom!=""){ if(preg_match("!^[A-Z]{1}[a-z]* [A-Z]{1}[a-z]*!",$nom)){ $img="signature".$_POST['i_radio_sign']; CreateImage($nom,$img); AddToDB($nom,$img); $nom=preg_replace('! !','_',$nom); $msg_type=1; }else { $msg="Vous devez entrer un nom valide (majuscule à la première [...])."; $msg_type=2; } }else{ //Si le nom est vide $msg="Vous devez entrer un nom."; $msg_type=2; } } ?>
(J'ai volontairement retiré les commentaires, néanmoins ils sont présent dans la source)
La variable $msg contient le message qui va être affiché sur la page.
La variable $msg_type indique quel type de message on va devoir afficher :
0 = pas de message à afficher.
1 = message de réussite (dans ma page ça affiche un lien vers la signature du joueur).
2 = message d'erreur.
Pour adapter ce script à votre page il suffit de renommer $_POST['i_str_nom'] par le nom du champ contenant le nom du joueur
dans votre formulaire,
et $_POST['i_radio_sign'] par le nom du champ contenant le numéro de la signature choisie.
Vous pouvez aussi changer le prefixe des signatures à la ligne : $img="signature".$_POST['i_radio_sign'];
si vous ne comptez pas nommer vos signatures "signatureX_jour.jpg", "signatureX_nuit.jpg", etc.
Pour mettre à jour toutes les signatures toutes les X minutes (pour avoir des signatures à jour au niveau des info) il faut exécuter le script "refresh_sign.php" à chaque mise à jour.
Avant de vous expliquer comment lancer le script toutes les X minutes, je vais vous décrire ce que fait ce script.
Quand le script est exécuté, il fait dans l'ordre :
- Mise à jour des info guilde dans la base de données.
- Mise à jour des stats guilde dans la base de données SI c'est l'heure de le faire (configurable dans le fichier des constantes).
- Mise à jour de toutes les signatures existantes avec la fonction "CreateImage($nom,$img)".
Voici un vrai problème, exécuter le script toutes les X minutes est, je pense, le problème le plus bloquant des signatures.
Il y a différentes façons de le faire, mais aucune d'entre elles (à moins que je me trompe) sont réalisables sur un hébergement gratuit (type Free), ou alors il faudra lancer le script toutes les X minutes à la main... (hors de question pour ma part).
En cherchant un petit peu j'ai trouvé ce site : http://www.webcron.org qui se propose d'exécuter des scripts tout les X temps pour vous.
Personnellement j'utilise "Cronjob" présent sur mon espace d'hébergement pro (http://www.hosteur.com) pour exécuter le script toutes les 10 minutes.
Vous pouvez aussi demander autour de vous si quelqu'un possède un espace d'hébergement pro et s'il veut bien configurer l'exécution du script pour vous (en théorie ça consomme très très peu de bande passante et le script n'a pas besoin d'être stocké sur son serveur).
Syntaxe CRON : */10 * * * * GET http://lurikuny.free.fr/xxx/xxx/xxx/refresh_sign.php
"Exécute le script http://lurikuny.free.fr/xxx/xxx/xxx/refresh_sign.php toutes les 10 minutes".
Pour plus d'informations sur la syntaxe de CRON : http://www.commentcamarche.net/tutlinux/lincron.php3
Ce fichier contient toute la partie configuration du script, je vais ségmenter ces constantes en 3 parties.
DOMAINE = Adresse de la base de données MySQL ("localhost" dans 99% des cas).
IDENTIFIANT = Votre login à la base...
MDP = Le mot de passe...
DATABASE = Le nom de la base (en général c'est le même nom que l'identifiant chez les hébergeurs gratuits).
NOM_GUILD = Le nom de la guilde à chercher dans le ladder (remplacer les espaces par des "+").
TAG_GUILD = Pas encore implanté, peut-être plus tard.
H_SOIR = L'heure après laquelle la signature passe en mode "nuit".
H_MATIN = L'heure après laquelle la signature passe en mode "jour".
H_MAJ = L'heure à laquelle la mise à jour journalière est effectuée.
QUALITE_JPEG = La qualité des JPEG de sortie, de 0 à 100.
URL_LADDER = L'URL de la page du ladder Guildwars.
DEBUT = Balise de début pour le parsing.
FIN = Balise de fin pour le parsing.
SEP = Balise de séparation pour le parsing.
ID_GUILD_STATS = Id de la ligne où sont stockées les stats dans la base de données.
ID_GUILD_INFO = Id de la ligne où sont stockées les info dans la base de données.
Pour que le script fonctionne correctement il est important de respecter une arboressence fichier prédéfinie :
Dossier du script : "./Includes"
Dossier des backgrounds : "./Images"
Dossier des signatures : "./Images/Signatures"
Vous pouvez utiliser les sources pour créer vos propres signatures de guilde, il n'y a aucun soucis de ce côté là.
GB-Signatures v1.2b (24/03/06).