首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

ThinkSNS 核心架構與目錄結構深度解析:從核心服務到應用開發全流程

     編輯:PHP 相關知識

前言

ThinkSNS 作為基於 ThinkPHP 的社交網絡系統,其模組化架構設計極具參考價值。本文詳細拆解核心層、擴展層、應用層三大體系的職責邊界、目錄佈局、命名規範,並以「禮物應用」為例示範從建表到上線的完整開發流程,幫助開發者快速上手二次開發或移植模組。

系統核心術語對照表

術語職責目錄位置
核心MVC 分離、DB 抽象、基礎類庫/core/
服務全域通用功能封裝(郵件、認證等)/addons/services/
公共 Model跨應用共用資料模型(附件、地區等)/addons/models/
插件獨立功能模組(第三方登入、勳章等)/addons/plugins/
Widget頁面可複用程式碼區塊(評論、好友選擇)/addons/widgets/
第三方類庫外部開源庫/addons/libs/
應用獨立業務模組(微博、相簿、日誌)/apps/
API對外介面/api/

完整目錄樹結構

ThinkSNS2.0/
├─ _runtime/           運行時快取
├─ addons/             擴展庫
│  ├─ libs/            第三方類庫
│  ├─ models/          公共 Model
│  ├─ plugins/         插件
│  ├─ services/        系統服務
│  └─ widgets/         系統 Widget
├─ api/                API 庫
├─ apps/               系統應用
│  ├─ admin/           管理後台
│  ├─ home/            Home 應用
│  ├─ myop/            漫游應用
│  ├─ wap/             手機 WAP
│  └─ weibo/           微博應用
├─ core/               核心
│  ├─ sociax/          系統核心文件
│  ├─ ThinkPHP/        ThinkPHP 核心
│  └─ sociax.php       核心引導
├─ data/               站點資料
├─ install/            安裝文件
├─ public/             靜態資源
├─ access.php          節點權限控制
├─ cleancache.php      快取清理
├─ config.inc.php      站點配置
├─ index.php           統一入口
├─ shorturl.php        短網址
└─ thumb.php           縮圖生成

應用標準目錄結構

apps/
└─ gift/               應用代號
   ├─ Appinfo/         安裝資訊、圖示、SQL
   ├─ Common/          common.php 公共函數
   ├─ Conf/            config.php 專案配置
   ├─ Language/        多語言包
   ├─ Lib/
   │  ├─ Action/       控制器
   │  ├─ Model/        模型
   │  └─ Widget/       應用專用 Widget
   └─ Tpl/             模板、CSS、JS
      └─ default/
         ├─ Index/     對應 IndexAction
         └─ Public/    共用樣式/腳本

URL 路由規則

統一入口 index.php,路由格式:

index.php?app=APP_NAME&mod=Action&act=method
  • app:應用目錄名(如 weibo、gift)
  • mod:控制器類名(不含 Action 後綴)
  • act:方法名

核心服務調用速查表

服務類型調用方式範例
系統函數直接呼叫getUserName($uid)
服務service('Name')->method()service('Passport')->isLogged()
公共 Modelmodel('Name')->method()model('Area')->getAreaList()
WidgetW('Name', $params){:W('SelectFriend')}
第三方類庫include_once 後實例化new PHPMailer()

前端整合組件

彈出視窗

<script>
function openDialog() {
    ui.box.load('url/to/content', {title: '標題'});
}
function closeDialog() {
    ui.box.close();
}
</script>

提示訊息

<script>
ui.success('更新完成');
ui.error('新 Email 已存在');
</script>

KISSY 編輯器

<textarea id="editor" name="content"></textarea>
<script>
$(document).ready(function(){
    E = KISSY.Editor("editor");
});
</script>

完整應用開發流程:以「禮物應用」為例

1. 資料庫設計

  • ts_gift_category:分類(id, name, status, cTime)
  • ts_gift:禮物(id, categoryId, name, num, price, img, status, cTime)
  • ts_gift_user:送禮記錄(id, fromUserId, toUserId, giftPrice, giftImg, sendInfo, sendWay, cTime)

