Arborescence
Structure attendue
data/themes/acme/
|- theme.json
|- style.css
|- slots/
| |- head.php
| |- sidebar.php
| |- topbar.php
| `- footer.php
|- parts/
| |- sidebar_logo.php
| |- sidebar_nav.php
| |- sidebar_user.php
| |- topbar_title.php
| `- topbar_notifications.php
`- pages/
`- dashboard.php
Tout est optionnel sauf theme.json. Le theme horizon dans src/themes_builtin/horizon/ sert de reference concrete.
Feuille de style
Comment ecrire le style.css
Le moteur injecte votre CSS uniquement quand le theme est actif, mais il ne reecrit pas vos selecteurs. Il faut donc scoper vos regles avec l attribut du theme actif.
[data-theme="acme"] .sidebar {
width: 100%;
border-right: 0;
border-bottom: 1px solid var(--border);
}
[data-theme="acme"] .main {
margin-left: 0;
}
Sans prefixe
[data-theme="acme"], votre CSS risque soit de ne pas cibler correctement le shell, soit d introduire des collisions avec d autres themes.Overrides
Slots, parts et pages supportes
| Type | Noms supportes | Usage |
|---|---|---|
| Slots | head, sidebar, topbar, footer | Remplacer une grande zone du shell. |
| Parts | sidebar_logo, sidebar_nav, sidebar_user, topbar_title, topbar_notifications | Modifier finement une sous-partie sans recopier tout le slot. |
| Pages | dashboard, puis d autres ids reserves par le moteur | Produire un rendu complet pour une page supportee. |
En pratique, le point d extension page actuellement branche par le core est pages/dashboard.php. Les autres noms sont prepares au niveau du moteur, mais pas encore tous appeles.
Garde fous
Contraintes et limites importantes
style.csspasse par un filtre de securite et reste limite en taille.- Seuls certains noms de slots, parts et pages sont autorises.
- Un theme advanced execute du vrai PHP: il faut le traiter comme du code applicatif de confiance.
- Le theme ne peut pas redefinir arbitrairement de nouveaux points d extension si le moteur ne les connait pas deja.