thinksns 核心架構及目錄結構_PHP教程

來源:互聯網
上載者:User
核心與服務、公用Model、外掛程式、Widget、第三方類庫共同構成了系統的大根基,其他所有應用都其上構建。術語解釋 核心:源自ThinkPHP架構,為系統提供MVC分離、底層資料庫支援等核心功能,並提供諸多便捷的類庫和函數庫供系統其他部分使用。位於/core/目錄。 服務:一組全域通用的類庫,實現對特定功能的封裝。位於/addons/services/目錄,如郵件發送(Mail)、使用者認證(Passport)等。 公用Model:一組全域通用模型。位於/addons/models/目錄,如附件模型(AttachModel)、地區模型(AreaModel)等。 外掛程式:為實現某種功能而增加的程式檔案。位於/addons/plugins/目錄,包括第三方平台登陸外掛程式和勳章兩種。 Widget:一組可以在任意HTML頁面調用的代碼塊。位於/addons/widgets/目錄,包括評論(Comment)、選擇好友(SelectFriend)等。 第三方類庫:其他開源的第三方類庫。位於/addons/libs/目錄,如phpmailer等。 應用:實現特定功能的獨立模組,基於上述的系統結構構建。位於/apps/目錄,如日誌(Blog)、相簿(Photo)等。API:API(Application Programming Interface)。位於/api/目錄,如微博API、使用者資料API等。--------------------------------------------------------------------------------------------------------------------------------------微博微博雖然也是以系統獨立應用的身份出現(1所示),但它還肩負著系統核心應用的責任。許多系統元素完全構建於微博應用之上,如微博Widget(即“分享”功能)是直接操作微博,而WAP應用則是完全使用微博API架構。漫遊平台系統應用中另一個特例是漫遊應用。漫遊應用來源於康盛的漫遊平台,由於漫遊平台的URL根據UCHome的目錄結構產生,這與ThinkSNS的目錄結構完全不同,而且還需兼顧到漫遊平台的可移植性,所以整合的漫遊應用不走標準的ThinkSNS2.0核心,而是使用漫遊應用內部已實現的一個最簡版架構。如果您是模版開發人員,那您得特別留意!因為您在公用目錄下修改完頭部和左側的頁面後,還要修改漫遊下的頭部和左側(位於/apps/myop/themes/classic/目錄)。------------------------------------------------------------------------------------------------------------------------------------------目錄結構ThinkSNS2.0├─ _runtime ------------- 運行時緩衝├─ addons ------------- 擴充庫│ ├─ libs ------------- 第三方類庫│ ├─ models ------------- 公用Model│ ├─ plugins ------------- 外掛程式│ │ ├─ login ------------- 第三方平台登入外掛程式│ │ ├─ Medal ------------- 勳章│ │ └─ Tags ------------- 標籤│ ├─ services ------------- 系統服務│ └─ widgets ------------- 系統Widget├─ api ------------- API庫├─ apps ------------- 系統應用│ ├─ admin ------------- 管理後台│ ├─ home ------------- Home應用│ ├─ myop ------------- 漫遊應用│ ├─ wap ------------- 手機WAP端│ └─ weibo ------------- 微博應用├─ core ------------- 核心│ ├─ sociax ------------- 系統核心檔案│ ├─ ThinkPHP ------------- ThinkPHP核心│ └─ sociax.php ------------- 核心引導檔案├─ data ------------- 網站資料├─ install ------------- 系統安裝檔案├─ public│ ├─ admin ------------- 管理背景樣式│ ├─ js ------------- 系統JS庫│ └─ themes ------------- 系統模板├─ access.php ------------- 節點許可權控制檔案├─ cleancache.php ------------- 緩衝清理檔案├─ config.inc.php ------------- 網站設定檔├─ index.php ------------- 網站入口檔案├─ shorturl.php ------------- 短地址檔案└─ thumb.php ------------- 自動影像目錄標籤組建檔案------------------------------------------------------------------------------------------------------------------------------應用架構及目錄結構應用的目錄位置及結構:ThinkSNS2.0├─ apps├─ app├─ Appinfo ------------- 安裝資訊、安裝卸載執行檔案、表徵圖├─ Common ------------- 函數庫common.php├─ Conf ------------- 項目配置config.php├─ Language ------------- 通知、動態語言套件├─ Lib│ ├─ Action ------------- 操作類庫│ ├─ Model ------------- 模型類庫│ └─Widget ------------- 外掛程式庫└─ Tpl ------------- 模板、css、js檔案入口檔案ThinkSNS2.0隻有一個公用入口檔案,即ThinkSNS目錄下的index.php. URL 模式URL的訪問方式是index.php?app=APP_NAME&mod=Action&act=function 函數庫應用自身的函數庫放在該應用目錄下的Common/common.php 裡即可,這裡面的函數會隨該應用一起載入,可在該應用內隨意調用。系統函數庫請參閱附錄的“函數庫”。 模板[……]10 / 32應用的樣式檔案統一存放在的Tpl 下的Public/目錄,通過../Public/xxx.css引用,應用的JS檔案統一放到應用項目下的Tpl/下的Public/js/目錄,通過../Public/js/xxx.js引用。-------------------------------------------------------------------------------------------------------------------- 開發指南3.1命名規範與編碼規範參考ThinkPHP的命名與編碼規範:http://thinkphp.cn/Manual/203.2使用函數庫、類庫和Widget使用系統函數庫系統函數位於/core/sociax/functions.php和/core/sociax/extend.php檔案,為全域有效函數,可以直接調用。如擷取使用者暱稱的方法:$uname = getUserName($uid);使用服務服務位於/addons/services/目錄下,通過service('serviceName')->method ($param); 來使用服務。如驗證使用者是否登入的方法:$is_logged = service('Passport')->isLogged();使用公用Model公用Model位於/addons/models/目錄下,通過model('modelName')->method ($param);來使用公用Model。如獲得地區列表的方法:$area_list = model('Area')->getAreaList();使用WidgetWidget位於/addons/widgets/目錄下,通過W('widgetName',array('param'=> 'value'))來調用Widget。一般Widget是用在頁面中,所以調用方法為:{:W('widgetName',11 / 32array('param'=>'value'))}。如在頁面中展示可能認識的人的方法:{:W('RelatedUse',array('uid'=>'1'))}使用第三方類庫第三方類庫一般放置在/addons/libs/目錄下,使用前通過include_once等函數將檔案引入即可。3.3使用彈出窗、提示訊息、編輯器在ThinkSNS2.0的世界裡,jQuery庫是我們預設的JS架構,它在頁面頭部自動載入。ThinkSNS2.0在jQuery的基礎上對彈出窗、提示訊息和KISSY編輯器進行了封裝,本節主要介紹它們的使用方法(jQuery庫官方文檔:http://docs.jquery.com/Main_Page)。彈出窗圖2 彈出窗2所示,彈出窗至少包含標題、關閉按鈕和內容三部分,為保證使用者操作的連貫性,一般會在內容部分添加“確定”和“取消”按鈕。 彈出窗的調用方法: 在your_url中放置彈出窗的內容。注意:“確定”和“取消”按鈕也是內容的一部分! 關閉彈出窗:12 / 32提示訊息圖3 提示訊息調用方法:編輯器編輯相關的JS在頁面頭部自動載入,只需要調用E = KISSY.Editor("idOfTextarea"); 即可完成編輯器的載入。如:3.4 ThinkPHP開發指南ThinkPHP官方文檔– 開發指南:http://thinkphp.cn/Manual/50ThinkPHP官方文檔– 模板指南:http://thinkphp.cn/Manual/1943.5應用開發看了前面的介紹和說明,相信大家已經蠢蠢欲動。本章以開發禮物應用為例為大家展示開發一個應用的全過程。如果你是ThinkPHP 開發高手,你會發現開發一個應用其實就是建立一個新的項目,這也是ThinkSNS2.0 的魅力所在:應用獨立化。13 / 32開發流程ThinkSNS2.0應用開發的一般流程:1. 建立資料庫和資料表(沒有資料庫操作可略過)2. 項目命名並建立項目目錄3. 建立控制器類4. 建立模型類5. 建立模板檔案6. 運行和調試開發需求和開發目標我們的禮物應用需要實現以下的功能:1. 使用者可以給關注的人或粉絲髮送禮物2. 使用者可以看到自己送出去的全部禮物3. 使用者可以看到別人送給自己的全部禮物4. 使用者可以回贈禮物給好友5. 使用者發送禮物時能同時發送通知資訊6. 使用者發送禮物成功後可發送微博分享訊息7. 管理員可在後台增加,修改,刪除禮物及禮物種類8. 管理員可在後台配置禮物的積分消費種類:積分?經驗?9. 實現完善的積分消費功能,如果使用者積分不足則不能贈送建立資料表根據上面的需求分析可知,我們需要設計三張資料表,一個用來儲存禮物的分類資訊,另一個用來儲存禮物的資訊,還有一張用來儲存使用者之間的送禮記錄。增加資料表請注意表的命名格式:資料庫表首碼+表名,其中資料庫表首碼在config.inc.php裡的DB_PREFIX 常量已經定義。增加禮物分類表:欄位類型說明idintnamevarchar分類名statustinyint是否啟用0禁用1啟用(預設)cTimeint建立時間增加兩個預設分類:熱門禮物、最新上架增加禮物資訊表:欄位類型說明idintcategoryIdint分類ID,對應上面的分類表的IDnamevarchar禮物名numint庫存14 / 32priceint價格imgvarchar禮物圖片statustinyint是否啟用0 禁用1 啟用(預設)cTimeint建立時間在這裡我們當然也要預先準備好部分禮物,即初始化的禮物資訊。增加送禮記錄表:欄位類型說明idintfromUserIdint送禮人IDtoUserIdint送禮對象giftPriceint價格giftImgvarchar禮物圖片sendInfotext附加資訊sendWaytinyint贈送的方式:1 公開2 私下3 匿名cTimeint建立時間到此,資料表設計完畢。在應用程式目錄下的/gift/Appinfo/檔案夾裡的install.sql檔案包含了上述建表和插入預定義資料的sql語句。建立應用目錄圖4 應用目錄結構如所示,我們先在/apps/目錄下增加禮物目錄gift,然後在/apps/gift/目錄下建立所示的目錄(請注意大小寫)。 應用程式目錄Lib:應用程式目錄下存放的是Action控制器和Model模型的檔案。 應用模板目錄Tpl:由於本次禮物應用只有一套模板,因此我們直接在Tpl/目錄建立預設範本目錄default/,然後在default/目錄下添加我們需要的Index 模板和一個公用模板目錄Public/。 公用函數目錄Common:這裡可以存放本次應用的公用函數,檔案名稱為common.php,該檔案會在執行過程中自動載入,這些函數在Action/ 和Model/目下的檔案裡可以直接使用,無需再次引入檔案。同時我們還可以直接使用ThinkSNS2.0裡的公用函數,這些函數儲存在15 / 32/core/sociax/檔案夾下的fuctions.php和extend.php裡,它包括我們最常用的資料處理或者資料獲得,如h()、t()過濾函數,getUserName()函數(在模板檔案的調用方法為: {$userId|getUserName})、getUserFace()函數和friendlyDate()函數(用法同getUserName())。以上的幾個函數推薦大家使用。 應用配置目錄Conf:如果應用裡有需要修改系統預設的常量或者在裡面添加項目需要的一些配置參數,就需要在項目的Conf/目錄下面,建立一個名稱是config.php 的設定檔,該檔案也會自動載入。公用函數目錄和應用配置目錄非必需的目錄,視應用開發決定是否需要。本次禮物開發中只用到公用函數檔案夾。 語言目錄Language:用以儲存應用的系統通知模板和動態模板。本次禮物開發中將用到系統通知模板。在Language/目錄下建立中文語言套件目錄cn/,然後添加通知模板檔案notify.php (動態是同樣的道理,只是檔案名稱為:feed.php)。 安裝包目錄Appinfo:用於在ThinkSNS背景應用安裝/卸載操作,必須包含info.php檔案(用以擷取應用資訊),如果含有install.php或uninstall.php檔案,則會在應用安裝、卸載時自動調用。開始編程 公用函數層在Common/目錄下,建立common.php檔案(注意檔案名稱的大小寫),寫入所需函數,如擷取應用配置參數的函數:function getConfig($key=NULL){[……]}詳細代碼請參見該檔案。這個檔案裡的函數在Action/ 、Model/ 和Tpl/目錄下的檔案都可以直接使用。 MODEL層在Lib/Model/目錄下,建立三個檔案GiftCategoryModel.class.php,GiftModel.class.php 和UserGiftModel.class.php,分別建立代碼如下:class GiftCategoryModel extends Model{ }class GiftModel extends Model{ }class UserGiftModel extends Model{ }通過以上步驟,我們現在已將資料庫表和模型類建立了關聯關係。在項目的Action 類和Model 類中,已可以直接對資料庫進行相關操作。有些人習慣在Model 類裡封裝一些方法,這樣更符合MVC 規範,也有一些人習慣把方法都寫在Action 裡,方便程式的閱讀,這主要看個人習慣。本次開發將基本方法寫進入Model 層裡。詳細代碼請參見相應檔案。 ACTION層在Lib/Action/目錄下,建立IndexAction.class.php,並建立代碼如下:class IndexAction extends Action{ }詳細代碼參加該檔案。 模板層16 / 32我們在Tpl/default/目錄下需要兩個檔案夾:Index和Public。Index檔案夾名是與IndexAction.class.php檔案對應,表示Index檔案夾下面的檔案都是IndexAction.class.php檔案所需要的全部模板。應用的公用檔案我們一般放到Tpl/default/Public/目錄下,比如禮物應用的禮物圖片、JS檔案、CSS檔案、應用標頭檔_mainNav.html等。當然,這些目錄的設定完全由開發人員自己決定,只要保證調用檔案的路徑正確就可以了。我們先來看看ThinkSNS2.0 模板檔案的一般結構,開發人員引入本應用自己的樣式檔案和JS 檔案後可直接在畫布層裡增加相應的顯示代碼即可:[……]詳細內容請參閱具體代碼。下面介紹模板檔案中幾處有學習價值的代碼。1. ThinkSNS2.0 全面使用jQuery 技術,jQuery 是一個不錯的輕量級的JS架構,能協助我們快速的開發JS 應用,並在一定程度上改變了我們寫JavaScript代碼的習慣。ThinkSNS2.0 在標頭檔裡已經引入jQuery 庫,開發人員不必重複引入。2. Tpl/default/Index/目錄下的index.html檔案,這是禮物中心的模板,裡面選擇發送好友的功能用到好友選擇widget,只需要在模板裡增加{:W("SelectFriend")},然後用$_POST['fri_ids']就可以獲得選擇的好友ID.3. 因為我們是用findPage()方式擷取收到和送出的禮物列表,故返回的資料已經有分頁的變數了,只要在模板合適的地方增加如下的代碼即可:{$gifts.html}17 / 32增加積分消費功能上面的程式基本完成了禮物的全部操作,接下來我們要增加積分消費功能。至於禮物消費的積分類型,是積分或者還是經驗,可以在後台設定,詳細請看背景程式說明。首先在發送禮物頁面增加顯示目前使用者所擁有多少積分的功能,我們只要在IndexAction.class.php檔案的index()方法裡增加以下程式即可://擷取目前使用者的積分$money = X('Credit')->getUserCredit($this->mid);$moneyType = getConfig('credit');$this->assign('money',$money[$moneyType]);在發送禮物的模板裡增加以下一行代碼:我目前擁有的 {$money.alias}是:{$money.credit}然後在發送禮物的函數裡(UserGiftModel.class.php 的sendGift()方法)增加扣除所選禮物的相應積分程式://扣除相應積分$giftPrice = intval($giftInfo['price']);$prices = $userNum*$giftPrice;$moneyType = getConfig('credit');//積分操作$setCredit = X('Credit');//檢測積分是否足夠$userCredit = $setCredit->getUserCredit($fromUid);if($userCredit[$moneyType]['credit']<$prices){return $userCredit[$moneyType]['alias'].'不足,贈送失敗~';}$setCredit->setUserCredit($fromUid,array($moneyType=>$prices),-1);這裡調用了公用類庫services中的積分操作類,即X('Credit')。到這裡積分消費功能增加完畢。增加發通知功能首先需要增加禮物的通知模板。在Language/目錄下建立一個檔案夾cn,再在cn檔案夾下建立通知模板檔案notify.php,代碼如下: array('title' => '{actor}給您送了一個禮物','body' => $img.'
'.$sendback.'

