不调用hook_node_type_insert

时间:2013-07-30 19:08:55

标签: drupal drupal-7 drupal-modules

我尝试通过此挂钩向内容类型添加一些字段,就像在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);
            }
    }

6 个答案:

答案 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);
    }
  }
}