專案結構

最上層目錄

chamilo/
├── assets/          # 前端原始碼
│   ├── vue/         # Vue 3 應用程式(元件、視圖、路由、狀態管理)
│   ├── css/         # SCSS 樣式表
│   └── js/          # 舊版 JavaScript
├── config/          # Symfony 設定(路由、服務、套件)
├── public/          # 網頁根目錄(index.php、舊版 PHP 頁面、外掛)
│   ├── main/        # 舊版 PHP 模組(每個工具一個子目錄)
│   └── plugin/      # 內建及自訂外掛
├── src/             # PHP 原始碼(Symfony 套件)
│   ├── CoreBundle/  # 核心平台邏輯
│   ├── CourseBundle/# 課程專屬功能
│   └── LtiBundle/   # LTI 1.3 整合
├── templates/       # Twig 範本
├── var/             # 快取、記錄、上傳檔案(產生的)
├── vendor/          # Composer 相依套件(產生的)
├── node_modules/    # npm 相依套件(產生的)
└── translations/    # 翻譯檔案

原始碼 (src/)

CoreBundle

最大的套件。值得注意的子目錄:

目錄
內容

Entity/

Doctrine 實體(User、Course、Session、ResourceNode 等)

Controller/

管理、API 動作及頁面控制器(Api/ 子資料夾包含自訂 API Platform 動作)

Settings/

設定架構檔案(平台設定)

Repository/

Doctrine 儲存庫

AiProvider/

AI 提供者實作(OpenAI、Gemini、Mistral、DeepSeek、Grok)

Tool/

課程工具定義

Security/

投票者、驗證器、授權

EventListener/

事件監聽器

EventSubscriber/

事件訂閱者

Command/

Symfony 主控台指令

Migrations/

資料庫遷移

Twig/

Twig 延伸模組

Storage/

Flysystem 儲存適配器

CourseBundle

課程專屬實體與邏輯:

目錄
內容

Entity/

課程內容實體(CDocument、CQuiz、CLp、CForum、CStudentPublication 等)

Controller/

課程控制器

Settings/

課程層級設定架構

Component/CourseCopy/

課程匯入/匯出(Common Cartridge、Moodle)

LtiBundle

LTI 1.3 整合:

目錄
內容

Entity/

LTI 平台、工具及部署實體

Controller/

LTI 啟動及設定端點


前端 (assets/vue/)


組態 (config/)

Symfony 會自動合併基礎 packages/*.yaml 檔案與對應環境子目錄 (dev/prod/test/) 中的檔案,因此環境特定檔案只需覆寫不同的值即可。

建置組態

檔案
用途

webpack.config.js

Webpack Encore 組態 (entries, loaders, plugins)

tailwind.config.js

Tailwind CSS 組態 (content paths, theme extensions, plugins)

tsconfig.json

TypeScript 組態

eslint.config.mjs

ESLint 規則 (flat config)

.prettierrc.json

Prettier 格式化規則

所有檔案位於專案根目錄。PostCSS 外掛 (Tailwind + Autoprefixer) 透過 webpack.config.js 中的 enablePostCssLoader() 進行內嵌組態 — 沒有獨立的 postcss.config.jswebpack.config.js 透過 PostCSS 間接讀取 tailwind.config.js,因此 Tailwind 的 contenttheme 區段變更將在下一次執行 yarn encore dev / yarn encore production 時生效。

Webpack 進入點

建置會產生以下套件:

JavaScript:

  • vue — 主要 Vue 3 應用程式 (assets/vue/main.js)

  • vue_installer — 安裝精靈 (assets/vue/main_installer.js)

  • legacy_applegacy_exerciselegacy_lplegacy_document — 尚未遷移至 Vue 的頁面之舊版 JS

CSS:

  • app — 主要樣式表 (assets/css/app.scss)

  • 加上專用樣式表:chatdocumenteditoreditor_contentmarkdownprintresponsivescorm

CSS 結構 (assets/css/)



Tailwind CSS

Tailwind 是透過 PostCSS 整合的。assets/css/_tailwind.scss 會產生 base、component 和 utility 層;assets/css/app.scss 會首先匯入它,因此 Tailwind 工具類別可在所有其他 partials 中使用。Tailwind 配置 — 用於 purging 的內容路徑、主題擴充和外掛程式 — 位於專案根目錄的 tailwind.config.js/var/www/chamilo/tailwind.config.js)。

使用 @layer 定義的自訂工具類別和元件類別(在 app.scss 中可見)遵循 Tailwind 的分層慣例,因此使用者定義的類別會遵守與產生的工具類別相同的特異性規則。

顏色主題

Chamilo 支援一種顏色主題系統,可直接從管理介面進行配置(管理 > 顏色主題)。每個儲存的主題會將其檔案寫入 var/themes/ 下的專屬目錄:

colors.css 將 CSS 自訂屬性定義為以空格分隔的 RGB 通道三元組,而非 rgb() 值,這允許 Tailwind 在無需額外配置的情況下組合不透明度變體(例如 bg-primary/50):

主題層位於編譯後的 Tailwind/SCSS 組合包之上:瀏覽器會在主樣式表之後載入 colors.css,因此主題變更會立即生效,無需建置步驟。

最後更新於

這有幫助嗎?