2011-10-06 77 views
0

我有一个插入钩子,只要用户添加一个节点就会捕获节点。 因此,这里是我的代码:Drupal插入钩子失败

function blah_insert($node){ 
    $record = array(
      'nid' => (int) $node->nid 
    ); 
    drupal_write_record('table_name', $record); 
} 

模式::

table_name(
    nid  int primary key not null 
) 

表演上drupal_write_record结果的假返回值进行检查。 db_query也不起作用。 var_dump证实所有的字段都是它们应该是的地方。

节点正在正确插入到节点表中,但不是由我的安装文件中的模式定义的表(不是像我上面的模式那样写的 - nid被定义为int并且所有其他相关领域)。

有没有人对发生了什么有什么想法?

回答

1
  1. 确保您的模块已安装并启用
  2. 确保您的模块名称是绝对命名blah(或任何你把以前_insert
  3. 确保您使用的右钩拳..如果你的模块不负责定义一个内容类型(即'节点'模块),那么你使用的是错误的。从hook_insert的文档:“这个钩子只在定义节点内容类型的模块上被调用“这可能是因为你正在寻找hook_node_insert(),它会响应插入任何类型的节点。
  4. 当你在你的模块中实现任何钩子时,确保你事后清除缓存,具体取决于你使用的Drupal的版本,这些实现可以被缓存以便更快地访问,并且直到该缓存被清除后才会被拾取。
  5. 检查您的自定义表是否确实存在于数据库中!如果不抓取devel module,请安装它并访问/ devel/reinstall,在其中可以调用完整的模块重新安装。

检查完这些,如果是仍然不起作用它的症状与你的Drupal安装一个更大的问题......如果你的模式是因为你说这是上面则没有理由如果函数确实正在运行,则drupal_write_record()将不起作用。

+0

是的我已经发现这个问题,这是一些奇怪的命名约定。指出hook_insert()也有帮助。谢谢! –