[dctpe2010] drupal 模組開發入門
DESCRIPTION
Drupal 提供了非常大的彈性,加上社群所貢獻的大量模組,許多的功能似乎不需要動到程式碼就能夠達成。 不過隨著網站規模的擴大,或是個別需求的複雜化,透過操作來產生功能的形式遇到了操作繁雜或是執行效能不彰的問題,這也許就是進一步了解 Drupal 程式設計的時候了。 在這個議題中,主要針對如何透過程式設計技巧來完成所需要的功能,讓參與的朋友可以對於模組開發有些基本的認知。TRANSCRIPT
Drupal 模組開發By kiang
站在台上這個 ...
●就這間電腦工作室( http://olc.tw )●台灣 PHP 聯盟( http://twpug.net )●... 其他不為人知的過去
為什麼
要自己製作模組?
1. 減少重複操作
Drupal 是少數有驚人數量操作組
合的系統
2. 簡化開發邏輯
我會寫 PHP
但我並不清楚數以千計模組怎麼
來的
3. 執行效率
一個查詢搞定
就沒必要用一堆查詢
模組的基本結構
my_module.info
name = My Moduledescription = This is my modulecore = 6.x
my_module.module
<?phpfunction my_module_menu() { $items['my_module'] = array( 'title' =>'My Module', 'page callback' =>'my_module_page', 'access arguments' =>array('access content'), 'type' =>MENU_NORMAL_ITEM ); return $items;}
function my_module_page() { return 'Hello, this is my module';}
.
.
放個資料表
my_module.install
<?phpfunction my_module_install() { drupal_install_schema('my_module');}function my_module_uninstall() { drupal_uninstall_schema('my_module');}function my_module_schema() { $schema = array( 'my_module' =>array( 'fields' =>array( 'id' =>array('type'=>'serial'), 'name' =>array('type'=>'varchar', 'length'=>'255'), 'email' =>array('type'=>'varchar', 'length'=>'255') ), 'primary key' =>array('id') ), );
return $schema;}
my_module.module
function my_module_page() { $result = db_query('select * from my_module'); $rows = array(); while ($data = db_fetch_object($result)) { $rows[] = array($data->id, $data->name, $data->email); } $headers = array('ID', 'Name', 'Email'); return theme('table', $headers, $rows);}
.
.
.
加個表單
function my_module_form( & $form_state) { $form = array(); $form['name'] = array( '#type' =>'textfield', '#title' =>t('Name'), ); $form['email'] = array( '#type' =>'textfield', '#title' =>t('Email'), ); $form['submit'] = array('#type'=>'submit', '#value'=>'Submit'); return $form;}
function my_module_form_submit($form, & $form_state) { db_query('insert into my_module values (null, \'%s\', \'%s\')', $form_state['values']['name'], $form_state['values']['email']); drupal_goto('my_module');}
return theme('table', $headers, $rows) .
drupal_get_form('my_module_form');
.
刪除資料
function my_module_page($arg = 0) {$arg = intval($arg);
if($arg > 0) { db_query('DELETE FROM my_module WHERE id = %d', $arg); drupal_set_message('Data removed!!!');
} $result = db_query('select * from my_module'); $rows = array(); while ($data = db_fetch_object($result)) { $rows[] = array($data->id, $data->name, $data->email, l('Delete', 'my_module/' . $data->id) ); } $headers = array('ID', 'Name', 'Email', 'Action'); return theme('table', $headers, $rows) . drupal_get_form('my_module_form');}
.
以上只是玩玩 !!
還要做更多
資料檢查、顯示表格的分頁、區分使用者權限、將顯示分離 ( 樣板 ) 、抽離商業邏輯 (MVC) 、建立自訂內容類型、使用分類系統、加入 javascript 、與其他模組互動、加入使用者可調整設定、多國語言、產生區塊內容、使用佈景元素、系統排程、指令模式、開放介面、技術文件、操作手冊、教育訓練、功能維護、版本控制、需求轉換、程式碼的再運用、有事沒事去
看看新模組、新架構、新版本、 ......
認命吧!
下一位 ;)