定义和修改内容类型的函数。
每个内容类型都由一个主要模块维护,该模块可以是 node.module (用于在用户界面中创建的内容类型),也可以是实现hook_node_info () 以定义内容类型的模块。
在节点操作(创建、更新、查看、删除等)期间,会调用几组挂钩以允许模块修改基本节点操作:
Node-type-specific hooks : 当定义一个节点类型时,hook_node_info () 返回一个'base'组件。特定于节点类型的挂钩被命名为 base_hookname() 而不是 mymodule_hookname() (例如在名为“mymodule”的模块中)。仅调用节点类型的相应实现。例如,poll.module中的poll_node_info ()将“poll”节点类型的基础定义为“poll”。所以当一个poll节点被创建时, hook_insert ()只会在poll_insert ()上被调用。特定于节点类型的挂钩如下所示。
所有模块挂钩:这组挂钩在所有实现模块上调用,以允许其他模块修改主节点模块正在做的事情。例如,创建轮询节点时会在所有模块上调用hook_node_insert ()。
字段挂钩:与附加到节点的字段相关的挂钩。这些是从下面描述的字段操作函数调用的,并且可以是特定于字段类型或所有模块的挂钩。
实体挂钩:“实体”操作的通用挂钩。这些总是在所有模块上调用。
以下是调用的节点和实体挂钩、字段操作以及节点操作期间发生的其他步骤的列表:
创建新节点(在新节点上调用node_save ()):
hook_node_presave () (全部)
hook_entity_presave () (全部)
节点和修订记录写入数据库
hook_insert ()(特定于节点类型)
hook_node_insert ()(全部)我用它 经测试,这是insert之前执行的
hook_entity_insert () (全部)
hook_node_access_records () (全部)
hook_node_access_records_alter () (全部)
更新现有节点(在现有节点上 调用node_save ()):
hook_node_presave () (全部)
hook_entity_presave () (全部)
节点和修订记录写入数据库
hook_update () (特定于节点类型)
hook_node_update () (全部) 我用它 经测试,这是update之前执行的 ,下面有自己做的示例
hook_entity_update () (全部)
hook_node_access_records () (全部)
hook_node_access_records_alter () (全部)
加载一个节点(调用node_load ()、node_load_multiple () 或entity_load (),$entity_type 为 'node'):
从数据库中读取节点和修订信息。
hook_load () (特定于节点类型)
hook_entity_load () (全部)
hook_node_load ()(全部)
查看单个节点(调用node_view ()——注意 node_view ()的输入是加载的节点,所以上面的加载步骤已经完成):
hook_view () (特定于节点类型)
hook_entity_prepare_view () (全部)
hook_node_view ()(全部)
hook_entity_view()(全部)
hook_node_view_alter () (全部)
hook_entity_view_alter () (全部)
查看多个节点(调用node_view_multiple ()——注意node_view_multiple ()的输入是一组加载的节点,所以上面的Loading步骤已经完成):
hook_entity_prepare_view () (全部)
hook_view () (特定于节点类型)
hook_node_view ()(全部)
hook_entity_view()(全部)
hook_node_view_alter () (全部)
hook_entity_view_alter () (全部)
删除节点(调用node_delete ()或node_delete_multiple ()):
节点已加载(请参阅上面的加载部分)
hook_delete () (特定于节点类型)
hook_node_delete () (全部) 我用它
hook_entity_delete () (全部)
节点和修订信息从数据库中删除
删除节点修订(调用node_revision_delete ()):
节点已加载(请参阅上面的加载部分)
修订信息已从数据库中删除
hook_node_revision_delete () (全部)
准备要编辑的节点(调用node_form () - 注意,如果它是一个现有节点,它将已经被加载;参见上面的加载部分):
hook_prepare () (特定于节点类型)
hook_node_prepare () (全部) 我用它
hook_form ()(特定于节点类型)
在编辑表单提交期间验证节点(调用 node_form_validate ()):
hook_validate ()(特定于节点类型)
hook_node_validate () (全部)
搜索(调用node_search_execute ()):
hook_ranking () (全部)
执行查询以找到匹配的节点
加载结果节点(参见上面的加载部分)
结果节点已准备好供查看(请参阅上面的查看单个节点)
comment_node_update_index () 被调用。
hook_node_search_result () (全部)
搜索索引(调用node_update_index ()):
节点已加载(请参阅上面的加载部分)
节点已准备好供查看(请参阅上面的查看单个节点)
hook_node_update_index ()(全部)
文件
modules/
node/
node.api.php,第 8 行
Node 模块提供的钩子。
评论
挂钩顺序
我想知道调用这些挂钩的顺序。
我还没有找到关于这个主题的文档。
并且对同样感兴趣
并且对关于实体的同样事情感兴趣。
hook_node_view()有什么用
请指定条件,我们可以在哪里使用 hook_node_view() ?
渲染节点对象以供查看时
渲染节点时使用函数 hook_node_view 。例如在节点页面上,或在首页预告视图中,或您网站上的任何其他地方。
如何使用 hook_prepare 在节点表单之前显示表单?
我想在为特殊类型添加新节点之前显示另一种形式?如何实现这一点?
更多挂钩
https://www.drupal.org/project/hook_post_action
我自己亲自做的示例,绝对 OK
//节点更新的 hook_node_update ,,为什么执行两次
function custom_twenty_two_jses_node_update($node)
{
//节点更新前的 hook ,,为什么执行两次,,get方法 node/nid/edit 是执行一次, 同时 点铵钮post提交时,又执行一次
//我把 $_POST['form_id'] 不为空时,真正保存时才执行 这个 hook_node_update
if ($node->type == 'jses_terminal_manager' && !empty($_POST['form_id'])) {
$log_type = 'jses_terminal_manager';
$log_action = 'update';
$log_content = _get_jses_terminal_manager_log_content($node);
$log_precontent = _get_jses_terminal_manager_log_precontent($node);
_save_log($log_type,$log_action,$log_content,$log_precontent);
}
}
来自 https://api.drupal.org/api/drupal/modules%21node%21node.api.php/group/node_api_hooks/7.x