Drupal 模組開發
        By kiang
站在台上這個 ...
●就這間電腦工作室
( http://olc.tw )
●台灣 PHP 聯盟


( http://twpug.net )
●... 其他不為人知的過去
為什麼

要自己製作模組?
1. 減少重複操作
Drupal 是少數有
驚人數量操作組
   合的系統
2. 簡化開發邏輯
我會寫 PHP
但我並不清楚數
以千計模組怎麼
   來的
3. 執行效率
一個查詢搞定
就沒必要用一堆
   查詢
模組的基本結構
my_module.info
name = My Module
description = This is my module
core = 6.x
my_module.module
<?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';
}
.
.
放個資料表
my_module.install
<?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;
}
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_fo
            rm');
.
刪除資料
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 、與其他模
組互動、加入使用者可調整設定、多國語言、產生區
塊內容、使用佈景元素、系統排程、指令模式、開放
介面、技術文件、操作手冊、教育訓練、功能維護、
版本控制、需求轉換、程式碼的再運用、有事沒事去
     看看新模組、新架構、新版本、 ......
認命吧!
下一位 ;)

[DCTPE2010] Drupal 模組開發入門