Drupal 7如何触发/挂钩节点“发布”事件?

时间:2012-10-06 19:45:13

标签: drupal drupal-7 drupal-nodes

在Drupal 7中,我想在节点发布时添加一个额外的进程。当该节点的“发布”事件触发时,如何触发?

节点“发布”是否有任何挂钩?

4 个答案:

答案 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)