新模块'foo'实现foo_node_info(),其中可以定义一个或多个新内容类型。
如果foo_node_info()定义了两种内容类型,即内容类型“footypea”和内容类型“footypeb”,那么如何实现hook_form()(“钩子”的名称应该是什么?是?)配置每个节点的编辑表单?
在drupal example中,新内容类型的名称与模块名称相同。在上述示例中会发生什么,其中模块定义了两种新的内容类型?
实现的hook_form()函数应该是以下形式:footypea_form()和footypeb_form()? (这似乎不起作用)
或者你应该实现一个foo_form()函数,并在其中创建并返回一个数组$ form,其元素为$ form ['footypea']和$ form ['footypeb'],这些元素又是各个表单字段的数组定义
答案 0 :(得分: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()
中每个元素的module属性不必与实现hook_node_info()
的模块相同。定义的每个类型都可以具有唯一的模块属性,用于实现特定于类型的挂钩。
答案 1 :(得分:0)
调用节点类型无关紧要,在Drupal中实现挂钩时,第一部分是创建它们的模块的名称。所以在这里,你的foo模块在foo_form()中实现了hook_form()。
顺便说一下,因为它更容易,因为它是在Drupal 7中出现的,所以你也应该查看CCK来制作内容类型。