月光
看我代替月亮懲罰你!
|
分享:
x0
|
[程式] 5.X 插件開發手冊/附舊版插件升級方法
20061019版本 PHPWind官方團隊 為統一插件開發規範,促進PHPWind論壇程序的插件開發,以及提高廣大PHPWind用戶安裝插件更加簡易,同時盡量避免升級論壇程序而帶來的插件失效,特撰寫本開發手冊,供插件開發者參考,以及給有興趣開發插件的朋友們提供幫助。使用本規則,將會 避免當前插件體系所能導致的所有常見低級錯誤:前台文件後台文件填寫顛倒,不知道如何執行SQL,不知道如何設置文件777屬性, 因為沒有默認的緩存文件而導致的空白錯誤。
一、 插件專用常量/變量/函數:
1) H_P 插件根目錄,用途相當於R_P等常量,為插件專用。R_P."index.php"為論壇根目錄下的index.php,H_P."index.php",即指當前插件目錄下的index.php文件 2) $basename 插件主文件,程序中任何需要引用到自身的可以用此變量代替。 3) $hkimg 插件圖片目錄,插件所使用的圖片存放路徑,相對路徑為 /BBS根目錄/Hack目錄/插件目錄/image目錄,此變量的目的在於使得插件目錄更靈活,在文件中引用圖片路徑更簡單。 4) PrintHack 得到模板文件路徑,區別於默認的PrintEot 以上內容將為插件的目錄結構,插件的程序開發提供極大的靈活性,我們倘若修改了名稱或者唯一ID之後,唯一需要做的只是修改一下FTP上文件夾的名稱跟唯一ID保持一致即可。備註:PHP程序忽略變量以及函數的大小寫,如果本文列舉的內容大小寫跟實際存在出入,可以不予考慮。
二、 插件目錄結構,以及文件名約定規則:
舉例插件名稱為打工插件,唯一ID為work,那麼插件的文件夾名稱應該跟唯一ID保持一致,其所有文件應該存放在 hack/work目錄下,以下內容將以此插件為例說明。 1) 插件根目錄 hack/work目錄 存放插件主要文件,包括在根目錄下的文件內容如下: a) index.php 插件前台主文件,如果不存在此文件,插件則不顯示前台界面。 b) admin.php 插件後台主文件,如果不存在此文件,插件則無後台管理功能。 c) sql.txt 插件安裝所需要執行的SQL語句,禁止Drop PHPWind自身數據以及刪除已有數據等危險操作。如果不需要執行SQL語句變動數據庫,可以不存在此文件。 d) readme.txt 插件使用說明,來提供給用戶相關說明文檔。 e) 倘若無前台顯示/後台設置等,可以沒有相應的文件,如果有相應功能,則文件命名必須按照指定規則。 2) 圖片目錄 hack/work/image 此目錄存放插件文件中所使用到的圖片文件,強烈要求在文件中使用$hkimg變量來指定此目錄,這樣指定目錄將會讓文件有極大的靈活性。 3) 插件包含文件 hack/work/require 倘若插件比較大,可以把一些常用的函數寫成文件放入到require文件夾。 4) 插件模板文件夾 hack/work/template 不同於5.0之前的版本,所有模板均放置到template下,前台放置於template/wind 後台放置於template/admin,而現有的插件體系規定所有的插件模板均放置在這一個目錄下,不再需要分別放到兩個文件夾中。 5) 緩存文件 出於文件777屬性考慮,以及緩存文件的統一部署,建議插件開發者將緩存文件存儲為data/bbscache 目錄下(此目錄已經可寫,否則無法使用), 同時,出於進一步的為插件使用者著想,建議緩存文件使用程序生成,來避免第一次使用插件時,因為沒有緩存文件或者緩存文件不可寫而導致的錯誤--我們必須考慮到,部分用戶不熟悉電腦操作,並不瞭解如何設置文件777屬性,所以建議並不附帶默認的緩存文件,而默認的緩存文件,在插件使用者第一次使用的時候,自動生成到data/bbscache目錄下,這樣將避免插件安裝中頻繁出現的777問題。[備註提示:一般附帶緩存的文件,可內置某些默認值,然後插件完成安裝之後,使用者應該進行一次設置提交來保存它所需要的設置,在這個時候設置再生成緩存文件到data/bbscache目錄下一個緩存文件,能夠有效的避免需要設置777的問題]
三、 舊版本插件升級方法
按照標準的格式開發安裝的插件--通過論壇管理後台添加的插件,需要進行一定修改。舊有用戶升級需要對原有插件的文件佈局做較小的改動。插件作者倘若發佈新版本插件,建議採用新的開發方法。 而舊版本插件--僅僅指按照標準方法開發的插件,通過論壇後台添加的。需要進行如下三個地方的修改, 非常簡單: 1) 首先按照插件的唯一ID建立一個文件夾在hack目錄下,比如插件唯一ID為work,那麼則需要在Hack目錄下添加一個目錄為work目錄,即為hack/work目錄。 2) 然後把插件前台文件改名為index.php,後台文件改名為admin.php(如果存在前台或者後台文件的話) 3) 把改名之後的文件放入到剛剛建立的相應目錄中去,比如work目錄 4) 完成。其他部分均不需要修改。
四、 主要相關函數
1) Refreshto [前台文件相關] 函數可在執行某操作之後,將頁面跳轉到指定的網址,附帶三個參數,第一個參數為跳轉的網址,第二個參數為跳轉過程中提示的內容,第三個參數為跳轉頁面停留的時間。前兩個參數必須,第三個參數可選。舉例為: refreshto("thread.php?fid=9","您的操作已成功"); 2) Showmsg [前台文件相關] 函數一般用來返回某錯誤信息,並終止程序的下一步操作,繼而供用戶返回前一頁面。本函數只有一個參數,即犯錯的錯誤提示內容。舉例為: Showmsg("您無權訪問本頁面"); 3) Writeover [前台後台通用] 文件寫函數,本函數將指定的字符串信息寫入到指定的文件中去,有兩個必選參數,第一個是文件名,第二個是字符串內容。舉例為: $str="abcdefg"; writeover(D_P."data/bbscache/aa.php",$str); 4) Char_cv [前台後台通用] 對於POST等方法傳遞過來的變量內容,推薦使用本函數進行處理,本函數將過濾字符串中的危險內容。提高安全性。本函數舉例如下: $str=Char_cv($str); 5) PrintHack [前台後台通用] 函數為插件專用,用來返回一個模板的路徑,作為require/include等函數的參數傳遞。只有兩個參數,第一個為模板文件的主文件名,該參數必須,第二個參數為模板文件的擴展名(後墜),該參數可選,默認為htm。舉例為: require PrintHack("info"); 包含插件目錄下的template目錄下的info.htm文件。倘若要包含info.html文件,則應該為require PrintHack("info","html"); 6) Adminmsg [後台文件使用] 函數主要用於在後台操作時返回某個提示信息,函數有三個參數,第一個參數必選,為返回的信息內容,第二個參數為可選,不帶此參數程序將自動返回操作前的頁面,帶此參數則跳轉到該參數指定的頁面,第三個參數為跳轉頁面停留時間。舉例如下: adminmsg("系統設置成功"); adminmsg("備份成功,現在繼續備份下一個文件", "backup.php?step=2"); 7) Get_date [前台後台通用] 本函數用來格式化時間,包含兩個參數,前者為一個10位的Unix時間戳,後者為時間的格式,後者為可選參數。建議使用本函數來格式化一個時間,在沒有第二個格式參數的時候,將按照默認的年-月-日 小時:分:秒的格式來處理。 8) PCV [前後台通用] 本函數為5.0版本新增函數,倘若您所要包含的文件中含有變量,要被包含文件使用到--b.php為被包含文件,a.php為包含文件,a.php需要包含b.php來獲取某個變量的值--建議使用本函數來過濾b.php文件,來防止跨站攻擊等,本函數的使用可以進一步提高安全性。舉例說明: include_once Pcv("xxxxx.php");
五、 PHP開發建議
1) 不使用默認的getdate函數獲取日期,而使用get_date函數(PW系統自帶),這樣將能夠保持跟系統時間保持一致(PW後台的時間校正,時區等設置將會生效)。 2) 推薦使用include函數包含緩存文件,因為require可能缺少文件而產生一個致命錯誤--空白,而Include函數則不會有致命錯誤的產生。
六、 其他相關建議
為了避免PHPWind程序/補丁更新而導致的文件變動,建議插件開發者按照本參考標準開發插件,並盡可能避免修改論壇自身文件,以避免倘若論壇升級之後插件全部失效。另外,插件的數據建議盡可能採用新的數據表,而不要改動原有的數據表,這樣也可以有效地避免升級論壇程序而導致的論壇插件數據丟失。對於新建立的插件數據表,建議使用pw_hack_xxx格式來建立,便於區分。
七、 插件開發實例
請參考PHPWind程序中的系統自帶插件參考其中的具體寫法。相關函數內容請參考admin/admincp.php global.php 常用的系統函數均在這兩個文件之內。
|