Jawaban:
Di Drupal 7 Anda dapat mengambil semua pengguna menggunakan entitas_load seperti berikut,
$users = entity_load('user');
dan array_keys ($ users) akan memberi Anda array uid's
Hanya berbagi cuplikan yang saya buat baru-baru ini untuk mendapatkan HTML dan EMAIL dari semua pengguna yang ada di database.
Berfungsi dengan baik hingga 2000+ pengguna. Setelah itu saya sarankan menerapkan batching atau query database langsung alternatif.
Ini bergantung pada Drupal memuat setiap pengguna.
$query = new EntityFieldQuery();
$query->entityCondition('entity_type', 'user');
$html = '<table>';
$result = $query->execute();
$uids = array_keys($result['user']);
// THIS IS YOUR ARRAY OF UIDS.
$users = user_load_multiple($uids);
// EXTRA CODE.
foreach($users as $user){
$mail = $user->mail;
$name = $user->name;
$html .= '<tr><td>'.$mail.'</td>'.'<td>'.$name.'</td></tr>';
}
$html .= '</table'>;
Akan mengembalikan tabel html sederhana yang dapat Anda salin menjadi excel dengan mudah, dll.
Untuk mendapatkannya dalam sebuah array cukup gunakan variabel yang dinyatakan dalam kode untuk UIDS.
Untuk menjawab beberapa komentar: Jika Anda bekerja dengan sejumlah besar pengguna, Anda tidak akan dapat memuat semua pengguna dalam array tanpa batas waktu sehingga Anda mungkin perlu untuk mengolahnya ...
Begini caranya (ya itu:
function _set_batch_revench_agains_users(){
$batch = [
'operations' => [
['_revench_against_users_batch_process']
],
'finished' => '_revench_against_users_batch_finished',
'title' => t('Punishing users for ungratefulness and general insolence.'),
'init_message' => t('Batch is starting, he he he...'),
'progress_message' => t('Processed @current out of @total.'),
'error_message' => t('Batch has encountered an error, nooooo!'),
'file' => drupal_get_path('module', 'revench_agains_users') . '/user_agains_users.module'
];
batch_set($batch);
batch_process('admin');
}
/**
* Batch 'Processing' callback
*/
function _revench_against_users_batch_process(&$context){
//all this $context stuff is mandatory, it is a bit heavy, but the batchAPI need it to keep track of progresses
if (!isset($context['sandbox']['current'])) {
$context['sandbox']['count'] = 0;
$context['sandbox']['current'] = 0;
}
//don't use entity field query for such simple use cases as gettings all ids (much better performances, less code to write...)
$query = db_select('users', 'u');
$query->addField('u', 'uid');
$query->condition('u.uid', $context['sandbox']['current'], '>');
$query->orderBy('u.uid');
// Get the total amount of items to process.
if (!isset($context['sandbox']['total'])) {
$context['sandbox']['total'] = $query->countQuery()->execute()->fetchField();
// If there are no users to "update", stop immediately.
if (!$context['sandbox']['total']) {
$context['finished'] = 1;
return;
}
}
$query->range(0, 25);
$uids = $query->execute()->fetchCol();
//finaly ! here is your user array, limited to a manageable chunk of 25 users
$users_array = user_load_multiple($uids);
//send it to some function to "process"...
_burn_users_burnburnburn($users_array); // I won't reveal the content of this function for legal reasons
//more mandatory context stuff
$context['sandbox']['count'] += count($uids);
$context['sandbox']['current'] = max($uids);
$context['message'] = t('burned @uid ... feels better ...', array('@uid' => end($uids)));
if ($context['sandbox']['count'] != $context['sandbox']['total']) {
$context['finished'] = $context['sandbox']['count'] / $context['sandbox']['total'];
}
}
/**
* Batch 'finished' callback
*/
function _revench_against_users_batch_finished($success, $results, $operations) {
if ($success) {
// Here we do something meaningful with the results.
$message = t('@count users successfully burned:', array('@count' => count($results)));
drupal_set_message($message);
}
else {
// An error occurred.
// $operations contains the operations that remained unprocessed.
$error_operation = reset($operations);
$message = t('An error occurred while processing %error_operation with arguments: @arguments some users might have escaped !', array('%error_operation' => $error_operation[0], '@arguments' => print_r($error_operation[1], TRUE)));
drupal_set_message($message, 'error');
}
}