是否有可能使用Drupal的API来获取用户的列表?(Is it possible to use t

2019-07-30 19:50发布

我想获得所有谁被赋予一定的角色的用户列表。 我可以写我自己的SQL,但我想尽可能多地使用API​​。

Answer 1:

一般有此类型的任务没有Drupal的API函数(拉起符合某些条件的实体)。 它趋向于集中在API中单一实体CRUD功能; 一切是多达开发者自己的SQL技能。

Views模块允许你通过建立角色,权限等过滤用户的名单 - 但它可以很容易地矫枉过正。



Answer 2:

您可以使用entity_load让用户的阵列。 这里是将创建admin用户的所有邮件列表的样本(用于发送通知)

<?php
$users = entity_load('user');
$emails = '';
foreach($users as $user) {
  if (array_key_exists(3, $user->roles)) {
    if (strlen($emails) > 0) {
      $emails .= ' ' . $user->mail;
    } else {
      $emails = $user->mail;
    }
  }
}
?>


Answer 3:

为我工作的SQL:

$users = "";
$result = db_query('SELECT users.name AS users_name FROM users users
      INNER JOIN users_roles users_roles ON users.uid = users_roles.uid
      WHERE users_roles.rid = 4');

while ($existing_user = db_fetch_object($result)) {
      if ($users != "") $users .= ", ";
      $users .= $existing_user->users_name; // or do whatever
}
echo $users;

请记住,这是为Drupal 6,我不知道这对大用户群的性能。 不知道的Drupal 7。



Answer 4:

一个简单的选择是使用次数生成SQL(当你按下预览按钮出现在视图下方自身)为您,然后使用Drupal的SQL抽象层来获得你所需要的结果,如果你需要获得访问原始数据而不是显示的图。

它会看起来有点像这样:

$result = db_query('SELECT users.uid AS uid,
   users.mail AS users_mail,
   users.name AS users_name
 FROM users users');
while ($existing_user = db_fetch_object($result)) {
    print_r($existing_user); // or do whatever
  }

只需添加更多的字段到视图,以获得完整的查询。



Answer 5:

在Drupal 8:

$users = \Drupal\user\Entity\User::loadMultiple();

如果你想获得如只有管理员:

$admins = [];
foreach ($users as $user) {
  if ($user->hasRole('administrator')) {
    $admins[] = $user;
  }
}


Answer 6:

我不知道任何API可以帮助角色收集用户。 在这里,你有一些链接,您可以得到的东西: http://drupal.org/node/82002 。 虽然SO是我建议使用drupal.org或#drupal通道irc.freenode.org上为Drupal相关的问题一个真棒服务。

PS:有时SQL是不是邪恶的:)



Answer 7:

在Drupal 7,使用EntityFieldQuery是正确的方式。



Answer 8:

在Drupal 8以下工作(在这个例子中,加载所有用户与administrator的角色)

\Drupal::service('entity_type.manager')
  ->getStorage('user')
  ->loadByProperties(['roles' => 'administrator']);

将返回用户实体的名单。

为了得到列表uid !而非,实体领域查询:

$query = \Drupal::service('entity_type.manager')->getStorage('user')->getQuery();
$query->condition('roles', 'administrator');
$query->execute();


文章来源: Is it possible to use the Drupal api to get a list of users?
标签: php drupal