[DCTPE2010] Drupal 模組開發入門

4,107 views

Published on

Drupal 提供了非常大的彈性,加上社群所貢獻的大量模組,許多的功能似乎不需要動到程式碼就能夠達成。

不過隨著網站規模的擴大,或是個別需求的複雜化,透過操作來產生功能的形式遇到了操作繁雜或是執行效能不彰的問題,這也許就是進一步了解 Drupal 程式設計的時候了。

在這個議題中,主要針對如何透過程式設計技巧來完成所需要的功能,讓參與的朋友可以對於模組開發有些基本的認知。

0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
4,107
On SlideShare
0
From Embeds
0
Number of Embeds
156
Actions
Shares
0
Downloads
54
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

[DCTPE2010] Drupal 模組開發入門

  1. 1. Drupal 模組開發 By kiang
  2. 2. 站在台上這個 ... ●就這間電腦工作室 ( http://olc.tw ) ●台灣 PHP 聯盟 ( http://twpug.net ) ●... 其他不為人知的過去
  3. 3. 為什麼 要自己製作模組?
  4. 4. 1. 減少重複操作
  5. 5. Drupal 是少數有 驚人數量操作組 合的系統
  6. 6. 2. 簡化開發邏輯
  7. 7. 我會寫 PHP
  8. 8. 但我並不清楚數 以千計模組怎麼 來的
  9. 9. 3. 執行效率
  10. 10. 一個查詢搞定
  11. 11. 就沒必要用一堆 查詢
  12. 12. 模組的基本結構
  13. 13. my_module.info
  14. 14. name = My Module description = This is my module core = 6.x
  15. 15. my_module.module
  16. 16. <?php function 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'; }
  17. 17. .
  18. 18. .
  19. 19. 放個資料表
  20. 20. my_module.install
  21. 21. <?php function 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; }
  22. 22. my_module.module
  23. 23. 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); }
  24. 24. .
  25. 25. .
  26. 26. .
  27. 27. 加個表單
  28. 28. 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'); }
  29. 29. return theme('table', $headers, $rows) . drupal_get_form('my_module_fo rm');
  30. 30. .
  31. 31. 刪除資料
  32. 32. 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'); }
  33. 33. .
  34. 34. 以上只是玩玩 !!
  35. 35. 還要做更多
  36. 36. 資料檢查、顯示表格的分頁、區分使用者權限、將顯 示分離 ( 樣板 ) 、抽離商業邏輯 (MVC) 、建立自訂內 容類型、使用分類系統、加入 javascript 、與其他模 組互動、加入使用者可調整設定、多國語言、產生區 塊內容、使用佈景元素、系統排程、指令模式、開放 介面、技術文件、操作手冊、教育訓練、功能維護、 版本控制、需求轉換、程式碼的再運用、有事沒事去 看看新模組、新架構、新版本、 ......
  37. 37. 認命吧!
  38. 38. 下一位 ;)

×