pour le défilement des albums, je me demande si au départ pour la carrousel je charge 5 albums dans la BD, et dans ce cas quand je défile le carrousel ça charge 3 autres albums de la BD, toujours sans refresh donc ce serait avec du AJAX ? ou alors il vaut mieux que je charge tout les albums ( mais je trouve cela pas optimale ). Je tient à avoir une bonne conception et architecture MVC ! fichier musicCard.php : <link rel="stylesheet" href="styles/musicCard.css">
<div class="main-album">
    <img class="img-album" src="<?= $album->getImageAlbum() ?>" alt="">
    <section class="infos-card">
        <div class="top-infos-card">
            <h3><?= $album->getTitreAlbum() ?></h3>
            <p><?= count($album->musiques) == 1 ? 'Single' : count($album->musiques) . ' Titres' ?></p>
        </div>
        <div class="bottom-infos-card">
            <div class="bottom-infos-card-artist">
                <img src="../img/icone_artist.svg" alt="icone de l'artiste"/>
                <p><?= $album->artiste->getNom() ?></p>
            </div>
            <p><?= $album->getAnneeAlbum()->format('d/m/Y') ?></p>
        </div>
    </section>
</div> fichier accueil.php : <link rel="stylesheet" href = "styles/accueil.css">
<?php foreach ($albumsByCategory as $category => $lesAlbums) : ?>
    <section class="section-categorie-album">
        <h2><?= ucfirst($category) ?></h2>
        <button class="btn-voir-plus">plus</button>
        <div class="albums">
            <?php foreach ($lesAlbums as $album) : ?>
                <?= $renderMusicCard($album) ?>
            <?php endforeach ?>
        </div>
    </section>
<?php endforeach ?> fichier controllerHome.php : <?php 
// 2 méthodes

namespace controller;
use models\db\AlbumDB;
class ControllerHome extends Controller{
    
    public function view(): void{
        $categories = ['recents', 'populaires']; // on peut ajouter d'autres catégories -> à voir condition dans albumBD
        $albumsByCategory = [];
        foreach ($categories as $category) {
            $albumsByCategory[$category] = AlbumDB::getInfosCardsAlbum($category);
        }
        $this->render("base", [
            "header" => $this->get("element/header"),
            "content" => $this->get("accueil", [
                "albumsByCategory" => $albumsByCategory, 
                "renderMusicCard" => function($album) {
                    return $this->get("element/musicCard", ["album" => $album]);
                }
            ]),
            "menu" => $this->get("element/menu"),
        ]);
    }

    public function add(): void{
        $this->render("test", []);
    }
} fichier albumDB : <?php

namespace models\db;

use models\Album;
use models\Artiste;
use models\Musique;


class AlbumDB {

    // /**
    //  * @return Album[]
    //  */
    // public static function getAlbums(): array {
    //     $db = Database::getInstance();
    //     $albums = [];
    //     $result = $db->query("SELECT * FROM album");
    //     foreach($result as $r) {
    //     $albums[] = new Album($r["idAlbum"], $r["titreAlbum"], $r["anneeAlbum"], "image");
    //     }
    //     return $albums;
    // }
    
        /**
         * @param Album $album
         * @return bool
         */
        public static function addAlbum(Album $album): bool {
            $db = Database::getInstance();
            $stmt = $db->prepare("INSERT INTO album(titreAlbum, anneeAlbum, imgAlbum) VALUES (:titre, :annee, :imageAl)");
            $titreAlbum = $album->getTitreAlbum();
            $stmt->bindParam(":titre", $titreAlbum);
            $annee = $album->getAnneeAlbum();
            $stmt->bindParam(":annee", $annee);
            $imgAlbum = $album->getImageAlbum();
            $stmt->bindParam(":imageAl", $imgAlbum);
            return $stmt->execute();
        }
    /**
     * @return Album
     */
    public static function getAlbum(int $id): ?Album {
        $db = Database::getInstance();
        $result = $db->query("SELECT album.*, artiste.*, musique.* FROM album JOIN artiste ON album.idA = artiste.idA LEFT JOIN musique ON musique.idAlbum = album.idAlbum WHERE album.idAlbum = $id");
        $album = null;
        foreach ($result as $r) {
            if (!$album) {
                $artiste = new Artiste($r["idA"], $r["nomA"]);
                $album = new Album($r["idAlbum"], $r["titreAlbum"], $r["anneeAlbum"], $r["imgAlbum"], $artiste, []);
            }
    
            if ($r["idM"]) {
                $album->musiques[] = new Musique($r["idM"], $r["nomM"],"lien");
            }
        }
    
        return $album;
    }
    
    public static function getInfosCardsAlbum(string $category): array {
        $db = Database::getInstance();
        $conditions = '';
        switch ($category) {
            case 'recents':
                $conditions = 'ORDER BY album.anneeAlbum DESC';
                break;
            case 'populaires':
                // a faire quand on aura le nb d'écoute
                break;
            default:
                $conditions = "ORDER BY album.idAlbum DESC";
                break;
        }

        $stmt = $db->query("SELECT album.*, artiste.*, musique.* FROM album JOIN artiste ON album.idA = artiste.idA LEFT JOIN musique ON musique.idAlbum = album.idAlbum $conditions");
        $albums = [];

        foreach ($stmt as $s) {
            $idAlbum = $s["idAlbum"];
            if (!isset($albums[$idAlbum])) {
                $artiste = new Artiste($s["idA"], $s["nomA"]);
                $album = new Album($s["idAlbum"], $s["titreAlbum"], $s["anneeAlbum"], $s["imgAlbum"], $artiste, []);
                $albums[$idAlbum] = $album;
            }

            if ($s["idM"]) {
                $albums[$idAlbum]->musiques[] = new Musique($s["idM"], $s["nomM"], "lien");
            }
        }

        return array_values($albums);
    }
}