DZ外掛製作簡易入門教程(自學手記)第一篇

小虎哥-技術部落格發表於2013-08-20

看了Maple-x和泡哥寫的那兩篇外掛製作教程,還是讓我如雲裡霧裡。後經仔細研究外掛例項,總算有所收穫,但彎路走了不少。為避免後來者重蹈覆轍,在此總結成文,算做個筆記好了。

就用最經典的專案名稱Hello Word!來講。
效果圖:
2009-04-19_143106.jpg 



第一步 建立相關檔案及目錄結構
1.1 隨便在那裡建立一個新資料夾。

1.2 在建立好的新資料夾裡按下圖結構和名稱建立子目錄和檔案。
2009-04-19_111720.jpg 
  *檔案先用記事本建立空的文字檔案然後改名就可以了,以後再編輯這些檔案的內容。
  *改名的時候注意調整系統的資料夾選項不要隱藏副檔名。

第二步 在後臺系統設定裡新增外掛的相關資訊
2.1 進後臺->擴充套件->論壇外掛->管理,按圖填寫相關內容並提交。
2009-04-19_102021.jpg 
  *唯一識別符號不要有空格和標點符號。

2.2 勾上“可用”後再提交一次,然後點最後邊的“詳情”進入下一步。
2009-04-19_102132.jpg 
2.3 設定外掛詳細資訊,設定好後點選提交,然後點選本頁頭部的“模組”進入下一步。
2009-04-19_102328.jpg 
  *版權資訊填你自己想填的內容^_^,不一定要跟我的一樣
  *外掛目錄的名字要與第一步裡建立的資料夾中/plugins/下的資料夾名稱一致,本例中為helloworld。
  *外掛目錄末尾要加“/”,參照上圖。
  *因為暫時沒有用到資料庫,所以外掛資料表為空。
  *外掛描述隨便填不填、填什麼都可以。

2.4 設定模組資訊,提交。
2009-04-19_102521.jpg 
  *程式模組要與第一步裡建立的資料夾中/plugins/helloworld/下的*.inc.php檔案的名稱一致。本例中為helloworld。
  *選單名稱就是將來在論壇頁面上顯示的標籤的名字,一定要填,不然標籤顯示不出來。
  *模組型別有好幾種,詳細介紹請參見DZ論壇使用者手冊。本例中選“前臺呼叫(前臺選單)”。
  *使用等級即該模組(或“頁面”)的訪問許可權,自酌。

2.5 如果一切順利,現在外掛管理裡面就出現設定好的外掛了。
2009-04-19_102634.jpg 
  *如果要調整什麼引數,點“管理”->相應外掛的“詳細”。

第三步 編輯外掛檔案內容,實現外掛功能
3.1 編輯模版檔案hw_helloworld.htm的內容並儲存,參考如下:

  1. {template header}

  2. <div id="nav"><a href="$indexname">$bbname</a></div>
  3. <div style="width:960px;  background-color:#FFF;">
  4. <div class="mainbox">

  5. <table align="center" cellpadding="5">
  6.   <tr>
  7.     <td bgcolor="#999999">打個招呼~</td>
  8.   </tr>
  9.   <tr>
  10.     <td height="265"><div align="center">$say_string</div></td>
  11.   </tr>
  12. </table>


  13. </div></div>

  14. {template footer}
複製程式碼

  *模版檔案是外掛全部的樣子或介面,也就是你的外掛將以什麼樣的面貌呈現在使用者的瀏覽器中。
  *模版檔案實際上是外掛程式模組的一部分,通過在程式模組(*.inc.php)中include()發揮作用。單獨把模版從程式模組中分離出來是為了方便應用論壇的樣式。如果對程式設計比較熟悉的話,這個和C++中.form檔案和.CPP檔案的關係有點類似。
  *本例中,模版檔案hw_helloworld.htm首行{template header}的和最後一行的{template footer},分別引用了論壇的header和footer模版,程式碼第3行加入了導航條,也就是說,外掛將在論壇頁面中間部分出現,好像“插”在論壇裡一樣^_^。如果刪除{template header}和{template footer},則頁面將以很獨立的面貌呈現,好像跟論壇一點關係也沒有一樣。
  *本例的模版檔案包含了最基本元素,替換裡面表格的內容就可以做出想要的外掛介面。
  *模版檔案字尾名是.htm,所以可以像普通htm頁面一樣用javascript來實現一些頁面元素的動態化。如果在裡面用<? ... ?>是不能被解釋執行的,因為前面說過,模版檔案要發揮作用,要在程式模組檔案中include(),在PHP程式段裡再引用PHP能不出錯嗎?也正是因為這一點,在模版檔案裡可以不用加<?...?>標記直接引用PHP的變數值。這其實就夠了,因為模版檔案其實就是用來處理表單提交和資料反饋用的,這也是PHP程式強大的地方。
  *基於上一點,我們在第13行,引入一個$say_string,具體見下一步。

3.2 編輯外掛程式模組檔案helloworld.inc.php並儲存,參考內容:

  1. <?
  2. if(!defined('IN_DISCUZ')) {
  3.         exit('Access Denied');
  4. }

  5. if(!$discuz_uid) {
  6.         showmessage('not_loggedin', null, 'NOPERM');
  7. }

  8. include DISCUZ_ROOT.'./forumdata/cache/plugin_'.$identifier.'.php';

  9. $say_string = 'Hello World!' ;

  10. include template('hw_helloworld');

  11. ?>
複製程式碼

  *第1行到第8行是與論壇安全相關的語句,一定要寫!DZ論壇的外掛沒有不寫這幾句的。
  *第10行是載入外掛頁面快取,提高執行效率。
  *第12行,定義一個$say_string字串變數,賦值“Hello World!”,外掛執行以後,這個值就通過模版檔案顯示出來了。
  *第14行,將模版檔案包含進來,讓程式模組這個靈魂能有一個軀殼^_^。為了防止一些莫名其妙的錯誤,習慣性的將模版的include()放在最後。
  *程式模組檔案helloworld.inc.php是外掛程式的起點,呼叫它的是論壇的plugin.php。打個比方,plugin.php是傳送帶,只要論壇在執行,這個傳送帶就在轉。我們只是把我們的外掛放到了這個傳送帶上一起運轉。

3.3 儲存好所有檔案,將plugins和templates用FTP上傳,或直接Copy到論壇檔案根目錄下。

3.4 確保在後臺 介面->介面設定->導航欄 啟用了“外掛”, 在 擴充套件->論壇外掛->管理 啟用了對應外掛,清除一下快取,重新整理論壇首頁,就能看到結果了。


最後,總結一下我理解的DZ論壇外掛的執行機理與檔案間邏輯關係圖:

2009-04-19_145033.jpg 


模版檔案我用了字首hw_是為了以後擴充套件模版,因為可以通過程式模組根據條件裝載不同的模版,這個以後再說吧。

今天就先寫到這裡。

相關文章