2011-08-29 31 views
4

我添加了一個字段到一個節點使用hook_form_alter,我可以看到它很好,但現在我想當然也輸入在該字段中的數據也保存。我必須做什麼才能發生?Drupal保存數據hook_form_alter

回答

4

當您更改表單時,您還需要向模塊添加表單提交處理程序;通過這種方式,您的模塊將在提交表單時被調用,並且您可以保存您添加的字段的值。

如果有多個按鈕,那麼最好將提交處理程序添加到您需要採取行動的特定按鈕。例如,假設表單有兩個提交按鈕:「保存」和「刪除」;如果使用$form[#submit][] = "my module_form_submit";添加提交處理程序,則即使點擊「刪除」按鈕,也會調用提交處理程序。

據報道在Form buttons can define custom #submit and #validate handlers

所有形式可以有「#validate」以及包含驗證和提交處理程序的名單當用戶提交數據要執行「#submit」屬性。以前,如果表單包含多個提交按鈕以啓動不同的操作(例如更新記錄而不是刪除操作),則必須檢查傳入的$ form_values ['op']是否爲點擊按鈕的名稱,然後執行不同的代碼根據其價值。

現在,如果需要,可以在每個單獨的窗體按鈕上定義#validate和#submit屬性。

當使用特定按鈕提交表單時,將使用其驗證和提交處理程序,而不是默認的表單級別。如果沒有在按鈕級別指定,則將使用表單級別處理程序。

此外,The 'op' element in the form values is deprecated and should not be relied upon報告:

如上所討論的,每個按鈕可以具有 「#validate」 和與其相關聯的 「#submit」 功能。因此,應該有一個按鈕提交表單並調用正常的$form_id_validate$form_id_submit處理程序。任何需要調用不同驗證或提交功能的其他按鈕都應該有button-specific functions。還要注意,表單值中的'op'元素(對應於Drupal 5.x中有多個表單時單擊的按鈕)不應再被依賴並且可能不存在。