drupal 7 深入研究模組開發 (一)

有鑑於 CMF drupal 系統逐漸在世界各地市佔率的提高,已玩 drupal 多年的我,最近將進行多篇 drupal7 模組開發研究分享,一方面做為個人筆記,另一方面也提供網友深層的了解及認識模組開發。參與 drupal 社群多年,一直以來感受到的玩 durpal 的朋友不外乎是有許多社群朋友的模組貢獻,減少專案的開發時程,利用現有的模組快速完成網站的開發,但由於過於依賴現有的模組,多數朋友常常不知道如何去修改客制化或者是自我開發模組,還有更多朋友是完全不會 php 誤以為只要利用 drupal 就可以輕輕鬆鬆的搭建一個客製化的系統,其實答案是錯,drupal 雖然屬於 CMS 內容管理,但更多人稱呼它是 CMF ,F 代表 framework 也就是框架,要能玩 PHP framework 框架,首先也要先具備 PHP 程式語言的技術,若基礎不懂,就不用談學好 PHP 框架技術,更遑論要學習開發 drupal 模組,因為它就是框架的技術延伸,基於 durpal8 尚未正式發表,因此在此先暫時不探討 drupal8 的模組開發,我們僅就現有的 drupal 7 模組開發進行研究學習。

首先從 drupal 7模組內的文件開始進行分析
drupal 7模組檔案包含下列:

.info
模組識別文件。
具體內容參考:Drupal 7 模組 .info 文件介紹

.module
是主模組文件。所有鉤子(hook)都能寫在這裡面

.install
在第一次註冊模組(enabled)的時候,呼叫 .install 文件。他一般用來建立資料庫,插入資料。他沒有任何特別符號,只是一個不同擴展名的 PHP文件。
卸載(uninstall)模組,或新版本模組的升級,的時候也會用到。

具體內容參考:Writing .install files (Drupal 7.x) 
參考:Drupal 7 模組開發 新增自定義表(table) hook_schema

.inc
.inc常被用來做輔助文件,在必要時才加載inc裡的程式碼。在特定情況下才執行的程式碼,如果菜單(menu)裡回調(callback)才用到程式碼,可以分開寫在單獨的.inc文件裡。
.inc文件可以不寫,都寫在.module文件中,但是必須隨時清除緩存。而.inc中的更改,就不需要清除緩存。

.test
.test文件裡包含了測試程式碼,這些程式碼實際上是在 SimpleTest框架上執行。
參考:Testing (simpletest) Tutorial (Drupal 7)

.php
.php 檔似乎在不少模組中也常常看到,許多 drupal.org 官網所提供模組的朋友也常常會利用 drupal api 函數直接寫成 php 檔做為引用,個人的研究認為 php 檔應該為非正式的 inc 檔,做用與 inc 檔相同,或許是為了區分模組的功能才另外寫成 php 檔,另一種型態則是要寫成 tpl .php 時會特別去設計的文件,為了讓系統管理者能自行定義模組功能的版型外觀而寫的 tpl 文件,附檔名也是.php,不過這部分真正的解釋仍有待查證。

.js
.js 檔似乎也是在模組的 ui 上常常被拿來引用的程式,功能越強大的模組,在 admin 身分登入後,能利用 javascript 程式語言而做出許多系統管理操作的 ui 來控制功能面的設定,或者是模組本身需要利用到 javascript、jquery等等不同的功能,都可以增加 .js 檔案在模組裡面。

.css
css 檔則是定義模組 ui 外觀的樣式,有時會特別在後台的管理功能外觀中特別去定義樣式,有時則是要使用模組的功能放在前台網站時,預設的功能 ui 樣式,也都會特別另外寫好 css檔,在安裝時引用進來。

結論
對於擅長利用 php 開發網站的 php 程式設計師,初次接觸 durpal 系統,會認為很不上手,學習曲線很長,要利用 drupal 開發一個系統怎麼會那麼麻煩,但其實以 php 程式設計師而言,入門點應該著重於 drupal 模組開發,因為一位多年 php 程式設計師而言,過來學習 drupal 模組開發曲線會高於利用 durpal 架設網站,以drupal 角度而言,架設網站的工作已經交接給系統管理人員去負責了,包含 linux 系統安裝維護設定、mysql 系統安裝維護設定等,這部分也包含了 drupal 的系統安裝設定,然後更進階的系統管理人員則是要去進行底層的 linux、mysql 及 durpal 系統效能調教,及內容呈現的設定,對於細部的功能元件開發,則回歸到 php 程式人員進行研發,故早期利用 php 開發網站者,踏入 drupal 領域的新手,可以將心態調整為研發單一drupal 功能模組的 php 開發人員,drupal 模組的開發,應該比起網站整體的開發來的容易些,drupal api 所提供的函數,也比起 php 現有熱門的框架技術 symfony、yii、codelgniter、laravel、zend framework、cakePHP 等等等,,,來的容易學習上手,從多數 drupal 7 熱門模組原碼分析,drupal 6及 7 的模組,並沒有非常明確的 MVC 定義,比較偏向
PHP OOP,而 drupal 6 及 7 僅需使用 api 函數則可呼叫 drupal 自訂的功能,可以說是非常好開發上手,當然前提是要對 PHP OOP 以及 PHP framweork 框架等技術非常熟悉的程式設計師人員。後續將詳細以範例做為模組開發說明。

留言

這個網誌中的熱門文章

c語言-關於#define用法

CMD常用網管指令

PHP 與 JavaScript 之間傳值利用 json