為更好的拓展系統(tǒng)功能,進云框架支持以插件的形式開發(fā)應用。下面簡要介紹進云系統(tǒng)插件機制。
插件可以擁有自己的頁面、數(shù)據(jù)表、工具類等。進云系統(tǒng)已內(nèi)置插件類plugin,每一個插件類都是該類的實例,在插件控制文件中,可通過$this來訪問該插件的屬性和方法。
頁面機制
和其他PHP框架不同,進云插件頁面控制文件無需聲明類。而是直接在特定目錄創(chuàng)建文件以編寫業(yè)務代碼即可!但是進云插件所有頁面都處于plugin類中,也就是在所有頁面控制文件中都可以使用$this來訪問相應插件類實例的方法和屬性!
進云系統(tǒng)是一個多站點的站點管理系統(tǒng),每個站點都有管理端和客戶端,管理端是站點管理員登陸操作管理的頁面,客戶端是站點建好對外發(fā)布后,訪客訪問的頁面。為提升系統(tǒng)安全性,管理端頁面代碼和客戶端頁面代碼分開存放,分別位于插件根目錄下的manage文件夾和custom文件夾。
進云系統(tǒng)中,每個頁面對應一個頁面控制文件(PHP文件)、一個頁面樣式文件(html文件),分別存放于指定位置,可查看下面面的目錄結(jié)構(gòu)。每個頁面可分為若干個子頁面,根據(jù)op來區(qū)分。
進云系統(tǒng)的插件目錄是根目錄下的addons目錄,插件的根目錄位于系統(tǒng)插件目錄下以插件標識命名的文件夾。
插件目錄:
插件根目錄
——manage:插件管理端頁面文件目錄
; ; ; ;|——common.php:管理端初始化文件,非必須。如果存在,訪問插件用戶端頁面時,會先執(zhí)行該頁面的代碼,該文件中可通過$this訪問插件類
; ; ; |——actions:控制文件目錄
; ; ; ; ; ; ; ;|——index.php:插件管理端首頁
; ; ; ; ; ; ; ;|——link.php:插件頁面鏈接選擇文件
; ; ; |——templates:頁面文件目錄
; ; ; ; ; ; ; ;|——windows:PC端頁面文件
; ; ; ; ; ; ; ;|——mobile:手機端頁面文件
——resource:插件圖片、樣式、js等資源文件目錄
——custom:插件用戶端頁面文件目錄
; ; ; ;|——common.php:用戶端初始化文件,,非必須。如果存在,訪問插件用戶端頁面時,會先執(zhí)行該頁面的代碼,該文件中可通過$this訪問插件類
; ; ; ;|——actions:控制文件目錄
; ; ; ;|——templates:頁面文件目錄
——class:插件工具類目錄
——subscribe:插件訂閱事件處理函數(shù)目錄
——model:插件工具類目錄
; ; ; ;|——menu.php:插件管理端導航菜單聲明文件,非必須
——init.php:插件類初始化文件,非必須。
——default_setting.php:插件默認參數(shù)聲明文件,非必須。
一個典型的進云插件頁面:
頁面地址:http://你的域名/manage/index.php?plugin=jy_weishop&action=goods.list
頁面控制文件路徑:(相對插件根目錄)
/manage/actions/goods/list.php
控制文件中,可以使用$this來方法插件類的方法和屬性。整理好數(shù)據(jù)后,調(diào)用系統(tǒng)exi函數(shù)返回前端
頁面pc端html文件路徑:(相對插件根目錄)
/manage/templates/windows/goods/list.html
頁面手機端html文件路徑:(相對插件根目錄)
/manage/templates/mobile/goods/list.html
控制文件通過訪問數(shù)據(jù)庫將數(shù)據(jù)讀出并整理好,然后通過調(diào)用exi()函數(shù)將數(shù)據(jù)返回給前端,系統(tǒng)自動調(diào)用相應html文件結(jié)合數(shù)據(jù)進行渲染,生成最終的展示頁面
插件數(shù)據(jù)表名稱命名規(guī)范:
為方便使用和統(tǒng)一管理,所有進云插件的數(shù)據(jù)表必須以(系統(tǒng)數(shù)據(jù)表前綴+插件標識+下劃線)開頭!
插件工具類聲明和使用方法:
為方便model()函數(shù)調(diào)用,插件工具類必須全部聲明在class文件夾中,然后按照標準的格式進行聲明?。ó斎?,如果是自己直接使用,隨便怎么聲明都可以!此處規(guī)范的類聲明方式只是為了model函數(shù)能夠調(diào)用到!)
下面介紹聲明方法:
1、命名空間:plugin_name
2、類名: class_name
3、繼承的基類:plugin。繼承這個類的目的是在工具類中可以使用插件類的方法和屬性!如果無需用到這些,也可不繼承!
4、本插件調(diào)用方法:$this->model('class_name'),返回已實例化好的目標類的示例
5、外部插件調(diào)用方法:model('plugin_name/class_name'),返回已實例化好的目標類的示例
5、類比較多時,可在class目錄下創(chuàng)建一級或多級文件夾,以更好的管理這些類,這些類的命名空間和調(diào)用方法如下:
命名空間:plugin_namedir_name
類名:class_name
調(diào)用方法:model('
plugin_name/dir_name/class_name')
多級文件夾以此類推!
下面是示例代碼:
以下為微客分銷插件傭金計算類的聲明代碼
文件路徑:
/addons/jy_commission/class/commission.php(基于站點根目錄)
<?php
namespace jy_commission;
defined('BY_JYA') or exit('error');
/*
分銷傭金
*/
class commission extends plugin{
/*
生成傭金
*/
function create($order){
$level=intval($this->setting['level']);
if($level==0){
return;
}
$this->order=$order;
if($this->setting['self_commission']==1){
$agent_id=$order['mid'];
}else{
$agent_id=$this->getcolumn('member',array('mid'=>$order['mid']),'agent_id');
}
$this->commission_order=array(
'uniacid'=>$_SESSION['uniacid'],
'mid'=>$this->order['mid'],
'ordersn'=>$this->order['ordersn'],
'order_price'=>$this->order['price'],
'commission_money'=>0,
'createtime'=>TIMESTAMP,
);
//傭金計算方式,是否扣除運費
if($this->setting['commissiontype']==1){
$this->commission_order['commission_price']=$this->order['price'];
}else{
$this->commission_order['commission_price']=$this->order['price']-$this->order['dispatchprice'];
}
//當分銷層級大于0時,逐次尋找上級推薦人并計算傭金
for($i=0;$i<$level;$i++){
if(!$agent_id){
break;
}
$agent_id=$this->create_commission($agent_id,$i+1);
}
//生成分銷訂單
$this->insert('order',$this->commission_order);
return true;
}
//以下部分省略
}