2007-04-20 Tabbed Block 開發要點

很開心第一個實用的模組終於都算是「可以測試」
續上一回, 分享一下開發模組的小小心得
待同好可以互相交流, 提點一下這個初生之犢

入正題, 這個模組取自上一回的簡單的測試源碼
主要加入一個可以選擇模組的功能
雖然事前已經知道這個簡單功能牽連甚廣
但做著做著才知道這個功能牽連:
資料庫讀, 存
表格

資料庫的讀寫因為只需要記下模組的次序和名字
用內建的variable 表就可以了( 一個儲什麼也可以的地方 )
drupal 自己也有api 提供讀寫刪操作
variable_set( ''tabbed_block_settings'' , ''blog-0'' );
就可以將blog-0 放到 資料庫
你也可以將array 直接放到 arg2 中,
drupal core 會幫你處理, 而模組中就是將
0=>blog-0
1=>user-2
之類的順序放到tabbed_block_settings 中
而讀的代碼為
$block_list = variable_get( ''tabbed_block_settings'' , array() );
如果arg1的值找不到 則返回arg2

當然, hook_block() 的代碼也改變甚多
因為不再是hardcode, 而是要從資料庫中取出資料
再輸出相關html code
輸出html code 的部份用了views 模組的代碼
其他部份改動不是太大
只設定一個好用, 效率高的data structure 傳到輸出代碼的function 就可以了

頭大的是表單的處理
drupal 內建了一個form api
高度的abstraction 讓開發者可以簡單的寫出表單和作表單的處理
但abstraction 的程度太深, 反而要重新適應寫form 的方法
而且Tabbed Block 的表單處理方法中, 只有用戶按了save 才會儲存
令表單要記住每一個改變, 每一個add, delete, moves
這有別於一般的表單為這模組的開發帶來了不少的麻煩
參考views 模組也不得要領
最後唯有用了一個自創的方法tabbed_block_admin_setting()來實現
這function 同時處理add, delete, move, save
有點擁腫, 也用了$_POST 這類傳統的方法處理表單, 為節衷的方法

講一下form 的組成
drupal 主站有很多的方法
api.drupal.org 也有form quick start guide
這裡用的是quickguide 的方法
function form_build(){
$form[]=array(.......);
}
//hook_menu 內的callback:
''#callback''=>drupal_get_form(''form_build''),

這是最直接, 簡單的方法
特別適合全頁只有一張大表格
而且不會用到table 的地方
但如果大家留意到, move up, delete 的位置有一個類似table的
但直實只是視覺上似table, 實際是用了空格來排版
做到類似views, cck 的方式做設定

這模組設定的部份原理上已經跟cck, views 一類巨大的模組看齊
可以說是一個非常成功的, 練習用, 測試用的模組.

p.s. Tabbed Block v0.4 即將發佈
解決一定要使用jquery1.1.3 的問題
和中文化之後的error 問題

p.s.s. 一個新的模組也將會於近日發佈
請留意最新消息

Google