2010-10-13 61 views
5

在drupal fapi中有一個屬性「#process」,它究竟是什麼?爲什麼密碼字段使用它來進行字段重複,而不是將它與主題相加?
我想用它來定義一個帶有hook_elements的新字段類型。drupal form api中「#process」回調的用途是什麼?

編輯:
這裏是我的hook_elements:

function test_elemets() { 
    return array(
     'test_field' => array( 
      '#input' => TRUE, 
      '#process' => array('test_field_process'), 
     ) 
    ); 
} 

和工藝回調:

function test_field_process($element, $edit, &$form_state, $complete_form) { 
    $element = array();  
    return $element;  
} 

,你在過程中的作用看,我用$元=陣列(),看看會發生什麼。但是表格是如此顯示的,爲什麼?

回答

9

閱讀the Forms API documentation on the '#process' form element property

它是回調函數,其中的每一個將與該元素定義數組傳遞給它被稱爲陣列。回調函數然後可以作用於元素定義數組以將其變成不同的(通常更復雜的)定義,例如,在附加平等檢查JavaScript文件的同時複製密碼字段,或者將一個組合的「無線電」定義轉換爲相應數量的特定單個「無線電」定義等。

如果您想要提供複雜的表單元素(例如多個'標準'元素的組合,或者自動添加標準JavaScript助手),但仍然保留了Forms API的簡單的聲明式方法。 (看馬 - 只有一個'#type' = 'myCrazyFormElement'陣列,即擴大「自動地」的東西的方式更復雜;)

通過主題化層否則可能會是可能的,這取決於使用情況,但需要更多的代碼,每一次你需要它。

4

api.drupal.org documentation on #process說:

的函數數組,稱爲 當處理一個元素。使用 這個回調函數,模塊可以「註冊」 進一步的操作。例如, 「無線電」的形式類型被擴展爲使用 處理功能 多個單選按鈕。

處理從不同的主題化的形式API內保持。您不能在主題圖層中更改表單數組(至少不能在D6中)。密碼專門爲#process添加form_expand_ahah。你也許可以雜牌大部分是進入主題層,但不是這一行:

$element['#cache'] = TRUE; 

由於緩存的主題層之前發生,即不能在主題層完成。更一般地說,儘管#process中發生的一些事情可能發生在主題層,但它不可能都發生在那裏,因爲表單比前端顯示更多;他們也是後端處理。

+0

謝謝you.But爲什麼該模塊提供該元件不這些命令添加到hook_elements函數本身?例如爲什麼寫$元件[「#緩存」〕中處理函數而不是example_elements = TRUE鉤? – 2010-10-13 21:58:05