ajout d'une option de tri à l'accueil

This commit is contained in:
Esenjin 2025-03-09 20:56:01 +01:00
parent 06b02f4b54
commit 79740e2c8f
3 changed files with 77 additions and 5 deletions

View File

@ -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) {

View File

@ -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);
}

View File

@ -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 = <<<EOT
<style id="monster-search-styles">
@ -74,8 +77,8 @@ $extra_js = <<<EOT
<script src="assets/js/main.js"></script>
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';
</div>
<div class="row mb-4">
<div class="col-md-6 mx-auto">
<div class="col-md-6">
<div class="input-group">
<span class="input-group-text"><i class="bi bi-search">🔍</i></span>
<input type="text" class="form-control" id="monsterSearch" placeholder="Rechercher un monstre...">
<button class="btn btn-outline-light" type="button" id="clearSearchBtn">Effacer</button>
</div>
</div>
<div class="col-md-6">
<div class="input-group">
<span class="input-group-text">Trier par</span>
<select class="form-select" id="monsterSort">
<option value="name_asc" <?php echo $current_sort === 'name_asc' ? 'selected' : ''; ?>>Nom (A-Z)</option>
<option value="name_desc" <?php echo $current_sort === 'name_desc' ? 'selected' : ''; ?>>Nom (Z-A)</option>
<option value="quests_count" <?php echo $current_sort === 'quests_count' ? 'selected' : ''; ?>>Nombre de quêtes</option>
<option value="recent_quests" <?php echo $current_sort === 'recent_quests' ? 'selected' : ''; ?>>Quêtes récentes</option>
</select>
</div>
</div>
</div>
<?php if (!empty($active_announcements)): ?>