開發 Joomla 元件是掌握 Joomla 擴充架構的核心技能。本文從零開始,帶你建立一個 com_reviews (餐廳評論) 元件,涵蓋目錄結構規範、安裝 SQL 註冊選單、前後台進入點、工具列建立與狀態切換、MVC 分層概念,並說明 Joomla 獨特的「前後台程式碼物理隔離」設計哲學。
元件名稱 唯一、無空格、小寫,前綴 com_。
# 前台 (Site) components/com_reviews/ ├── reviews.php # 進入點 (舊版單檔風格) ├── controller.php # 控制器 ├── models/ # 模型 ├── views/ # 視圖 │ └── review/ │ ├── view.html.php │ └── tmpl/ │ └── default.php └── routers.php # 路由 (SEF) # 後台 administrator/components/com_reviews/ ├── admin.reviews.php # 進入點 ├── controller.php ├── controllers/ ├── models/ ├── views/ │ └── reviews/ │ ├── view.html.php │ ├── tmpl/ │ │ └── default.php │ └── toolbar.reviews.html.php # 工具列輸出 └── toolbar.reviews.php # 工具列邏輯
components/com_reviews/reviews.php<?php
defined('_JEXEC') or die('Restricted access');
echo '<div class="componentheading">Restaurant Reviews</div>';
administrator/components/com_reviews/admin.reviews.php<?php
defined('_JEXEC') or die('Restricted access');
echo 'Restaurant Reviews Administration';
index.php?option=com_reviewsadministrator/index.php?option=com_reviewsINSERT INTO `#__components`
(`name`, `link`, `admin_menu_link`, `admin_menu_alt`, `option`, `admin_menu_img`, `params`)
VALUES
('Restaurant Reviews',
'option=com_reviews',
'option=com_reviews',
'Manage Reviews',
'com_reviews',
'js/ThemeOffice/component.png',
'');
執行後,後台「元件」選單自動出現「Restaurant Reviews」。
Joomla 後台工具列分離 邏輯 與 輸出:
toolbar.reviews.html.php<?php
defined('_JEXEC') or die;
class TOOLBAR_reviews {
function _DEFAULT() {
JToolBarHelper::title(JText::_('Restaurant Reviews'), 'generic.png');
JToolBarHelper::publishList();
JToolBarHelper::unpublishList();
JToolBarHelper::editList();
JToolBarHelper::deleteList();
JToolBarHelper::addNew();
}
function _NEW() {
JToolBarHelper::save();
JToolBarHelper::apply();
JToolBarHelper::cancel();
}
}
toolbar.reviews.php<?php
defined('_JEXEC') or die;
require_once JApplicationHelper::getPath('toolbar_html'); // 載入輸出類
switch ($task) {
case 'edit':
case 'add':
TOOLBAR_reviews::_NEW();
break;
default:
TOOLBAR_reviews::_DEFAULT();
break;
}
URL &task=add 觸發 _NEW() 顯示「儲存/套用/取消」;預設顯示「發布/取消發布/編輯/刪除/新增」。
| 方法 | 功能 | 典型 Task |
|---|---|---|
| publishList() | 發布勾選項 | publish |
| unpublishList() | 取消發布 | unpublish |
| editList() | 編輯第一個勾選項 | edit |
| deleteList() | 刪除勾選項 (含確認) | delete |
| addNew() | 新增項目 | add |
| save() | 儲存表單 | save |
| apply() | 套用並停留 | apply |
| cancel() | 取消返回 | cancel |
| custom() | 自訂按鈕 | 自訂 task |
require_once JPATH_SITE . '/components/com_reviews/models/review.php' 共用資料層。components/com_reviews/ ├── src/ │ ├── Controller/ # 控制器 │ ├── Model/ # 模型 │ ├── View/ # 視圖 (Html/Json/Feed) │ └── Service/ # 服務層 ├── tmpl/ # 佈局檔 ├── forms/ # 表單 XML ├── config.xml # 參數設定 ├── script.php # 安裝/更新腳本 └── com_reviews.xml # 安裝清單
採用 src/ 命名空間 Joomla\Component\Reviews\Site / Administrator,支援自動載入、依賴注入、單元測試。
src/ 現代架構 → 企業級開發標準。Joomla 元件開發核心在於命名規範、前後台物理隔離、工具列任務驅動、MVC 分層。從單檔進入點開始,逐步遷移至現代 src/ 架構,即能建構安全、可維護、符合生態規範的擴充套件。