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

标签 drupal drupal-6 triggers

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

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

如何在保存过程完成后触发我的操作?

最佳答案

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

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

  • 通过传递 TRUE 强制重置静态节点缓存作为 node_load() 的第三个参数.这将确保节点从数据库中新鲜填充(以一些额外的 db 查询为代价,因此请注意潜在的性能影响)。
  • 如果您要去 hook_nodeapi()路线,您可以避免需要调用node_load()如果您通过 $node对象可直接用于导出函数,因为它将是更新状态的表示。
  • 关于drupal - 每次保存节点后如何在drupal中执行操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2784580/

    相关文章:

    drupal - 面包屑分隔符代码?

    mysql - 每行触发

    css - 在 ie10 上无法在 drupal 中裁剪

    drupal - 如何在更新模块之前检查是否需要更新数据库

    jquery - 根据 Drupal 7 中的视口(viewport)高度动态更改 DIV 高度

    html - 发送 HTML 电子邮件

    drupal - OrderBy 过滤掉 EntityFieldQuery 中带有空字段的行

    drupal-6 - 复选框而不是在 View 过滤器中选择

    java - 在 MySQL 中使用触发器时,在 JPA 中插入后创建的日期时间不会更新

    azure - Azure SQL 中使用审核的事件警报