Thèmes & Design

Système de thèmes PHP

Le système de thèmes de QuietCMS est intentionnellement simple : un thème est un répertoire PHP dans themes/<nom>/. Pas de compilation, pas de système de build, pas de moteur de templates propriétaire. Chaque développeur PHP peut créer ou modifier un thème en travaillant directement avec des fichiers .php et .css.

Structure minimale d'un thème

Un thème valide doit contenir au minimum les fichiers suivants :

themes/mon-theme/
├── theme.json        # Métadonnées du thème
├── layout.php        # Coquille HTML externe (head, header, footer)
├── home.php          # Page d'accueil
├── blog.php          # Liste des articles
├── post.php          # Article individuel
├── page.php          # Page statique
├── category.php      # Liste par catégorie
├── 404.php           # Page d'erreur
└── style.css         # Feuille de styles principale

Le fichier theme.json

theme.json déclare les métadonnées et les capacités du thème :

{
    "name": "Mon Thème",
    "description": "Un thème minimaliste pour QuietCMS.",
    "author": "Votre Nom",
    "version": "1.0.0",
    "supports": ["sidebars", "comments", "breadcrumbs"]
}

Le tableau supports indique au CMS quelles fonctionnalités le thème est capable d'afficher. Si sidebars est absent, le panneau d'administration masque la gestion des zones de widgets pour ce thème.

layout.php : la coquille commune

layout.php est le fichier inclus pour toutes les pages. Il contient le <!DOCTYPE html>, le <head> avec les métadonnées SEO et la balise d'inclusion du template spécifique ($template). C'est ici que s'injectent les balises Open Graph, les scripts analytics et les zones head_extra / footer_extra définies page par page.

Variables injectées par le CMS

À chaque rendu, le CMS injecte les variables suivantes dans le scope des templates :

  • $page — tableau contenant les données de la page/article en cours (titre, contenu, slug…)
  • $settings — configuration globale du site (nom, description, réseaux sociaux…)
  • $menu — tableau des éléments de menu principal
  • $template — nom du fichier template à inclure (ex. post.php)
  • $blogSlug — slug de la page blog (pour construire les liens)
  • $catPrefix — préfixe des URLs de catégorie
  • $tplOpts — options de template (disposition, sidebar, largeur…)
  • $themeSettings — paramètres spécifiques au thème actif

Classes helper disponibles

Dans les templates, toutes les classes core/ sont disponibles :

  • Security::clean($str) — échappe une chaîne pour l'affichage HTML.
  • BreadcrumbBuilder::render($page, $settings) — fil d'Ariane formaté.
  • SidebarManager::render($sidebarId, $settings) — rendu d'une zone de widgets.
  • OpenGraphBuilder::render($page, $settings) — balises OG pour le <head>.

Les constantes BASE_URL, THEMES_DIR et CORE_DIR sont également disponibles pour construire des chemins absolus vers les assets du thème.

Démarrer un nouveau thème

La méthode recommandée est de copier le thème default/ et d'y apporter ses modifications :

  1. Copier themes/default/ vers themes/mon-theme/.
  2. Modifier theme.json (nom, auteur, version).
  3. Personnaliser style.css et layout.php.
  4. Activer le thème depuis Apparence → Thèmes dans le back-office.

Le changement de thème est instantané et sans perte de contenu : le CMS continue de lire les mêmes fichiers JSON, seule la couche de présentation change. L'éditeur CSS et l'éditeur de templates intégrés permettent d'affiner le thème directement depuis l'interface d'administration, sans accès FTP.

Articles similaires