小智 13
目前,在数据库中插入/更新/删除节点/实体后,Drupal核心不提供任何挂钩来执行操作.例如,在插入节点后,您无法发送提及节点的电子邮件,因为Drupal使用SQL事务,并且当调用钩子节点presave时节点尚未完全写入数据库,因此如果由于任何原因事务被回滚,则用户将收到虚假邮件.
所以Hook Post Action模块引入了几个新的Drupal钩子来克服这个限制:
https://drupal.org/project/hook_post_action
钩子没有被移除,但是为每个$ op拆分成单独的钩子.
请参阅:http://api.drupal.org/api/search/7/hook_node
对于post-save,你需要hook_node_insert()和hook_node_update()
hook_entity_presave如果您想在节点更新之前采取行动,我想可能是您正在寻找的钩子:
在即将创建或更新实体之前对其进行操作.
或者,如果您希望在更新后采取行动,请查看hook_entity_update:
更新时对实体采取行动.
只是为了多完成一点,如果您需要在节点保存/更新后执行任何操作,您可以使用@sina-salek 推荐的模块,或者您可以使用以下代码:
// Same for hook_node_save!
function my_module_node_update($node) {
if ($node->type == 'content_type_name') {
// Invoke your callback function AFTER the node is updated.
drupal_register_shutdown_function('_my_module_the_function_to_call', $node);
}
}
function _my_module_the_function_to_call($node) {
// do stuff...
}
Run Code Online (Sandbox Code Playgroud)
通过使用drupal_register_shutdown_function,您可以确保在挂钩完成并且节点已保留在数据库上时调用您的自定义函数。