diff --git a/assets/js/main.js b/assets/js/main.js index 9f2edbc..59b3fa8 100644 --- a/assets/js/main.js +++ b/assets/js/main.js @@ -12,6 +12,7 @@ document.addEventListener('DOMContentLoaded', function() { const monsterSearchSelect = document.getElementById('monsterSearchSelect'); const monsterSearchResults = document.getElementById('monsterSearchResults'); const selectedMonsterId = document.getElementById('selectedMonsterId'); + const monsterSort = document.getElementById('monsterSort'); // Variables globales let monsters = []; @@ -37,6 +38,16 @@ document.addEventListener('DOMContentLoaded', function() { }); } + // Ajouter l'écouteur pour le tri des monstres + if (monsterSort) { + monsterSort.addEventListener('change', function() { + // Rediriger vers la même page avec le paramètre de tri + const sortValue = this.value; + console.log("Changement de tri: " + sortValue); // Pour le débogage + window.location.href = `index.php?sort=${sortValue}`; + }); + } + // Ajouter les écouteurs pour les cartes de monstres if (monsterList) { monsterList.addEventListener('click', function(e) { diff --git a/includes/database.php b/includes/database.php index 84f50a2..552fdd6 100644 --- a/includes/database.php +++ b/includes/database.php @@ -82,11 +82,58 @@ function init_database($db) { /** * Récupérer tous les monstres * + * @param string $sort_by Critère de tri ('name_asc', 'name_desc', 'quests_count', 'recent_quests') * @return array Liste des monstres */ -function get_all_monsters() { +function get_all_monsters($sort_by = 'name_asc') { $db = get_db_connection(); - $stmt = $db->query('SELECT * FROM monsters ORDER BY name ASC'); + + // Pour déboguer - log le paramètre de tri et la requête SQL + error_log("Tri demandé: " . $sort_by); + + switch ($sort_by) { + case 'name_desc': + $sql = 'SELECT * FROM monsters ORDER BY name DESC'; + $stmt = $db->query($sql); + error_log("SQL exécuté: " . $sql); + break; + + case 'quests_count': + // Version compatible avec SQLite + $sql = ' + SELECT m.*, COUNT(q.id) as quest_count + FROM monsters m + LEFT JOIN quests q ON m.id = q.monster_id + GROUP BY m.id + ORDER BY quest_count DESC, m.name ASC + '; + $stmt = $db->query($sql); + error_log("SQL exécuté: " . $sql); + break; + + case 'recent_quests': + // Version compatible avec SQLite + $sql = ' + SELECT m.*, + CASE WHEN MAX(q.date) IS NULL THEN 0 ELSE 1 END as has_quests, + MAX(q.date) as latest_quest + FROM monsters m + LEFT JOIN quests q ON m.id = q.monster_id + GROUP BY m.id + ORDER BY has_quests DESC, latest_quest DESC, m.name ASC + '; + $stmt = $db->query($sql); + error_log("SQL exécuté: " . $sql); + break; + + case 'name_asc': + default: + $sql = 'SELECT * FROM monsters ORDER BY name ASC'; + $stmt = $db->query($sql); + error_log("SQL exécuté: " . $sql); + break; + } + return $stmt->fetchAll(PDO::FETCH_ASSOC); } diff --git a/index.php b/index.php index f619bc7..65bc038 100644 --- a/index.php +++ b/index.php @@ -18,6 +18,9 @@ require_once 'includes/functions.php'; $page_title = 'MH Wilds - Partage de Quêtes à Couronnes'; $page_description = 'Partagez vos quêtes d\'investigation avec couronnes pour Monster Hunter Wilds et complétez votre collection !'; +// Récupérer le paramètre de tri +$current_sort = isset($_GET['sort']) ? $_GET['sort'] : 'name_asc'; + // CSS supplémentaire pour la page d'accueil $extra_css = << @@ -74,8 +77,8 @@ $extra_js = << EOT; -// Récupérer les données nécessaires -$monsters = get_all_monsters(); +// Récupérer les données nécessaires avec le tri spécifié +$monsters = get_all_monsters($current_sort); $active_announcements = get_all_announcements(true); // Inclure l'en-tête @@ -88,13 +91,24 @@ include 'includes/header.php';
-
+
🔍
+
+
+ Trier par + +
+