ThinkPHP 主題機制可實現移動端/PC端模板自動切換。本文介紹 DEFAULT_THEME 配置、移動端檢測函數 ismobile()、公共控制器 _initialize 掛載切換邏輯,實現「偽原生」移動端適配,適合無法採用響應式設計的大型項目。
C('DEFAULT_THEME', 'Mobile')Tpl/Mobile/ 目錄下對應模板Tpl/
├── default/ # PC 端默認模板
│ ├── Index/
│ │ └── index.html
│ └── Public/
│ ├── header.html
│ └── footer.html
└── Mobile/ # 移動端模板 (DEFAULT_THEME=Mobile 時自動讀取)
├── Index/
│ └── index.html
└── Public/
├── header.html
└── footer.html
| 方案 | 原理 | 優點 | 缺點 | 適用場景 |
|---|---|---|---|---|
| 響應式設計 | CSS Media Query + 彈性佈局 | 單一代碼庫、維護簡單、SEO友好 | 隱藏元素仍下載、複雜交互難處理、大型站點性能差 | 中小型站點、內容型、預算有限 |
| 主題切換 (本文) | 服務端識別 UA 載入不同模板 | 精簡輸出、邏輯完全分離、性能最優、大型站點標配 | 維護雙套模板、需處理 Vary 快取、UA 偽裝可能誤判 | 電商、社交、企業級、高併發、複雜交互 |
Vary: User-Agent 避免 PC/移動端快取混淆Runtime/Cache/ 會按主題自動區分上篇介紹的 API 介面 (JSON 輸出) 與本篇模板切換 (HTML 輸出) 可共存:
Api/ 控制器,輸出 JSON,不受主題影響Home/ 控制器,輸出 HTML,自動切換主題/api/... vs /web/... 或子域名 api.domain.com / m.domain.com