是否可以在一个模块中声明和管理多个自定义内容类型?我正在创建一个需要四种自定义内容类型的网站,我想从一个模块管理它们,而不是为每种内容类型创建模块。经过一些测试,我发现这似乎是不可能的。因为,除非hook_form和content类型共享相同的模块名称,drupal不会调用hook_form。
以下是我想做的事情 -
function mycontent_node_info(){
return array(
'mycontent1' => array(
'name' => t('....'),
'module' => 'mycontent',
'description' => t('...),
'has_title' => TRUE,
'title_label' => t('Title'),
'has_body' => TRUE,
'body_label' => t('content body'),
),
'mycontent2' => array(
.......
),
'mycontent3' => array(
......
),
'mycontent4' => array(
......
),
);
}
function mycontent1_form(&$node){
$form['control1'] = array(
'#type' => 'select',
'#options' => array(
'0' => t('selection 1'),
'1' => t('selection 2'),
),
'#attributes' => array('id'=>'control1'),
);
$form['control2'] = array(
'#type' => 'select',
'#options' => array(
'0' => t('1'),
'1' => t('2'),
'2' => t('3'),
'3' => t('4'),
),
'#attributes' => array('id'=>'control2'),
);
return $form;
}
function mycontent2_form(&$node){
....
}
function mycontent3_form(&$node){
....
}
function mycontent4_form(&$node){
....
}
我在这里做错了什么或者是不可能的,除了为每种内容类型创建模块之外别无选择。我非常感谢你的帮助。
答案 0 :(得分:1)
您可以尝试使用功能模块(http://drupal.org/project/features)导出内容类型。它会自动生成代码以使其工作,您可以查看代码出了什么问题。
答案 1 :(得分:1)
所有挂钩的前缀应该是模块的名称,即mycontent_node_info()和mycontent_form(& $ node)。我认为内容类型本身可以随意调用,但按照惯例,您在模块中定义的任何全局都应该以模块名称作为前缀,以避免名称空间问题。所以你的内容变成了mycontent_type1,mycontent_type2等......至于处理hook_form,我想这样做的方法是检查传入的节点的类型并采取相应的行动。