WoW Classes 101 : Un outil pour explorer les classes et spécialisations de World of Warcraft
Partie Backend
Technologies utilisées
Backend :
Frontend :
Autres :
Fonctionnalités principales
Endpoints disponibles
| Méthode | Endpoint | Paramètre | Description |
|---|---|---|---|
| GET | api/listerClasses.php |
Liste toutes les classes | |
| GET | api/listerRaceParFaction.php |
?faction={alliance/horde} |
Liste les races jouables par faction |
| GET | api/listerSpecialisationParClasse.php |
?id={int} |
Liste les spécialisations de chaque classe |
| GET | api/detaillerClasse.php |
?id={int} |
Donne des informations additionnelles sur les classes |
| GET | api/detaillerRace.php |
?id={int} |
Donne des informations additionnelles sur les races |
Code de Cache
class CacheManager {
private static string $cacheDir;
private static int $cacheExpiration;
public static function init(): void {
if (!isset(self::$cacheExpiration) || !isset(self::$cacheDir)) {
self::$cacheExpiration = (int) EnvLoader::get('CACHE_EXPIRATION');
self::$cacheDir = EnvLoader::get('CACHE_DIR');
if (!file_exists(self::$cacheDir)) {
mkdir(self::$cacheDir, 0777, true);
}
}
}
public static function get(string $key): ?array {
self::init();
$filePath = self::$cacheDir . '/' . $key . '.json';
if (file_exists($filePath)) {
$content = file_get_contents($filePath);
$data = json_decode($content, true);
if (isset($data['timestamp']) && time() - $data['timestamp'] < self::$cacheExpiration) { return $data['data']; } } return null; } public static function set(string $key, array $data): void { self::init(); $filePath = self::$cacheDir . '/' . $key . '.json'; $dataToStore = [ 'timestamp' => time(),
'data' => $data
];
file_put_contents($filePath, json_encode($dataToStore));
}
public static function isCached(string $key): bool {
self::init();
return file_exists(self::$cacheDir . '/' . $key . '.json');
}
}
—
Partie Frontend
Dans le cadre du développement de mon site web, j’ai choisi d’utiliser Bootstrap pour structurer et styliser l’interface utilisateur. Toutefois, afin de donner une identité unique à mon projet, j’ai personnalisé le thème Bootstrap en modifiant certains styles pour correspondre à l’esthétique que je souhaitais.
Personnalisation de Bootstrap
Bien que Bootstrap fournisse une base solide et responsive, j’ai apporté plusieurs modifications à son apparence pour éviter une sensation de “site générique”. Ces ajustements ont été réalisés via des feuilles de style CSS additionnelles, en redéfinissant certaines variables de Bootstrap et en appliquant des styles personnalisés aux composants clés.
Gestion des pages actives avec PHP
Pour assurer une navigation fluide et intuitive, j’ai utilisé PHP afin de déterminer la page active et d’appliquer dynamiquement la classe active aux éléments du menu. Cette approche permet d’indiquer visuellement à l’utilisateur sur quelle page il se trouve sans nécessiter d’intervention manuelle sur chaque fichier.
Exemple de logique PHP pour gérer l’état actif des liens du menu :
Dynamisme avec JavaScript et DHTML
En complément du rendu côté serveur avec PHP, j’ai intégré JavaScript pour gérer les interactions dynamiques sur la page. Grâce au DHTML (Dynamic HTML), certains éléments du site peuvent être modifiés en temps réel sans nécessiter de rechargement complet de la page.
Quelques exemples d’utilisation du DHTML dans mon projet :
- Affichage ou masquage d’éléments en fonction des actions de l’utilisateur.
- Mise à jour dynamique du contenu (comme des détails de classes WoW).
Conclusion
L’association de Bootstrap, PHP et JavaScript permet d’obtenir un site web à la fois structuré, personnalisable et interactif. Grâce à PHP, la gestion des pages actives est automatisée, tandis que JavaScript améliore l’expérience utilisateur en rendant l’interface plus dynamique et réactive. Ce projet illustre ma capacité à combiner ces différentes technologies pour créer un site fonctionnel et esthétiquement abouti.