我看到hook_node_type()允许我拦截和修改新创建的或新修改的节点类型。但显然,当创建或修改节点的字段定义时,hook_node_type()是而不是。
例如,当我创建一个节点类型" my_bio"时,会触发hook_node_type()。但是,如果我然后添加一个字段" my_photo"到了#my; my_bio" node-type,则不触发hook_node_type()。
在Drupal 6中,有没有办法编写一个有效扩展hook_node_type()的钩子,以便在添加或更改节点类型中的字段时调用钩子?
或者,是否有添加或更改任何字段定义时调用的钩子?
更具体地说,这正是我想要实现的目标: 我有两个自定义格式化程序,它们是" mates":formatter_1和formatter_2。当添加或修改nodetype中的某个字段时,我会检查字段格式化程序是否为formatter_1。如果是,我然后检查nodetype是否包含" mate"对于该字段,即格式化器为formatter_2的第二字段。如果没有,我在这个节点类型中添加一个字段配对。
答案 0 :(得分:1)
<强> EDITED 强>
解决问题的更新......
只要字段实例附加到节点类型,或者已更新已附加到节点类型的实例,CCK就会触发一个钩子。它被称为hook_content_fieldapi()
;文档似乎很粗略,但在content.crud.inc
file中提到它有以下操作:
钩子实现看起来像:
function mymodule_content_fieldapi($op, $field) {
if ($op == 'create instance') {
if ($field->foo == 'bar') {
// Do something
}
}
}
作为&#39;实例&#39;本质上定义节点类型和字段之间的关系,这应该是一个开始你想要做的事情的好地方。我建议将$field
的值倾倒在钩子中,以查看您必须使用的变量。