2012-10-06 43 views

回答

2

Ayesh K答案很好。
我还发现使用Drupal "Rules"来触发发布事件的另一种方法。

7

随着核心功能,没有挂钩。但Revisioning模块提供了一个。

但是,您可以通过检查更新OP上节点的状态来解决问题。虽然不是很聪明。

<?php 
function MYMODULE_node_update($node){ 
    if (isset($node->original->status) && $node->original->status == 0 && $node->status == 1){ 
    MYMODULE_mymagic_func($node); 
    } 
} 
-2

如果触发功能是更新节点它的自我, 更改功能MYMODULE_node_update($节点)的功能MYMODULE_node_presave($节点)

1

由于Ayeshķ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; 
    } 
}