我尝试通过此挂钩向内容类型添加一些字段,就像在Drupal 7示例中的node_example模块中所做的那样,但它甚至都没有被调用。有什么不对?
function education_node_type_insert($content_type){
$fields = _anketa_installed_fields();
foreach($fields as $field){
field_create_field($field);
}
$instances = _anketa_installed_instances();
foreach($instances as $instance){
$instance['entity_type'] = 'node';
$instance['bundle'] = 'anketa';
field_create_field($instance);
}
}
答案 0 :(得分:1)
当您禁用节点模块并将其卸载时,Drupal不会清除node_type表中与您的模块关联的节点类型的条目(我将其称为Drupal核心中的错误)。如果这些条目仍然存在重新启用模块时,hook_node_type_insert挂钩不会运行。
如果您首先从node_type表中手动删除这些条目;钩子应该运行。
答案 1 :(得分:0)
您是否尝试卸载(不禁用,但在从“卸载”选项卡禁用它后确实卸载)模块并重新启用它?
答案 2 :(得分:0)
在处理自定义模块时 - 无论是构建,调试,QAing,迁移,更新等 - 以下步骤通常都会有所帮助。如果不仔细查看您的代码,我建议您尝试以下步骤:
禁用模块,卸载/重新安装(如果可以从数据库中擦除模块数据),重新启用模块,然后运行update.php。检查Drupal& PHP / MySQL日志,运行cron.php清除浏览器& Drupal缓存,注销和重新登录,编辑角色&烫发。冲洗。重复......经常会解决无法解释的问题。
此外,这一切都假设您已经确认了整体模块架构和功能名称/拼写都可以。如果所有其他方法都失败了,请尝试在另一个实例上安装以查看是否可以复制该问题。
答案 3 :(得分:0)
在尝试添加字段之前,您是否已经运行过此操作?因为如果节点类型education_node_type_insert($type)
已经存在于$type
数据库表中,则不会调用node_type
函数,该表将在第一次运行后显示。
我认为这样做的正确方法是在hook_install
的实现中添加字段(在yourmod.install
中,并同时检查它们是否'已经添加了。)
此外,在开发过程中,每次更改字段时都需要卸载重新安装(例如drush dis -y yourmod && drush uninstall -y yourmod && drush en -y yourmod
)。
答案 4 :(得分:0)
首次安装后,您需要手动删除节点类型。
function example_uninstall () {
node_type_delete ('my_type');
}
Drupal默认不这样做可能有很好的理由:正确的行为是什么?
答案 5 :(得分:0)
为什么不使用hook_node_insert?
这是为每个新网络表单添加组件的工作示例:
/**
* Implements hook_node_insert().
*/
function modulename_node_insert($node) {
if($node->type == 'webform' && $node->is_new) {
module_load_include('inc', 'webform', 'includes/webform.components');
$components = array();
$components[0] = array(
'name' => 'Submitted Page URL',
'nid' => $node->nid,
'form_key' => 'hidden_submitted_page_url',
'type' => 'hidden',
'mandatory' => 0,
'weight' => 99,
'pid' => 0,
'value' => '',
'required' => 0,
'extra' => array(
'hidden_type' => 'hidden',
'description' => '',
'wrapper_classes' => 'hidden-submitted-page-url-wrap',
'css_classes' => 'hidden-submitted-page-url',
'private' => 0,
),
);
$components[1] = array(
'name' => 'Referrer Page URL',
'nid' => $node->nid,
'form_key' => 'hidden_referrer_page_url',
'type' => 'hidden',
'mandatory' => 0,
'weight' => 99,
'pid' => 0,
'value' => '',
'required' => 0,
'extra' => array(
'hidden_type' => 'hidden',
'description' => '',
'wrapper_classes' => 'hidden-referrer-page-url-wrap',
'css_classes' => 'hidden-referrer-page-url',
'private' => 0,
),
);
foreach ($components as $component) {
webform_component_insert($component);
}
}
}