ajout d'une option de tri à l'accueil
This commit is contained in:
parent
06b02f4b54
commit
79740e2c8f
@ -12,6 +12,7 @@ document.addEventListener('DOMContentLoaded', function() {
|
|||||||
const monsterSearchSelect = document.getElementById('monsterSearchSelect');
|
const monsterSearchSelect = document.getElementById('monsterSearchSelect');
|
||||||
const monsterSearchResults = document.getElementById('monsterSearchResults');
|
const monsterSearchResults = document.getElementById('monsterSearchResults');
|
||||||
const selectedMonsterId = document.getElementById('selectedMonsterId');
|
const selectedMonsterId = document.getElementById('selectedMonsterId');
|
||||||
|
const monsterSort = document.getElementById('monsterSort');
|
||||||
|
|
||||||
// Variables globales
|
// Variables globales
|
||||||
let monsters = [];
|
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
|
// Ajouter les écouteurs pour les cartes de monstres
|
||||||
if (monsterList) {
|
if (monsterList) {
|
||||||
monsterList.addEventListener('click', function(e) {
|
monsterList.addEventListener('click', function(e) {
|
||||||
|
@ -82,11 +82,58 @@ function init_database($db) {
|
|||||||
/**
|
/**
|
||||||
* Récupérer tous les monstres
|
* 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
|
* @return array Liste des monstres
|
||||||
*/
|
*/
|
||||||
function get_all_monsters() {
|
function get_all_monsters($sort_by = 'name_asc') {
|
||||||
$db = get_db_connection();
|
$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);
|
return $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
20
index.php
20
index.php
@ -18,6 +18,9 @@ require_once 'includes/functions.php';
|
|||||||
$page_title = 'MH Wilds - Partage de Quêtes à Couronnes';
|
$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 !';
|
$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
|
// CSS supplémentaire pour la page d'accueil
|
||||||
$extra_css = <<<EOT
|
$extra_css = <<<EOT
|
||||||
<style id="monster-search-styles">
|
<style id="monster-search-styles">
|
||||||
@ -74,8 +77,8 @@ $extra_js = <<<EOT
|
|||||||
<script src="assets/js/main.js"></script>
|
<script src="assets/js/main.js"></script>
|
||||||
EOT;
|
EOT;
|
||||||
|
|
||||||
// Récupérer les données nécessaires
|
// Récupérer les données nécessaires avec le tri spécifié
|
||||||
$monsters = get_all_monsters();
|
$monsters = get_all_monsters($current_sort);
|
||||||
$active_announcements = get_all_announcements(true);
|
$active_announcements = get_all_announcements(true);
|
||||||
|
|
||||||
// Inclure l'en-tête
|
// Inclure l'en-tête
|
||||||
@ -88,13 +91,24 @@ include 'includes/header.php';
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="row mb-4">
|
<div class="row mb-4">
|
||||||
<div class="col-md-6 mx-auto">
|
<div class="col-md-6">
|
||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
<span class="input-group-text"><i class="bi bi-search">🔍</i></span>
|
<span class="input-group-text"><i class="bi bi-search">🔍</i></span>
|
||||||
<input type="text" class="form-control" id="monsterSearch" placeholder="Rechercher un monstre...">
|
<input type="text" class="form-control" id="monsterSearch" placeholder="Rechercher un monstre...">
|
||||||
<button class="btn btn-outline-light" type="button" id="clearSearchBtn">Effacer</button>
|
<button class="btn btn-outline-light" type="button" id="clearSearchBtn">Effacer</button>
|
||||||
</div>
|
</div>
|
||||||
</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>
|
</div>
|
||||||
|
|
||||||
<?php if (!empty($active_announcements)): ?>
|
<?php if (!empty($active_announcements)): ?>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user