drupal/
├── core/ # Drupal 8/9/10 核心程式碼(舊版在 includes/、modules/)
├── modules/ # 貢獻/自訂模組(舊版 sites/all/modules/)
├── themes/ # 貢獻/自訂主題(舊版 sites/all/themes/)
├── profiles/ # 安裝設定檔(標準、最小、測試等)
├── sites/ # 多站點配置、檔案儲存、settings.php
├── vendor/ # Composer 相依套件
├── index.php # 進入點
├── update.php # 資料庫更新腳本
├── cron.php # 排程任務入口
├── robots.txt # 搜尋引擎爬蟲規則
├── composer.json # 專案相依管理
└── .htaccess / web.config
core/lib/Drupal/:PSR-4 命名空間,包含所有核心模組服務、控制器、表單、實體、插件等core/modules/:核心模組(如 node、user、taxonomy、views、block、field 等)core/themes/:核心主題(Stark、Stable、Classy、Bartik、Seven)core/assets/:前端資源(JS、CSS、圖示)core/includes/:引導載入、錯誤處理、常用函數| 子目錄 | 用途 |
|---|---|
| contrib/ | 社群貢獻模組(透過 Composer 安裝) |
| custom/ | 專案自訂模組 |
| features/ | Features 模組匯出的配置模組 |
模組標準結構:
mymodule/
├── mymodule.info.yml # 模組中繼資料
├── mymodule.module # Hook 實作
├── mymodule.routing.yml # 路由定義
├── src/ # PSR-4 類別
│ ├── Controller/
│ ├── Form/
│ ├── Plugin/
│ └── Entity/
├── config/ # 配置匯入/匯出
├── templates/ # Twig 模板覆寫
└── tests/ # PHPUnit 測試
mytheme/
├── mytheme.info.yml # 主題定義
├── mytheme.libraries.yml # CSS/JS 資源庫
├── mytheme.theme # 預處理函數、模板建議
├── config/ # 區塊配置等
├── templates/ # Twig 模板
│ ├── html.html.twig
│ ├── page.html.twig
│ ├── node.html.twig
│ └── block.html.twig
├── css/
├── js/
└── logo.svg
sites/
├── default/
│ ├── settings.php # 主配置(資料庫、信任主機、私有金鑰等)
│ ├── services.yml # 服務容器覆寫
│ ├── files/ # 公開/私有檔案儲存
│ │ ├── styles/ # 圖片樣式衍生檔
│ │ └── ...
│ └── config_/ # 配置同步目錄(匯入/匯出)
├── example.com/ # 多站點:不同域名獨立配置
│ └── settings.php
└── sites.php # 站點別名映射(可選)
standard:標準安裝(內含常用模組)minimal:最小安裝(僅核心)demo_umami:示範內容(食譜網站)包含 Symfony 元件、Guzzle、Twig、Doctrine、PHPUnit 等所有第三方函式庫。不可手動修改,透過 composer require/update 管理。
| 檔案 | 用途 |
|---|---|
| index.php | HTTP 請求進入點,啟動 Kernel、處理請求、輸出回應 |
| update.php | 執行資料庫結構更新(需登入或設定免密) |
| cron.php | 排程任務入口(建議用 Drush 或系統 cron 呼叫) |
| robots.txt | 預設爬蟲規則,允許大多數路徑 |
| .htaccess | Apache 重寫規則、安全設定、效能優化 |
| composer.json | 專案相依宣告、腳本、最低穩定度 |
| Drupal 7 | Drupal 8+ | 說明 |
|---|---|---|
| includes/ | core/includes/ + core/lib/ | 核心函數與引導 |
| modules/ (核心) | core/modules/ | 核心模組移至 core/ |
| modules/ (貢獻/自訂) | modules/contrib/, modules/custom/ | 分類更清晰 |
| themes/ (核心) | core/themes/ | 核心主題移至 core/ |
| themes/ (貢獻/自訂) | themes/contrib/, themes/custom/ | 同上 |
| sites/all/ | modules/, themes/ (根目錄) | 簡化路徑 |
| .module + .inc | PSR-4 src/ + .module | 物件導向、自動載入 |
| PHPTemplate | Twig | 模板引擎升級 |
drush cr 或刪除 sites/default/files/php/twig/、sites/default/files/config_*/drush cex -y → 產生於 sites/default/config_/ drush cim -ydrush generate moduledrush sql:schemasettings.php 設定 $settings['config_sync_directory'] 指向 Web 根目錄外files/ 私有檔案目錄設為不可直接 Web 存取vendor/、core/ 不應暴露於 Web(Nginx/Apache 已透過 .htaccess 限制)update.php 免密存取composer install --no-dev 部署熟悉 Drupal 目錄結構,是模組開發、主題客製化、多站點架設與自動化部署的基礎。