получение списка пользователей в Drupal 7 с использованием PHP - PullRequest
3 голосов
/ 10 декабря 2011

Как я могу получить имена пользователей из базы данных Drupal 7, используя PHP?

См. Это: Можно ли использовать API Drupal для получения списка пользователей?

Это для Drupal 6, и я пробовал это, но там написано

Call to undefined function db_fetch_object()

Вот мой код:

$result = db_query("SELECT name AS users_name FROM {users}");
while($row = db_fetch_object($result)) {    
        print_r($row);      
}

Ответы [ 11 ]

8 голосов
/ 10 декабря 2011

Давайте попробуем

$query = db_select('users', 'u');
    $query->fields('u', array('name'));
    $result = $query->execute();
    while($record = $result->fetchAssoc()) {
         print_r($record['name']);
    }
5 голосов
/ 24 июня 2013

В Drupal 7 вы можете выбрать всех пользователей, используя entity_load,

Чтобы получить только имена пользователей, используйте следующее,

$users = entity_load('user');
$user_names = array();
foreach ($users as $user_id => $user) {
  $user_names[] = $user->name;
}
4 голосов
/ 10 декабря 2011

user_load_multiple
Пример из модулей \ profile \ profile.pages.inc:

$users = user_load_multiple($uids);

$content = '';
foreach ($users as $account) {
  $profile = _profile_update_user_fields($fields, $account);
  $content .= theme('profile_listing', array('account' => $account, 'fields' => $profile));
}

Обратите внимание, что в drupal 7 все происходит через сущность. Это не так быстро, но гибко ...

2 голосов
/ 10 декабря 2011
$query = db_select('users', 'u');

$query
  ->condition('u.uid', 0, '<>')
  ->fields('u', array('name'));

$result = $query->execute();

Здесь - вся документация для базы данных Drupal 7 api

1 голос
/ 24 ноября 2014

Drupal 7 представляет новую концепцию Entity.Пользователь также включен в Entity сейчас.Вы можете использовать следующую функцию entity_load (), чтобы получить сведения обо всех сущностях.

Чтобы получить имена пользователей в массиве:

$users = entity_load('user');
$usernames = array();
foreach($users as $id => $user){
    $usernames[$user->uid] = $user->name;
}
print_r($usernames);

Спасибо

1 голос
/ 22 ноября 2013

Мой пример кода для получения списка пользователей с сайта drupal,

$all_users = entity_load('user');
foreach($all_users as $value) {
  $user_list = (array)$value;
  $users[$user_list['uid']] = $user_list['name'];
}

Теперь вы можете получить ответ из переменной массива $ users.

Например, если вы хотите перечислить всех пользователей, кроме администратора (пользователь по умолчанию), используйте следующий пример:

$all_users = entity_load('user');
foreach($all_users as $value) {
  $user_list = (array)$value;
  if($user_list['uid'] > 1) {
    $users[$user_list['uid']] = $user_list['name'];
  }
}

В приведенном выше примере идентификатор каждого пользователя помещается в качестве индекса массива, а имя каждого пользователя сохраняется в качестве значения массива.

1 голос
/ 10 декабря 2011

Ваш код был почти верным, если вы изменили выражение while на

while ($result as $row) 

db_fetch_object больше не требуется в d7

, это сработало бы.Хотя вызовы db_select, указанные в этом посте, будут работать, они требуют больше накладных расходов, и их следует избегать, если вы не пытаетесь генерировать динамические запросы.Также см .: http://drupal.org/node/224333 для получения информации о том, как apis изменились между d6 и d7.Поиск db_fetch_object на этой странице дал бы эту информацию.

0 голосов
/ 25 сентября 2018

Лучше

function GetAllActiveUsers() {
  $query = new EntityFieldQuery();
  $query->entityCondition('entity_type', 'user')
        ->propertyCondition('status', 1);
  $results = $query->execute();
  $uids = array_keys($results['user']);
  return $uids;
}

Это вернет всех активных пользователей и использует код в функции, чтобы использовать его в качестве помощника

0 голосов
/ 08 февраля 2014

Упрощенный пример с fetchAll () :

 $users = db_select('users', 'u')
    ->fields('u', array('uid'))
    ->execute()
    ->fetchAll();

 foreach ($users as $user) {
    $full_user = user_load($user->uid);
    //do your stuff here 
 }
0 голосов
/ 29 августа 2013

Вы также можете попробовать это,

$query = db_select('users', 'u');
    $query->fields('u', array('uid, name'));
    $result = $query->execute();
    while($record = $result->fetchAssoc()) {
         $account = user_load($record['uid']);
         if($account->uid){
             print $account->name;
         }
    }
...