1. 程式人生 > >phpcms 模組開發(一)

phpcms 模組開發(一)

  classes/ 與本模組相關的類檔案
   function/ 與本模組相關的函式檔案
   install/ 本模組安裝相關
      language/ 本模組相關語言包
      templates/ 本模組前臺模板
      config.inc.php  本模組的安裝資訊
      dianping.sql  建立dianping表的sql檔案
      dianping_data.sql 建立dianping_data表的sql檔案
      dianping_type.sql 建立dianping_type表的sql檔案
      extention.inc.php 模組設定 插入的是menu表 負責控制後臺方法訪問的路徑
      model.php 檢查所需要的phpcms/model/下的檔案和所需要的sql檔案
      module.sql 在module表新增此模組
   template/ 本模組後臺模板
   uninstall/ 本模組解除安裝相關
      dianping.sql  刪除dianping表的sql檔案
      dianping_data.sql 刪除dianping_data表的sql檔案
      dianping_type.sql 刪除dianping_type表的sql檔案
      extention.inc.php 模組設定 刪除的是menu表裡該模組的資料
      model.php 所需要的執行刪除的sql檔名陣列
dianping.php 後臺訪問檔案
index.php 前臺訪問檔案
當然還可以配個說明文件
about_dianping.txt

/---------------------------------------------------------------------/

我平常做開發的時候喜歡用dianping模組作為參考來進行修改, 所以就以自己的經驗寫下面的東西
首先把phpcms/module/dianping資料夾原地複製貼上一份
假設我們開發一個後臺日程管理模組, 目錄命名為schedule
1.
複製出來的dianping資料夾改名為schedule

2. 開啟schedule/install/下的所有檔案進行修改吧(順序個人喜好)
  (1)先忽略語言包(language)和前臺模板(template),修改config.inc.php檔案, 這個檔案寫的是安裝資訊, 如 果不存在就連安裝的按鈕都沒得點.
裡面需要修改的地方:

$module = 'schedule';//模組名,就是位址列的m
$modulename = '日程管理模組';//名稱
$introduce = '這是一個日程管理模組';//介紹
$author = 'Shawn';//作者
$authorsite = 'http://weibo.com/yellowshit';//作者網站
$authoremail = '';//作者郵箱

儲存;

  (2)確定自己需要用到多少個表?多少個表就需要有多少個sql檔案;檔名即為表名.如果不需要用到表,可以用SQL檔案. 這裡做例子就用dianping.sql進行修改, 首先先改改檔名, 改為schedule.sql, 開啟
裡面需要修改的地方:

DROP TABLE IF EXISTS `phpcms_schedule
`;//一定要改這裡, 你懂什麼是droptable的
CREATE TABLE `phpcms_schedule` (
 `id` int(10) NOT NULLAUTO_INCREMENT,//主鍵
  `stime` int(10) NOT NULL,//日期
  `content` text NOT NULL,//內容
  PRIMARY KEY (`id`)

) TYPE=MyISAM;//引擎可以改可以不改,

有人可能問, 我的表字首的設定不是phpcms_, 需不需要改成自己的表字首?回答是不用的, v9在安裝模組時會自動轉為你的系統所設定的表字首..
儲存;

  (3)開啟extention.inc.php, 裡面的程式碼執行後會修改menu表,同時控制外部對後臺模組方法的訪問
裡面需要修改的地方:

//第一條為該模組的位置, 可以看出parentid=29是寫死的,parentid=29代表該模組屬於id=29的那個模組的子模組(id=29就是'模組'這個模組,所以安裝後會出現在'模組'下),m,c,a則是訪問該方法的路徑,data還沒研究,留空沒問題,listorder為排序,沒什麼用,display為是否改連結是否顯示在頭部(1為顯示0為不顯示)

//insert方法有第二個引數,預設為false,若為true則返回插入的id,第一條資料用了true是為了下面的parentid能夠跟這個模組關聯

//列表方法
$parentid =$menu_db->insert(array('name'=>'schedule','parentid'=>29, 'm'=>'schedule','c'=>'schedule', 'a'=>'init','data'=>'', 'listorder'=>0,'display'=>'1'), true);

//日程新增方法
$menu_db->insert(array('name'=>'schedule_add','parentid'=>$parentid,'m'=>'schedule', 'c'=>'schedule','a'=>'schedule_add', 'data'=>'','listorder'=>0,'display'=>'0'));

//日程編輯方法
$menu_db->insert(array('name'=>'schedule_edit','parentid'=>$parentid,'m'=>'schedule', 'c'=>'schedule','a'=>'schedule_edit', 'data'=>'','listorder'=>0,'display'=>'1'));

//日程刪除方法
$menu_db->insert(array('name'=>'schedule_del','parentid'=>$parentid,'m'=>'schedule', 'c'=>'schedule','a'=>'schedule_del', 'data'=>'','listorder'=>0,'display'=>'1'));

//語言包相關, 模組安裝後在phpcms/languages/zh-cn/system_menu.lang.php中可以見到
$language = array('schedule'=>'日程管理','schedule_add'=>'新增日期','schedule_edit'=>'修改日程','schedule_del'=>'刪除日程');


這個檔案的重要性: 告知系統這個模組有多少個方法可供頁面訪問,就是m,c,a的控制..
假設我在模組schedule中的控制器schedule.php有方法 happy(),我們如果訪問的話就是m=schedule&c=schedule&a=happy,但是! 如果menu表沒有記錄到這個方法的話就無法通過地址來訪問, 這時我們需要加上一句
$menu_db->insert(array('name'=>'schedule_del','parentid'=>$parentid,'m'=>'schedule', 'c'=>'schedule','a'=>'happy','data'=>'', 'listorder'=>0,'display'=>'1'));即可..
這裡我們又產生一個問題, 如果我的模組已經安裝了,我在開發的時候突然需要新增額外的方法來訪問, 難道要解除安裝模組在改這個檔案再重新安裝嗎? 答案是否定的,我們已經知道它是對menu表的操作, 我們改就手動在menu表增加吧.tips:如果開發夠熟悉, 模組安裝過程可以跳過,直接自己改資料表來進行安裝就可以(我是這麼做的..)
我所說的外部訪問說的是URL的訪問控制器方法, 如果在控制器內內部的方法呼叫內部的方法是不用這麼做的(有點繞)