ShopNC 作為國內早期成熟的 B2B2C/C2C/O2O 多商戶商城系統,採用自研 MVC 框架。理解其目錄結構與模塊劃分,是高效進行二次開發、功能擴展、性能優化的前提。本文基於實際項目經驗,系統梳理核心架構。
shopnc/
├── admin/ # 後台管理中心
├── chat/ # 在線 IM 客服模塊
├── circle/ # 圈子/社區模塊
├── cms/ # 文章/CMS 內容模塊
├── core/ # 框架核心庫 (底層 MVC、DB、緩存、工具類)
├── data/ # 數據層 (Model、緩存、配置、日志、上傳、API SDK)
├── microshop/ # 微信小程序/微商城端
├── mobile/ # 手機 App API 服務端
├── shop/ # 前台 PC 商城 (核心交易鏈路)
└── wap/ # 手機 WAP 端
| 目錄 | 業務域 | 典型入口 | 關鍵子目錄 |
|---|---|---|---|
| admin | 平台運營後台 | /admin/index.php | control(控制器)、model(模型)、templates/default/layout(佈局) |
| shop | 前台購物流程 | /shop/index.php | control、model、templates/default/{home,buy,member,store,seller} |
| core | 框架內核 | 無直接入口 | framework/{core,db,cache,function,libraries} |
| data | 數據持久化與共享 | 無直接入口 | model(所有模型類)、cache(文件緩存)、api(第三方 SDK)、resource(靜態資源) |
| microshop | 微信生態端 | /microshop/index.php | control、model、templates/default |
| mobile | App API 服務端 | /mobile/index.php | api/payment/alipay、control、model |
shop/
├── api/ # 第三方支付/登錄 SDK (alipay, tenpay, qq, sina)
├── config/ # 配置文件 (config.ini.php, db.ini.php 等)
├── control/ # 控制器 (業務邏輯入口)
│ ├── home.php # 首頁
│ ├── goods.php # 商品詳情
│ ├── cart.php # 購物車
│ ├── member_*.php # 會員中心各模塊
│ └── store_*.php # 店鋪相關
├── framework/ # 應用層框架擴展
│ ├── function/ # 業務助手函數
│ └── libraries/ # 業務類庫
├── install/ # 安裝向導
├── language/ # 多語言包
├── model/ # 本模塊私有模型 (少用,主模型在 data/model)
├── resource/ # 靜態資源 (JS、CSS、圖片、幂編輯器)
└── templates/ # 視圖模板
└── default/
├── buy/ # 購買流程 (cart, checkout, order, payment)
├── home/ # 展示頁 (index, goods_list, brand, search)
├── layout/ # 佈局骨架 (header, footer, left, right)
├── member/ # 會員中心
├── seller/ # 賣家中心
├── store/ # 店鋪裝修/頁面
└── sns/ # 社交分享
data/model/,命名規範 XxxModel.class.php,如 GoodsModel、OrderModel。templates/default/ 下對應功能目錄,純 PHP 模板語法 ()。control/ 下,類名 XxxControl 繼承 BaseHomeControl (前台) 或 BaseAdminControl (後台)。https://domain/shop/index.php?act=goods&op=index
# act = 控制器名 (goods -> goodsControl)
# op = 方法名 (index -> indexOp())
act 參數定位 shop/control/{act}Control.php。{op}Op() 方法。Tpl::showpage('template_name') 指定模板文件 (無 .php 後綴),對應 templates/default/{功能目录}/{template_name}.php。Model('model_name') 實例化模型,模型文件在 data/model/{model_name}Model.class.php。Tpl::output('var', $data) 傳給模板。ShopNC 核心文件升級會覆蓋
core/、data/model/、各模塊control/、framework/。二次開發務必:
- 記錄所有修改文件清單 (Git 管理差異)。
- 業務擴展優先在
framework/function/、framework/libraries/新增文件,避免改動核心類。- 模板修改複製一套新風格目錄
templates/mystyle/,配置切換,不動默認default/。- 模型新增方法建議在子類擴展或使用
BaseModel的動態方法調用機制。
掌握目錄結構與定位規律,ShopNC 二次開發從「大海撈針」變為「順藤摸瓜」,效率提升數倍。