【问题标题】:Drupal hook_user stop executionDrupal hook_user 停止执行
【发布时间】:2010-06-07 15:30:49
【问题描述】:

每当用户更新他们的个人资料时,我都需要使用 Drupal 6 的“hook_user”来更新第 3 方 API。

因此我使用“更新”操作。我面临的问题是,如果第 3 方 API 更新失败,我无法看到如何停止执行。

即用户更新他们的用户名,但如果 API 失败,阻止 Drupal 更新本地记录。

function myhooks_user($op, &$edit, &$account, $category) {

    switch ( $op )
    {

        case 'update':

            if ( FALSE === updateAPI($data) )
            {
                drupal_set_message("Cannot update user information", "error", false);

                return false; 
            }

            break;
    }
}

目前,return false 不会停止执行。

【问题讨论】:

  • 如果你在 if 语句中添加一个 watchdog() 调用,它会进入那个语句吗?我不确定 hook_user 是否可以以这种方式使用。
  • 是的,它正在进入函数 ok。

标签: drupal hook


【解决方案1】:

没有办法停止执行。

您应该能够用数据库中的内容覆盖$edit。这样就不会有任何变化。我还没有尝试过,但它应该可以正常工作。

你为什么要这样做?您可以只在数据库中添加一行,然后使用 cron 更新配置文件,以避免需要一遍又一遍地进行相同编辑的沮丧用户。

【讨论】:

  • 好的,有道理。我想这样做是为了维护一个外部数据库,例如,当用户更新他们的信息时,外部数据库就会更新。因此,如果外部更新失败,我想停止 Drupal 更新。我想我可以改用“验证”操作。
  • @JonB 除非您的外部数据库始终与您的 Drupal 数据库同步非常重要,否则我建议创建一个 cron 作业作为备份,而不是尝试同步数据库,直到您成功。 cron 作业每 5 分钟运行一次是正常的,所以你应该没问题。它对用户更有用,并且您不想阻止用户不保持他们的个人资料是最新的。使用 hook_cron 创建类似的 cron 作业也相当容易。
猜你喜欢
  • 1970-01-01
  • 2011-07-16
  • 2017-11-29
  • 2019-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-09
相关资源
最近更新 更多