0

複数のクライアントの異なるユーザー アカウントを管理するフル サービス サイトを運営しています。管理者ユーザーがどのメッセージにもアクセスできるように、privatemsg を変更しました。各ユーザーの未読メッセージを表示する方法について質問がありました。私が今持っているコードは、ログインしているユーザーの未読メッセージのみを表示します。コードは以下のとおりです。

$count = privatemsg_unread_count();
if ($count) {
print l( '(' . (int)privatemsg_unread_count() .' new)' , "messages",  array('title' => 'View Inbox')); 
}
4

1 に答える 1

1

privatemsg_unread_count()に引数を渡さない場合、現在ログインしているユーザーの未読メッセージの数が返されます。この関数は引数を受け入れます。これはユーザー オブジェクトです。

ユーザー ID のリストがある場合は、次のコードを使用して、各ユーザーの未読メッセージの数を取得できます。

foreach ($uids as $uid) {
  $account = user_load($uid);
  $count = privatemsg_unread_count($account);
  // ...
}

ユーザー ID のリストがなく、各ユーザーの未読メッセージの数を知りたい場合は、次のコードを使用できます。

$query = new EntityFieldQuery();

$query->entityCondition('entity_type', 'user')
  ->entityCondition('entity_id', 0, '>')
  ->propertyCondition('status', 1)
  ->addTag('DANGEROUS_ACCESS_CHECK_OPT_OUT');

$result = $query->execute();

if (isset($result['user'])) {
  $accounts = user_load_multiple(array_keys($result['user']));

  foreach ($accounts as $account) {
    $count = privatemsg_unread_count($account);
    // ...
  }
}
于 2012-12-22T16:21:40.857 に答える