2010-07-27 51 views
3

我可以在註冊中添加一個額外的字段。我需要知道的是,我需要採取哪些步驟才能獲取該輸入並將其插入到Drupal的用戶表中。下面的代碼是在我的模塊中,這隻在表單中增加了一個字段,但是當它提交時它不會對數據做任何事情。hook_user():在數據庫中插入額外的字段不僅僅是表格

function perscriptions_user($op, &$edit, &$account, $category = NULL){ 
    if ($op == 'register') { 
    $form['surgery_address'] = array (
     '#type' => 'textarea', 
     '#title' => t('Surgery Address'), 
     '#required' => TRUE, 
    );  

    return $form;  
    } 

    if ($op == 'update') { 
    // … 
    } 
} 

回答

7

據報道在hook_user() documentation:正在執行什麼樣的動作

$運算。可能的值(按字母順序):
- 「插入」:正在添加用戶帳戶。該模塊應該將其用戶對象的自定義添加保存到數據庫中,並在$ edit中將保存的字段設置爲NULL。
- 「更新」:用戶帳戶正在更改。該模塊應該將其用戶對象的自定義添加保存到數據庫中,並在$ edit中將保存的字段設置爲NULL。
- 「驗證」:用戶帳戶即將被修改。該模塊應驗證自定義添加到用戶對象,根據需要註冊錯誤。

該模塊需要在hook_install()中創建自己的數據庫表。

hook_user()可以用下面的代碼來實現,例如:

function perscriptions_user($op, &$edit, &$account, $category = NULL){ 
    if ($op == 'register' || ($op == 'form' && $category = 'account')) { 
    $form['surgery_address'] = array (
     '#type' => 'textarea', 
     '#title' => t('Surgery Address'), 
     '#required' => TRUE, 
    ); 

    return $form;  
    } 

    if ($op == 'insert' || $op == 'update') { 
    prescriptions_save_user_profile($account->uid, $edit['surgery_address']); 
    } 
    if ($op == 'validate' && $category == 'account') { 
    // Verify the entered values are valid. 
    // In this example, the value is contained in $edit['surgery_address']. 
    } 
} 

prescriptions_save_user_profile()的是,在數據庫保存用戶簡檔的值的功能。代碼檢查類別以避免在用戶配置文件編輯表單中顯示的所有選項卡中顯示相同的表單字段。

+0

那麼你是說因爲我已經定義了這個表單域,它會自動添加到數據庫中(如果存在的話)。我知道如何使用模式api和hook_install()。我在這裏偏離軌道嗎?有沒有更多的澄清?我只是很難理解文檔的內容。 – 2010-07-27 15:00:37

+0

@Jonathan:不需要。它是需要保存它在用戶表單中添加的字段的值的模塊。 Drupal核心代碼無法將從第三方模塊添加的字段保存在數據庫表中。實際上,Drupal核心代碼會將額外的字段保存在'$ user-> data'中;這就是文檔建議「在$ edit'中將保存字段設置爲NULL」的原因。 – kiamlaluno 2010-07-27 15:14:22

+0

對,即時瞭解更多即時消息如此接近!我可以做些什麼,並且偷走你幾分鐘的時間來向我展示如何從表單中訪問與我的小例子相關的數據?我可以自己添加數據庫和模式,我只需要弄清楚在什麼階段我需要獲取數據和如何獲取值。我保證我會給你最高評分! :-) – 2010-07-27 15:27:44

相關問題