Projektstruktur
Verzeichnisse auf oberster Ebene
chamilo/
├── assets/ # Frontend-Quellcode
│ ├── vue/ # Vue 3 Anwendung (Komponenten, Ansichten, Router, Stores)
│ ├── css/ # SCSS-Stylesheets
│ └── js/ # Legacy JavaScript
├── config/ # Symfony-Konfiguration (Routen, Dienste, Pakete)
├── public/ # Web-Root (index.php, Legacy PHP-Seiten, Plugins)
│ ├── main/ # Legacy PHP-Module (ein Unterverzeichnis pro Tool)
│ └── plugin/ # Gebündelte und benutzerdefinierte Plugins
├── src/ # PHP-Quellcode (Symfony-Bundles)
│ ├── CoreBundle/ # Kernplattformlogik
│ ├── CourseBundle/# Kursspezifische Funktionen
│ └── LtiBundle/ # LTI 1.3 Integration
├── templates/ # Twig-Vorlagen
├── var/ # Cache, Logs, Uploads (generiert)
├── vendor/ # Composer-Abhängigkeiten (generiert)
├── node_modules/ # npm-Abhängigkeiten (generiert)
└── translations/ # ÜbersetzungsdateienQuellcode (src/)
CoreBundle
Das größte Bundle. Wichtige Unterverzeichnisse:
Entity/
Doctrine-Entitäten (User, Course, Session, ResourceNode, etc.)
Controller/
Admin-, API-Aktions- und Seiten-Controller (der Unterordner Api/ enthält benutzerdefinierte API Platform-Aktionen)
Settings/
Einstellungsschemadateien (Plattformkonfiguration)
Repository/
Doctrine-Repositories
AiProvider/
KI-Anbieter-Implementierungen (OpenAI, Gemini, Mistral, DeepSeek, Grok)
Tool/
Kurs-Tool-Definitionen
Security/
Voters, Authentifikatoren, Autorisierung
EventListener/
Ereignis-Listener
EventSubscriber/
Ereignis-Abonnenten
Command/
Symfony-Konsolenbefehle
Migrations/
Datenbankmigrationen
Twig/
Twig-Erweiterungen
Storage/
Flysystem-Speicheradapter
CourseBundle
Kursspezifische Entitäten und Logik:
Entity/
Kursinhalts-Entitäten (CDocument, CQuiz, CLp, CForum, CStudentPublication, etc.)
Controller/
Kurs-Controller
Settings/
Einstellungsschemata auf Kursebene
Component/CourseCopy/
Kurs-Import/Export (Common Cartridge, Moodle)
LtiBundle
LTI 1.3 Integration:
Entity/
LTI-Plattform-, Tool- und Bereitstellungs-Entitäten
Controller/
LTI-Start- und Konfigurations-Endpunkte
Frontend (assets/vue/)
Konfiguration (config/)
Symfony fügt automatisch die Basisdateien packages/*.yaml mit denen im entsprechenden Umgebungsunterverzeichnis (dev/, prod/ oder test/) zusammen, sodass umgebungsspezifische Dateien nur die Werte überschreiben müssen, die sich unterscheiden.
Build-Konfiguration
webpack.config.js
Webpack Encore-Konfiguration (Einstiegspunkte, Loader, Plugins)
tailwind.config.js
Tailwind CSS-Konfiguration (Inhaltspfade, Theme-Erweiterungen, Plugins)
tsconfig.json
TypeScript-Konfiguration
eslint.config.mjs
ESLint-Regeln (flache Konfiguration)
.prettierrc.json
Prettier-Formatierungsregeln
Alle Dateien befinden sich im Projektstammverzeichnis. PostCSS-Plugins (Tailwind + Autoprefixer) werden inline in webpack.config.js über enablePostCssLoader() konfiguriert — es gibt keine eigenständige postcss.config.js. webpack.config.js liest tailwind.config.js indirekt über PostCSS, sodass Änderungen an den Abschnitten content oder theme von Tailwind bei der nächsten Ausführung von yarn encore dev / yarn encore production wirksam werden.
Webpack-Einstiegspunkte
Der Build erzeugt folgende Bundles:
JavaScript:
vue— Haupt-Vue-3-Anwendung (assets/vue/main.js)vue_installer— Installationsassistent (assets/vue/main_installer.js)legacy_app,legacy_exercise,legacy_lp,legacy_document— Ältere JS für Seiten, die noch nicht zu Vue migriert wurden
CSS:
app— Haupt-Stylesheet (assets/css/app.scss)Plus spezialisierte Stylesheets:
chat,document,editor,editor_content,markdown,print,responsive,scorm
CSS-Struktur (assets/css/)
Tailwind CSS
Tailwind ist über PostCSS integriert. assets/css/_tailwind.scss gibt die Basis-, Komponenten- und Utility-Ebenen aus; assets/css/app.scss importiert es zuerst, sodass Tailwind-Utilities in allen anderen Teil-Dateien verfügbar sind. Die Tailwind-Konfiguration – Inhaltspfade für das Bereinigen, Theme-Erweiterungen und Plugins – befindet sich in tailwind.config.js im Projektstammverzeichnis (/var/www/chamilo/tailwind.config.js).
Benutzerdefinierte Utility-Klassen und Komponentenklassen, die mit @layer definiert sind (sichtbar in app.scss), folgen der Layering-Konvention von Tailwind, sodass benutzerdefinierte Klassen die gleichen Spezifitätsregeln wie die generierten Utilities einhalten.
Farbthemen
Chamilo unterstützt ein Farbthemen-System, das direkt über die Admin-Oberfläche konfiguriert werden kann (Admin > Farbthemen). Jedes gespeicherte Thema schreibt seine Dateien in ein dediziertes Verzeichnis unter var/themes/:
colors.css definiert CSS benutzerdefinierte Eigenschaften als durch Leerzeichen getrennte RGB-Kanal-Tripletts anstelle von rgb()-Werten, was es Tailwind ermöglicht, Opazitätsvarianten (z. B. bg-primary/50) ohne zusätzliche Konfiguration zu erstellen:
Die Theme-Ebene liegt über dem kompilierten Tailwind/SCSS-Bundle: Der Browser lädt colors.css nach dem Haupt-Stylesheet, sodass Theme-Änderungen sofort wirksam werden, ohne dass ein Build-Schritt erforderlich ist.
Zuletzt aktualisiert
War das hilfreich?