'.$content.'


去看看18 / 32',),);?>在發送禮物成功後增加以下程式://給接收人發送通知$this->__doNotify($toUser,$sendInfo,$giftInfo,$fromUid,$appId);__doNotify() 方法的實現請參閱具體代碼。這裡調用了公用類庫services中的系統通知類,即X('Notify')。到這裡發通知功能完成了。增加發送動態功能發送動態機制與發送通知的機制完全相同,區別只有如下兩點: 通知使用/Language/cn/feed.php,而動態使用/Language/cn/notify.php通知服務使用X('Notify')或service('Notify'),而動態使用X('Feed')或service('Feed')由於禮物應用沒有用到動態,這裡也不再贅述。增加微博分享功能首先我們需要在“管理後台-內容- 範本管理員”增加一個禮物贈送的模板:19 / 32在組裝通知數據前,初始化一個獲贈物件變數:// 贈送的對象名稱 用於公開贈送微博$toUserName = NULL;在組裝公開贈送的通知資訊中添加如下代碼,用以@ 到各個獲贈使用者:// 贈送對象名稱$toUserName .= '@'.getUserName($fid).' ';在通知資訊組裝結束後,添加如下代碼,將微博資訊暫存於SESSION中:// 公開則發微薄if($toUserName){$_SESSION['gift_send_weibo'] = urlencode ( serialize ( array('user' => $toUserName,'title' => $giftInfo['name'],'content' => $data['content'],'url' => U('gift/Index/index', array('uid' =>$fid,'type' =>1,'type_data'=>realityImageURL($giftInfo['img']))),)));}在Lib/Index/ IndexAction.class.php檔案裡的sendbox()函數內添加如下代碼://判斷是否有公開贈送資訊,存在,則賦值給模板,用於發微薄if(isset($_SESSION['gift_send_weibo'])&&!empty($_SESSION['gift_send_weibo'])){$this->assign('tpl_data',$_SESSION['gift_send_weibo']);unset($_SESSION['gift_send_weibo']);}在Tpl/default/Index/目錄下送出的禮物sendbox.html模板檔案裡,添加WeiboWidget引用(只有發送微博的資訊存在時才載入),如下:{:W('Weibo',array('tpl_name'=>'gift_send_weibo','button_title'=>'分享',))}到這裡公開贈送發微博功能完成了。增加應用後台ThinkSNS2.0 為應用增加管理背景方法很簡單,直接在應用的Action/目錄下增加AdminAction.class.php檔案,然後匯入並繼承AdministratorAction類即可完成許可權管理:注意:在_initialize函數裡,首先要執行parent::_initialize(),進行系統管理權限判定。更多詳細代碼請見具體檔案。接著我們增加對應的管理頁面的模板,Tpl/default/目錄下增加Admin/目錄,然後在該目錄下增加_header.html, _footer.html, _tab.html, index.html, giftlist.html, category.html, edit_gift_tab.html, edit_category_tab.html幾個模板檔案。模板開發方式同前台的模板一樣,在此不再重複。製作安裝/卸載包在應用的目錄下增加安裝資訊目錄,命名為Appinfo,然後在該目錄下增加應用表徵圖(ico_app.gif、ico_app_large.gif)、應用設定檔(info.php)、應用安裝檔案(install.php)、應用程式資料庫檔案(install.sql)和應用卸載檔案(uninstall.php)。 設定檔內容: '禮物',// 應用簡介[必填]'DESCRIPTION' => '禮物贈送',// 託管類型[必填](0:本地應用,1:遠程應用)'HOST_TYPE' => '0',// 前台入口[必填](格式:Action/act)'APP_ENTRY' => 'Index/index',// 應用表徵圖[必填]'ICON_URL' => SITE_URL . '/apps/gift/Appinfo/ico_app.gif',// 應用表徵圖[必填]'LARGE_ICON_URL' => SITE_URL . '/apps/gift/Appinfo/ico_app_large.gif',// 後台入口[選填]'ADMIN_ENTRY' => 'Admin/index',// 統計入口[選填](格式:Model/method)21 / 32'STATISTICS_ENTRY' => 'GiftStatistics/statistics',[……]);?>注意:其中的SITE _URL是網站根目錄網址,如果直接使用它本身的話程式會自動解釋成絕對網址,還有一個好處就是網站轉移的時候這些資訊都不需要修改,程式會自動解釋出新的網址賦值給它。當然,你也可以使用絕對網址。 安裝檔案內容:資料庫操作的語句均統一放在資料庫檔案install.sql中,install.php的功能就是執行該檔案:executeSqlFile($sql_file);if(!empty($res)){//錯誤echo $res['error_code'];echo '
';echo $res['error_sql'];//清除已匯入的資料include_once(APPS_PATH.'/gift/Appinfo/uninstall.php');exit;}?> 資料庫檔案內容:首先,寫入該應用三張資料表的添加語句;然後,再加入應用系統配置資訊和微博模板的插入語句,若有設定積分規則的應用,也加上積分規則的插入語句,可以參見日誌、相簿等應用的資料庫檔案,代碼如下:SET FOREIGN_KEY_CHECKS=0;[……三張資料表及其預設資訊的sql語句]#添加ts_system_data資料REPLACE INTO `ts_system_data` (`uid`,`list`,`key`,`value`,`mtime`)VALUES(0, 'gift', 'credit', 's:5:"score";', '2010-12-24 11:22:17');#模板資料DELETE FROM `ts_template` WHERE `name` = 'gift_send_weibo';INSERT INTO `ts_template` (`name`, `alias`, `title`, `body`, `lang`, `type`, `type2`, `is_cache`, `ctime`)22 / 32VALUES('gift_send_weibo', '禮物贈送', '','我送給{user} 一份禮物:【{title}】{content} 參與送禮{url}', 'zh', 'gift', 'weibo', 0, 1290417734);這裡可以直接使用由工具匯出的sql檔案和語句。 卸載檔案內容:刪除應用的資料表、應用系統配置資訊和微博模板。若應用還設定了積分規則,則也要同時刪除其積分規則,可以參見日誌、相簿等應用的卸載檔案。execute($v);?>至此,安裝卸載包製作完成。登入後台後進入“應用->應用管理->添加應用”點擊“安裝”應用就可以了。然後更新一下系統緩衝就可以在前台的應用列表中看到我們的禮物應用了。調試要調試我們的有程式,有很多種方法,在此我們推薦幾種常用的調試方法。 用ThinkPHP 內建的dump()方法把過程變數列印出來,看是是否與預想的結果一樣 使用ThinkPHP 的getLastSql()方法取得最後的SQL語句並用dump()列印出來,檢查SQL語句是否正確 在Conf/config.php檔案裡增加DEBUG_MODE常量並賦值為true,即把ThinkPHP 的偵錯模式開啟(註:修改後需要清理緩衝)

http://www.bkjia.com/PHPjc/477150.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/477150.htmlTechArticle核心與服務、公用Model、外掛程式、Widget、第三方類庫共同構成了系統的大根基,其他所有應用都其上構建。 術語解釋 核心:源自ThinkPHP架構,...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.