2011-03-08 2 views
0

sites/default/modules/game.module에 game_block_view() 및 game_block_info()를 덮어서 맞춤 블록에 플래시 게임을 표시하기위한 간단한 모듈을 만들었습니다.

그러나 사용자 아바타와 성별 및 도시 (내 등록 양식에 2 개의 필수 입력란을 추가했습니다)를 FlashVars 매개 변수를 통해 내 블록의 플래시 게임에 전달해야합니다.

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); 
} 

불행하게도 나는 웹 페이지

에 위의 마지막 두 행으로 실행 된 출력 내가 무엇을하고하지 오전 참조 잘못?

감사합니다. 알렉스

답변

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! 
} 
+0

감사합니다! (추가 필드가 아니기 때문에 사용자 아바타에 file_managed.filename을 사용합니다.) –