每次保存节点后如何在drupal中执行操作?

for*_*ord 6 triggers drupal drupal-6

我正在开发Drupal中的Action,它应该在保存节点之后激活,将内容导出到XML(其中包括刚刚保存的节点中的数据),使用"触发器:保存更新的帖子后"触发器.

不幸的是,此操作实际上是在最近保存的帖子中的信息保存到数据库之前发生的.即.在稍后查看XML时,我发现我所做的最新更改未包括在内.编辑其他节点后保存将恢复以前丢失的数据.

保存过程完成后,如何才能启动我的操作?

Hen*_*pel 6

在这种情况下存在一个常见的陷阱,无论您是使用触发器还是Mike Munroes建议hook_nodeapi()(+1):

只要您的导出逻辑在处理更新的同一页面循环上运行,并且它用于node_load()获取节点数据,就node_load()可以在更新之前返回尚未包含更改的节点的静态缓存版本.如果这是您的问题,您可以通过两种方式解决它:

  1. 通过将TRUE第三个参数传递给强制重置静态节点缓存node_load().这将确保节点从数据库中新填充(以一些额外的数据库查询为代价,因此请注意潜在的性能影响).
  2. 如果你要去hook_nodeapi()路线,node_load()如果你将$node那里可用的对象直接传递给你的导出函数,你就可以避免完全调用,因为它将代表更新的状态.


Mik*_*roe 5

您应该使用hook_nodeapi并在插入和更新时调用您的操作.查看hook_nodeapi的文档,了解可以调用导出逻辑的其他实例.

模块名称='export_to_xml'的示例:

 /**
 * Implementation of hook_nodeapi().
 */
function export_to_xml_nodeapi(&$node, $op, $a3, $a4) {
  if ($op == 'update' || $op == 'insert') {
    export_logic_function();
  }
}
Run Code Online (Sandbox Code Playgroud)