从一个模块管理多个自定义内容类型(drupal)

时间:2010-06-06 16:39:34

标签: drupal module

是否可以在一个模块中声明和管理多个自定义内容类型?我正在创建一个需要四种自定义内容类型的网站,我想从一个模块管理它们,而不是为每种内容类型创建模块。经过一些测试,我发现这似乎是不可能的。因为,除非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){
    ....
}  

我在这里做错了什么或者是不可能的,除了为每种内容类型创建模块之外别无选择。我非常感谢你的帮助。

2 个答案:

答案 0 :(得分:1)

您可以尝试使用功能模块(http://drupal.org/project/features)导出内容类型。它会自动生成代码以使其工作,您可以查看代码出了什么问题。

答案 1 :(得分:1)

所有挂钩的前缀应该是模块的名称,即mycontent_node_info()和mycontent_form(& $ node)。我认为内容类型本身可以随意调用,但按照惯例,您在模块中定义的任何全局都应该以模块名称作为前缀,以避免名称空间问题。所以你的内容变成了mycontent_type1,mycontent_type2等......至于处理hook_form,我想这样做的方法是检查传入的节点的类型并采取相应的行动。