2010-05-05 33 views
4

新模塊'foo'實現了可以定義一個或多個新內容類型的foo_node_info()由同一模塊定義的多種內容類型的hook_form

如果foo_node_info()定義了兩個內容類型,即內容類型「footypea」和內容類型「footypeb」,一個人如何去實現hook_form()(應該怎樣「鉤子」的名稱是什麼?)配置的每個節點的編輯表單?

drupal example中,新內容類型的名稱與模塊名稱相同。在上述示例中,模塊定義了兩種新的內容類型會發生什麼?

實施的hook_form()函數的形式應該是:footypea_form()和footypeb_form()嗎? (這似乎不起作用)

或者你應該實現一個單一的foo_form()函數,並在此創建並返回一個數組$ form ['footypea']和$ form ['footypeb']]這又是個別表單字段定義的數組?

回答

3

在模塊的hook_node_info()中,添加'module'屬性(請參閱http://api.drupal.org/api/function/hook_node_info/6)。

例如:

/** 
* Implementation of hook_node_info(). 
*/ 
function foo_node_info() { 
    return array(
    'footypea' => array(
     'name' => t('Foo Type A'), 
     'description' => t('This is Foo Type A'), 
     'module' => 'footypea', //This will be used for hook_form() 
    ), 
    'footypeb' => array(
     'name' => t('Foo Type B'), 
     'description' => t('This is Foo Type B'), 
     'module' => 'footypeb', //This will be used for hook_form() 
    ), 
); 
} 

現在,您可以添加以下hook_form()爲每種類型的實現(見http://api.drupal.org/api/function/hook_form/6)。

/** 
* Implementation of hook_form(). 
*/ 
function footypea_form(&$node, $form_state) { 
    // Define the form for Foo Type A 
} 

/** 
* Implementation of hook_form(). 
*/ 
function footypeb_form(&$node, $form_state) { 
    // Define the form for Foo Type B 
} 

這裏的技巧是每個元素的hook_node_info()模塊屬性不必是相同的實施hook_node_info()模塊。定義的每個類型都可以具有唯一的模塊屬性,用於實現類型特定的鉤子。

+0

+1:是的,這是絕對正確的,對於其他內容類型特定的鉤子也是如此:例如, 'footypea_access($ op,$ node,$ account)','footypeb_access($ op,$ node,$ account)','footypea_validate($ node,&$ form)','footypeb_validate($ node,&$ form) ($ node)','footypea_insert($ node)','footypea_update($ node)','footypeb_update($ node)','footypea_delete($ node)','footypeb_delete($ node)',等等 – Sk8erPeter 2012-01-04 15:51:22

0

在Drupal中實現鉤子時,調用節點類型並不重要,第一部分是創建它們的模塊的名稱。所以在這裏,你的foo模塊在foo_form()中實現了hook_form()。順便說一句,因爲它更容易,並且因爲它是在Drupal 7中發佈的,所以您還應該查看CCK製作內容類型。

相關問題