SQL 檔置於 Appinfo/install.sql,含建表、預設分類、禮物資料、系統配置、微博模板。

2. 建立應用目錄結構

依標準結構建立 apps/gift/ 下所有子目錄,注意大小寫。

3. 公共函數層

// Common/common.php
function getConfig($key = null) { /* 讀取應用配置 */ }

4. Model 層

// Lib/Model/GiftCategoryModel.class.php
class GiftCategoryModel extends Model { }

// Lib/Model/GiftModel.class.php
class GiftModel extends Model { }

// Lib/Model/UserGiftModel.class.php
class UserGiftModel extends Model {
    public function sendGift($data) {
        // 扣除積分邏輯
        $setCredit = X('Credit');
        $userCredit = $setCredit->getUserCredit($fromUid);
        if ($userCredit[$moneyType]['credit'] < $prices) {
            return $userCredit[$moneyType]['alias'] . '不足,贈送失敗~';
        }
        $setCredit->setUserCredit($fromUid, [$moneyType => $prices], -1);
        // 發送通知
        $this->__doNotify($toUser, $sendInfo, $giftInfo, $fromUid, $appId);
        return true;
    }
}

5. Action 層

// Lib/Action/IndexAction.class.php
class IndexAction extends Action {
    public function index() {
        $money = X('Credit')->getUserCredit($this->mid);
        $moneyType = getConfig('credit');
        $this->assign('money', $money[$moneyType]);
        // ... 顯示禮物列表、分頁
    }
    public function sendbox() {
        if (isset($_SESSION['gift_send_weibo'])) {
            $this->assign('tpl_data', $_SESSION['gift_send_weibo']);
            unset($_SESSION['gift_send_weibo']);
        }
    }
}

6. 模板層

遵循 ThinkSNS 佈局慣例:

<include file="__THEME__/header" />
<include file="../Public/_mainNav" />
<div class="content">
  <div class="main no_l">
    <div class="mainbox">
      <div class="mainbox_C no_r">
        
        <div id="Pagination" class="pagination">{$gifts.html}</div>
      </div>
    </div>
  </div>
</div>
<include file="__THEME__/footer" />
  • 好友選擇:{:W('SelectFriend')} → $_POST['fri_ids'] 取得 ID 陣列
  • 分頁:findPage() 回傳物件含 $gifts.html
  • 微博分享:{:W('Weibo', ['tpl_name'=>'gift_send_weibo', 'button_title'=>'分享'])}

7. 通知與動態模板

// Language/cn/notify.php
return array(
    'gift_send' => array(
        'title' => '{actor}給您送了一個禮物',
        'body'  => $img . '
' . $sendback . '
... 去看看' ) );

8. 後台管理

// Lib/Action/AdminAction.class.php
import('admin.Action.AdministratorAction');
class AdminAction extends AdministratorAction {
    public function _initialize() {
        parent::_initialize(); // 權限檢查
        // ...
    }
}

對應模板置於 Tpl/default/Admin/。

9. 安裝/卸載包

  • info.php:應用元資料(名稱、入口、圖示、統計入口等)
  • install.php:執行 install.sql,失敗自動回滾
  • uninstall.php:刪除資料表、系統配置、模板、積分規則

10. 除錯技巧

  1. dump($var) 列印變數
  2. M()->getLastSql() 檢查 SQL
  3. Conf/config.php 設 DEBUG_MODE = true 開啟 ThinkPHP 除錯模式(需清快取)

特殊應用說明

微博應用

雖屬 apps/weibo/,但為核心應用:Widget、WAP、API 均依賴其資料與介面。

漫游應用

源自康盛漫游平台,URL 結構與 ThinkSNS 不同,使用獨立精簡框架,模板獨立於 apps/myop/themes/classic/,修改公共版面時需同步更新此目錄。

命名與編碼規範

遵循 ThinkPHP 官方規範:命名與編碼規範

總結

ThinkSNS 採用「核心 + 擴展 + 應用」三層解耦架構,應用獨立性極高,開發新功能等同於建立新專案。掌握目錄規範、服務調用、模板佈局、安裝包制作五大要素,即可高效進行二次開發或模組移植。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved