0

sites / default / modules / game.moduleのgame_block_view()とgame_block_info()を上書きして、カスタムブロックにフラッシュゲームを表示するための簡単なモジュールを作成しましたが、問題なく動作します。

ただし、ユーザーのアバターと、性別と都市(登録フォームに2つの必須フィールドを追加しました)をFlashVarsパラメーターを介してブロック内のフラッシュゲームに渡す必要があります。

これは、データベースから開始された後に$ 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行で生成された出力はWebページに表示されません。

私は何が間違っているのですか?

ありがとうございました!アレックス

4

1 に答える 1

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!  
}
于 2011-03-08T15:52:56.477 に答える