在 Drupal 7 中,我想在节点发布时添加一个额外的进程。当该节点的“发布”事件触发时,我怎样才能被触发?
节点“发布”有什么钩子吗?
在 Drupal 7 中,我想在节点发布时添加一个额外的进程。当该节点的“发布”事件触发时,我怎样才能被触发?
节点“发布”有什么钩子吗?
有了核心功能,就没有钩子了。但修订模块提供了一个。
但是,您可以通过在更新 OP 上检查节点的状态来解决问题。虽然不是很聪明。
<?php
function MYMODULE_node_update($node){
if (isset($node->original->status) && $node->original->status == 0 && $node->status == 1){
MYMODULE_mymagic_func($node);
}
}
正如 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;
}
}
Ayesh K 的回答很好。我还通过使用 Drupal触发发布事件
找到了另一种选择。"Rules"
如果触发函数用于更新节点,则将函数 MYMODULE_node_update($node) 更改为函数 MYMODULE_node_presave($node)