我创建了一个简单的模块,通过覆盖sites/default/modules/game.module中的game_block_view()和game_block_info()来自定义块中显示flash游戏,并且它可以正常工作。
然而,我需要通过FlashVars参数将用户头像以及性别和城市(我已将2个必填字段添加到注册表单)传递到我的区块中的Flash游戏。
所以我试图重载hook_user_load,因为我认为这是在从数据库启动后向$ user对象添加属性的方法(这可能发生在用户登录时)或改变他/她的个人资料数据?):
function game_user_load($users) {
global $user;
$uid = $user->uid;
$result = db_query('select filename from {file_managed} where uid=:uid', array(':uid' => array($uid)));
$avatar = $result->fetchField();
$users[$uid]->avatar = $avatar;
drupal_set_message("<pre>$uid: $avatar</pre>\n");
print_r($users);
}
不幸的是,我看不到网页上面最后两行产生的输出
我做错了什么?
谢谢! 亚历
答案 0 :(得分:2)
全局用户对象不通过hook_user_load(),请参阅http://api.drupal.org/api/drupal/includes--session.inc/function/_drupal_session_read/7。不要问我为什么,这就是它的方式:)
使用user_load()时,会自动加载任何添加的字段,您不需要自定义代码。您只需要知道如何访问它们,这有点复杂。
这样的事情应该有效:
global $user;
// $account is now a fully loaded user object.
$account = user_load($user->uid);
// Your field name is probably 'field_avatar'.
if ($avatar = field_get_items('user', $account, 'field_avatar')) {
dpm($avatar); // only works with devel.module, strongly suggested!
}