一般來說二次開發,多數就是修改界面和增加功能這兩個需求
先說修改界面
mvc 架構的程序,在界面這裡,基本就是調用數據。
常見的界面數據構架有三種
1.是業務端或者是控制端數據驅動界面,基本上是後台輸出啥數據,界面表現啥數據。這樣麻煩的地方在於如果要更換模板的話動刀會動的比較大,除非沒有更換模板的需求。如果不修改控制端的數據的話,那麼界面設計這裡受到的限制就比較多。
2.是界面驅動數據,界面自定義調用數據,多數的 cms 基本都是這樣搞的,通過標簽或者定義個通用的 php 調用數據函數來獲取數據。這樣對界面設計這裡比較友好,但是切圖套代碼的話就會比較麻煩些。
3.第三種難度有點大,就是後台通過所見即所得的模式,定義前端調用模塊,並通過系統配置或者手動配置來定義數據,然後生成 html 數據,前台一次性讀取即可,設定合理緩存的間隔即可。像淘寶,shopex就是這樣的模式,對後台開發的壓力比較大。
shopnc的程序屬於第一種,後台數據驅動界面的。所以要改界面,通常要改控制器和視圖兩個地方,最好是記錄好修改的文件,否則將來升級了,源文件被替換了,就會非常麻煩。
shopnc的url通常是這樣的
http://localhost/shopnc/shop/index.php?act=show_groupbuy&op=index
act 參數代表的是控制器,而 op 則代表的是控制器中的業務函數名稱
回顧下 shopnc 的目錄結構,我們到控制器目錄中尋找 show_groupbuy.php ,這就是控制器的業務邏輯
簡單的看下代碼
class show_groupbuyControl extends BaseHomeControl { ... }
控制器的名稱跟一個 Control 字符串並繼承於 BaseHomeControl
而 op 就是 show_groupbuyControl 類中的函數
/** * 默認跳轉到進行中的團購列表 */ public function indexOp() { $this->groupbuy_listOp(); }
命名以 url 中的 op 參數加 Op 字符串組合而成
如果要更改前台顯示的數據,則需要找到對應的控制器和函數,修改其中的代碼
前台的模板也有規律
templates/default 目錄下的文件夾功能含義如下:
buy 購買功能模板,比如購物車、訂單等模板
css 樣式文件夾
home 前台展示功能模塊的模板都在這裡
images 模板圖片文件夾
layout 布局文件夾,如果要找各個功能區的頭文件都在這裡
member 會員中心模板
seller 賣家中心模板
sns sns 功能模板
store 賣家店鋪模板
到對應的文件夾中尋找相關的文件模板即可修改視圖邏輯
剛開始找對應視圖可能有點蒙,因為視圖和控制器並不對應,不過從 op 參數上判斷也比較好找,當然還是建議從控制器代碼中找
找到對應 op 函數
在函數最後末尾,找到類似 Tpl::showpage('index'); 的字樣,有這樣的字樣就代表從對應的文件夾中調用 index 的視圖,所以我們找到 index.php 就是對應的視圖文件了
如果沒有 Tpl::showpage('index'); 的字樣,通常是調用了其他函數或者不輸出視圖文件,比如說直接輸出字符串或者輸出 json 。
找到了視圖文件,就需要找到對應的數據顯示模塊才可以修改。
我們先返回找到對應的控制器看下代碼,我們找到首頁文件,以團購為例
//團購專區 Language::read('member_groupbuy'); $model_groupbuy = Model('groupbuy'); $group_list = $model_groupbuy->getGroupbuyCommendedList(array(), null, '', '*', 4); Tpl::output('group_list', $group_list);
除去注釋的第一句,不用看也能猜出來,是調用語言文件的
第二句是調用 model 的,model 的位置在上層目錄中的 data 裡,而 model 文件的文件名就是 Model('groupbuy'); 中的 groupbuy 加上 .php 後綴
第三句調用 model 中的函數獲取想要取得的數據
第四句則是將已取得的數據賦值給模板中的變量 group_list
我們打開視圖文件,找到 group_list 即可定位模板中要找的位置了,而模板都是純 php 語法,直接就可以修改,記得要備份啊!