4

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

节点“发布”有什么钩子吗?

4

4 回答 4

8

有了核心功能,就没有钩子了。但修订模块提供了一个。

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

<?php
function MYMODULE_node_update($node){
  if (isset($node->original->status) && $node->original->status == 0 && $node->status == 1){
     MYMODULE_mymagic_func($node);
  }
}
于 2012-10-06T20:11:05.563 回答
3

正如 Ayesh K所写,我也不知道核心功能。他的解决方法有效,但错过了立即发布新创建的节点的情况。

所以我扩展了代码并将其包装成一个函数:

/**
 * 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;
  }
}
于 2015-03-05T13:45:05.750 回答
2

Ayesh K 的回答很好。我还通过使用 Drupal触发发布事件
找到了另一种选择。"Rules"

于 2012-10-08T04:46:02.313 回答
-2

如果触发函数用于更新节点,则将函数 MYMODULE_node_update($node) 更改为函数 MYMODULE_node_presave($node)

于 2014-10-13T10:19:27.817 回答