Kleurenthema's
Chamilo 2.0 maakt gebruik van een databasegestuurd kleurenthemasysteem. Thema's worden beheerd via de beheerdersinterface, opgeslagen in de database en als CSS-bestanden naar de schijf geschreven. Ze kunnen worden aangepast per toegang-URL, waardoor installaties met meerdere URL's verschillende visuele identiteiten kunnen hebben.
Gegevensmodel
Twee entiteiten sturen het themasysteem aan:
ColorTheme (src/CoreBundle/Entity/ColorTheme.php)
id
int
Primaire sleutel
title
string
Menselijk leesbare naam
slug
string
Automatisch gegenereerd uit title (bijv. "Mijn Thema" → mijn-thema); gebruikt als mapnaam in var/themes/
variables
array (JSON)
Kaart van CSS-eigendomsnaam → waarde (bijv. {"--color-primary-base": "46 117 163"})
AccessUrlRelColorTheme (src/CoreBundle/Entity/AccessUrlRelColorTheme.php)
Koppelt een ColorTheme aan een AccessUrl. De active boolean-vlag markeert welk thema momenteel actief is voor die URL. Slechts één thema kan tegelijkertijd actief zijn per toegang-URL.
Hoe Thema's Worden Opgeslagen
Wanneer een thema wordt aangemaakt of bijgewerkt via de API, genereert ColorThemeStateProcessor het CSS-bestand en schrijft dit naar de Flysystem themes_filesystem (ondersteund door var/themes/):
var/themes/
└── {slug}/
└── colors.css ← gegenereerd uit ColorTheme.variablesHet gegenereerde colors.css omvat alle variabelen in een :root-blok:
Waarden zijn spatiegescheiden RGB-kanaal-tripletten (niet rgb()), wat Tailwind in staat stelt om opaciteitsvarianten zoals bg-primary/50 samen te stellen zonder extra configuratie.
Prioriteit bij Themaresolutie
ThemeHelper::getVisualTheme() bepaalt welk thema-slug op een bepaalde pagina wordt toegepast, in deze volgorde:
Actief thema voor de huidige AccessUrl — het
AccessUrlRelColorTheme-record metactive = trueDoor de gebruiker geselecteerd thema — het thema dat is opgeslagen in de
User-entiteit, als de platforminstellingprofile.user_selected_themeis ingeschakeldCursusthema — de cursusinstelling
course_theme, als de platforminstellingcourse.allow_course_themeis ingeschakeldThema voor leerpad — de
$lp_theme_css-waarde van het leerpad, als de cursusinstellingallow_learning_path_themeis ingeschakeldTHEME_FALLBACKomgevingsvariabele — ingesteld in.envalsTHEME_FALLBACK='chamilo'Standaard —
chamilo(hardcoded alsThemeHelper::DEFAULT_THEME)
Levering van Assets
Thema-assets worden geleverd door ThemeController (src/CoreBundle/Controller/ThemeController.php) onder het voorvoegsel /themes.
GET /themes/{name}/{path}
Levert een thema-asset (CSS, JS, afbeeldingen); valt terug op het chamilo-thema als het niet wordt gevonden in het gevraagde thema
GET /themes/{slug}/logo/{type}
Levert het voorkeur-logo (header of email), met SVG → PNG fallback
POST /themes/{slug}/logos
Upload header/email-logo's (SVG en/of PNG)
DELETE /themes/{slug}/logos/{type}
Verwijdert een specifiek logo
De algemene asset-route (/{name}/{path}) valt automatisch terug op het standaard chamilo-thema wanneer een bestand ontbreekt in het gevraagde thema, zodat thema's alleen bestanden hoeven te bevatten die ze daadwerkelijk overschrijven.
Hoe Thema's Worden Geladen in Sjablonen
Het head.html.twig-lay-outsjabloon laadt de assets van het actieve thema via Twig-helperfuncties:
De drie Twig-functies (geregistreerd in ChamiloExtension) lossen het assetpad op via ThemeHelper, waarbij dezelfde fallback-keten als hierboven wordt toegepast:
theme_asset('path')
URL naar de asset in het opgeloste thema
theme_asset_link_tag('path')
Volledige <link rel="stylesheet">-tag
theme_asset_script_tag('path')
Volledige <script src="...">-tag
theme_asset_base64('path')
Base64-gecodeerde data-URI van de asset
theme_logo('header'|'email')
URL naar het best beschikbare logo
API-eindpunten
Thema-beheer is beschikbaar via de API Platform REST API (alleen voor beheerders):
POST
/api/color_themes
Maak een nieuw thema aan
PUT
/api/color_themes/{id}
Werk een bestaand thema bij
POST
/api/access_url_rel_color_themes
Koppel/activeer een thema voor een toegang-URL
GET
/api/access_url_rel_color_themes
Lijst thema-associaties voor de huidige toegang-URL
Een Aangepast Thema Maken
De standaard workflow verloopt via de beheerdersinterface (Beheer → Kleurenthema's), die de bovenstaande API-eindpunten aanroept. Om programmatisch een thema te maken:
POST /api/color_themesmet een JSON-body:
Dit slaat de entiteit op en schrijft var/themes/my-theme/colors.css.
POST /api/access_url_rel_color_themesom het thema te koppelen en te activeren voor de huidige toegang-URL:
Om aangepaste afbeeldingen (logo, favicon, achtergronden) toe te voegen, upload ze via POST /themes/{slug}/logos of plaats ze direct in var/themes/{slug}/images/.
Referentie voor Kleurvariabelen
Alle variabelen die worden verwacht door de standaard Tailwind-configuratie:
--color-primary-base
Primaire merkkleur
--color-primary-gradient
Donkerdere gradiëntstop voor primair
--color-primary-button-text
Tekstkleur op primaire knoppen
--color-primary-button-alternative-text
Alternatieve tekstkleur op primaire knoppen
--color-secondary-base
Secundaire accentkleur
--color-secondary-gradient
Gradiëntstop voor secundair
--color-secondary-button-text
Tekstkleur op secundaire knoppen
--color-tertiary-base
Tertiaire kleur
--color-tertiary-gradient
Gradiëntstop voor tertiair
--color-tertiary-button-text
Tekstkleur op tertiaire knoppen
--color-success-base
Kleur voor successtatus
--color-success-gradient
Gradiëntstop voor succes
--color-success-button-text
Tekstkleur op succesknoppen
--color-info-base
Kleur voor informatietoestand
--color-info-gradient
Gradiëntstop voor info
--color-info-button-text
Tekstkleur op infoknoppen
--color-warning-base
Kleur voor waarschuwingstoestand
--color-warning-gradient
Gradiëntstop voor waarschuwing
--color-warning-button-text
Tekstkleur op waarschuwingsknoppen
--color-danger-base
Kleur voor gevaar/foutstatus
--color-danger-gradient
Gradiëntstop voor gevaar
--color-danger-button-text
Tekstkleur op gevaarknoppen
--color-form-base
Accentkleur voor formulierelementen
Laatst bijgewerkt
Was dit nuttig?