在Drupal 7中,我想在节点发布时添加一个额外的进程。当该节点的“发布”事件触发时,如何触发?
节点“发布”是否有任何挂钩?
答案 0 :(得分:8)
凭借核心功能,没有钩子。但是Revisioning模块提供了一个。
但是,您可以通过检查更新OP上的节点状态来解决此问题。虽然不是很聪明。
<?php
function MYMODULE_node_update($node){
if (isset($node->original->status) && $node->original->status == 0 && $node->status == 1){
MYMODULE_mymagic_func($node);
}
}
答案 1 :(得分:2)
Ayesh K答案很好。
我还发现了另一种方法,使用Drupal "Rules"
来触发发布事件。
答案 2 :(得分:2)
作为Ayesh K writes,我也不知道核心功能。他的解决方法有效但却错过了新创建的节点立即发布的情况。
所以我扩展了代码并将其包装成一个函数:
/**
* Checks if a node is being published.
*
* @param object $node
* The node to check.
*
* @return bool
* TRUE if node is now published and
* 1) was not published before or
* 2) did not exist before;
* FALSE in all other cases.
*/
function MYMODULE_node_is_being_published(&$node) {
if (isset($node->original)) {
return (
isset($node->original->status) &&
$node->original->status == 0 &&
$node->status == 1
);
}
else {
return $node->status == 1;
}
}
答案 3 :(得分:-2)
如果触发器功能用于更新节点,那么它是自己的, 更改函数MYMODULE_node_update($ node)以运行MYMODULE_node_presave($ node)