Farbschemata
Chamilo 2.0 verwendet ein datenbankgesteuertes Farbthemen-System. Themen werden über die Admin-Benutzeroberfläche verwaltet, in der Datenbank gespeichert und als CSS-Dateien auf die Festplatte geschrieben. Sie können pro Zugriffs-URL angepasst werden, sodass Multi-URL-Installationen unterschiedliche visuelle Identitäten haben können.
Datenmodell
Zwei Entitäten steuern das Themensystem:
ColorTheme (src/CoreBundle/Entity/ColorTheme.php)
id
int
Primärschlüssel
title
string
Menschlich lesbarer Name
slug
string
Automatisch aus title generiert (z. B. "Mein Thema" → mein-thema); wird als Verzeichnisname in var/themes/ verwendet
variables
array (JSON)
Zuordnung von CSS-Benutzerdefinierten Eigenschaftsnamen → Wert (z. B. {"--color-primary-base": "46 117 163"})
AccessUrlRelColorTheme (src/CoreBundle/Entity/AccessUrlRelColorTheme.php)
Verknüpft ein ColorTheme mit einer AccessUrl. Das active-Boolean-Flag markiert, welches Thema derzeit für diese URL aktiv ist. Pro Zugriffs-URL kann jeweils nur ein Thema aktiv sein.
Wie Themen gespeichert werden
Wenn ein Thema über die API erstellt oder aktualisiert wird, generiert ColorThemeStateProcessor die CSS-Datei und schreibt sie in das Flysystem themes_filesystem (unterstützt durch var/themes/):
var/themes/
└── {slug}/
└── colors.css ← generiert aus ColorTheme.variablesDie generierte colors.css umschließt alle Variablen in einem :root-Block:
Die Werte sind durch Leerzeichen getrennte RGB-Kanal-Tripletts (nicht rgb()), was es Tailwind ermöglicht, Transparenzvarianten wie bg-primary/50 ohne zusätzliche Konfiguration zu erstellen.
Priorität bei der Themenauflösung
ThemeHelper::getVisualTheme() bestimmt, welcher Thema-Slug auf einer gegebenen Seite angewendet wird, in folgender Reihenfolge:
Aktives Thema für die aktuelle AccessUrl — der
AccessUrlRelColorTheme-Datensatz mitactive = trueVom Benutzer ausgewähltes Thema — das Thema, das in der
User-Entität gespeichert ist, wenn die Plattformeinstellungprofile.user_selected_themeaktiviert istKursthema — die Kurseinstellung
course_theme, wenn die Plattformeinstellungcourse.allow_course_themeaktiviert istLernpfad-Thema — der
$lp_theme_css-Wert des Lernpfads, wenn die Kurseinstellungallow_learning_path_themeaktiviert istTHEME_FALLBACKUmgebungsvariable — in.envalsTHEME_FALLBACK='chamilo'gesetztStandard —
chamilo(hartcodiert alsThemeHelper::DEFAULT_THEME)
Bereitstellung von Assets
Themen-Assets werden vom ThemeController (src/CoreBundle/Controller/ThemeController.php) unter dem Präfix /themes bereitgestellt.
GET /themes/{name}/{path}
Bereitstellung beliebiger Themen-Assets (CSS, JS, Bilder); fällt auf das chamilo-Thema zurück, wenn die Datei im angeforderten Thema nicht gefunden wird
GET /themes/{slug}/logo/{type}
Bereitstellung des bevorzugten Logos (header oder email), mit SVG → PNG-Rückfalloption
POST /themes/{slug}/logos
Hochladen von Header-/E-Mail-Logos (SVG und/oder PNG)
DELETE /themes/{slug}/logos/{type}
Löschen eines bestimmten Logos
Die allgemeine Asset-Route (/{name}/{path}) fällt automatisch auf das Standardthema chamilo zurück, wenn eine Datei im angeforderten Thema fehlt, sodass Themen nur Dateien enthalten müssen, die sie tatsächlich überschreiben.
Wie Themen in Vorlagen geladen werden
Die Layout-Vorlage head.html.twig lädt die Assets des aktiven Themas über Twig-Hilfsfunktionen:
Die drei Twig-Funktionen (registriert in ChamiloExtension) lösen den Asset-Pfad über ThemeHelper auf und wenden dieselbe Rückfallkette wie oben an:
theme_asset('path')
URL zum Asset im aufgelösten Thema
theme_asset_link_tag('path')
Vollständiges <link rel="stylesheet">-Tag
theme_asset_script_tag('path')
Vollständiges <script src="...">-Tag
theme_asset_base64('path')
Base64-kodierter Daten-URI des Assets
theme_logo('header'|'email')
URL zum bestverfügbaren Logo
API-Endpunkte
Die Themenverwaltung wird über die API Platform REST API freigegeben (nur für Administratoren):
POST
/api/color_themes
Erstellen eines neuen Themas
PUT
/api/color_themes/{id}
Aktualisieren eines bestehenden Themas
POST
/api/access_url_rel_color_themes
Zuordnen/Aktivieren eines Themas für eine Zugriffs-URL
GET
/api/access_url_rel_color_themes
Auflisten der Themenzuordnungen für die aktuelle Zugriffs-URL
Erstellen eines benutzerdefinierten Themes
Der Standard-Workflow erfolgt über die Admin-Benutzeroberfläche (Admin → Farbthemen), die die oben genannten API-Endpunkte aufruft. Um ein Theme programmgesteuert zu erstellen:
POST /api/color_themesmit einem JSON-Body:
Dies speichert die Entität und schreibt var/themes/my-theme/colors.css.
POST /api/access_url_rel_color_themes, um es mit der aktuellen Zugriffs-URL zu verknüpfen und zu aktivieren:
Um benutzerdefinierte Bilder (Logo, Favicon, Hintergründe) hinzuzufügen, laden Sie diese über POST /themes/{slug}/logos hoch oder platzieren Sie sie direkt in var/themes/{slug}/images/.
Referenz für Farbvariablen
Alle Variablen, die von der Standard-Tailwind-Konfiguration erwartet werden:
--color-primary-base
Primäre Markenfarbe
--color-primary-gradient
Dunklerer Farbverlauf für Primärfarbe
--color-primary-button-text
Textfarbe auf primären Schaltflächen
--color-primary-button-alternative-text
Alternative Textfarbe auf primären Schaltflächen
--color-secondary-base
Sekundäre Akzentfarbe
--color-secondary-gradient
Farbverlauf für Sekundärfarbe
--color-secondary-button-text
Textfarbe auf sekundären Schaltflächen
--color-tertiary-base
Tertiäre Farbe
--color-tertiary-gradient
Farbverlauf für Tertiärfarbe
--color-tertiary-button-text
Textfarbe auf tertiären Schaltflächen
--color-success-base
Farbe für Erfolgszustand
--color-success-gradient
Farbverlauf für Erfolgszustand
--color-success-button-text
Textfarbe auf Erfolgsschaltflächen
--color-info-base
Farbe für Informationszustand
--color-info-gradient
Farbverlauf für Informationszustand
--color-info-button-text
Textfarbe auf Informationsschaltflächen
--color-warning-base
Farbe für Warnzustand
--color-warning-gradient
Farbverlauf für Warnzustand
--color-warning-button-text
Textfarbe auf Warnschaltflächen
--color-danger-base
Farbe für Gefahren-/Fehlerzustand
--color-danger-gradient
Farbverlauf für Gefahrenzustand
--color-danger-button-text
Textfarbe auf Gefahrenschaltflächen
--color-form-base
Akzentfarbe für Formularelemente
Zuletzt aktualisiert
War das hilfreich?