1

在 hook_user_update 中,我正在检索 facebook 个人资料图片并将记录保存在 file_managed 表中。这一切进展顺利。但我还想为附加到用户实体的文件字段保存记录。通常我在这些钩子中所做的是将值分配给 $edit['field_something'],我认为这是正确的方法。这一直适用于其他字段类型,但不适用于文件字段。您可以在函数的末尾看到我转储变量以确认我有适合分配给 $edit['field_something'] 的东西——至少,我认为它是合适的。我没有收到任何错误,但在 field_data_field_image 表中没有创建任何记录。我错过了什么?谢谢!

/**
 *  Implementation of hook_user_update().
 *  
 */
function hifb_user_update(&$edit, $account, $category) {

  if (empty($account->field_image['und'])) {

    $fbid = $edit['field_facebook_id']['und'][0]['value'];

    if (!empty($fbid)) {

      $url = 'http://graph.facebook.com/' . $fbid . '/picture?type=large';

      if ($file_contents = file_get_contents($url)) {

        $size = getimagesize($url);
        $ext = image_type_to_extension($size[2]); 
        $filename = 'fb_' . $fbid . '_u_' . $account->uid . $ext;

        $uri = file_default_scheme() . '://' . $filename;

        // Saves the file to the default files directory and creates the record in files_managed table.
        $file = file_save_data($file_contents, $uri, FILE_EXISTS_REPLACE);

        //var_dump($file); die;
        /* Here's an example from the var_dump: object(stdClass)#120 (8) { ["fid"]=> string(3) "576" ["uri"]=> string(30) "public://fb_767816596_u_1.jpeg" ["filename"]=> string(21) "fb_767816596_u_1.jpeg" ["filemime"]=> string(10) "image/jpeg" ["uid"]=> string(1) "1" ["status"]=> int(1) ["timestamp"]=> int(1339686244) ["filesize"]=> int(2919) } */

        // Creates record in field_data_field_image table??
        $edit['field_image']['und'][0] = (array)$file;

      }
    }

  }

}
4

1 回答 1

0

我相信它不起作用的原因是因为在 hook_user_update 中,更新已经发生。所以为 $edit 设置一个值是没有效果的。我在问题中发布的相同代码在 hook_user_presave 中运行良好。

于 2012-06-14T15:48:21.430 回答