Tüm kullanıcıların bir listesini ve bir dizi içine alın


17

Nasıl tüm kullanıcı almak ve bir dizi içine tüm UID koymak merak ediyordum? Benzer sorular gördüm ama hiçbiri sorumu gerçekten cevaplamıyor.

Yanıtlar:


18

Drupal 7'de entity_load komutunu kullanarak tüm kullanıcıları aşağıdaki gibi getirebilirsiniz,

$users = entity_load('user');

ve array_keys ($ users) size uid dizisini verir


9

Drupal 8'de sonucu aşağıdaki yollarla elde edebilirsiniz:

$query = \Drupal::entityQuery('user');

$uids = $query->execute();

1

Veritabanındaki mevcut tüm kullanıcıların HTML ve EMAIL'ini almak için yakın zamanda oluşturduğum bir parçacığı paylaşıyorum.

2000+ kullanıcıya kadar iyi çalışır. Bundan sonra toplu iş veya alternatif bir doğrudan veritabanı sorgusu uygulanmasını öneririz.

Bu, her kullanıcının Drupal yüklemesine dayanır.

$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'>;

Kolayca excels vb kopyalayabilirsiniz basit bir html tablo dönecektir.

Bunları bir diziye almak için UIDS kodunda belirtilen değişkeni kullanın.


0

Bazı yorumları yanıtlamak için: Çok sayıda kullanıcıyla çalışıyorsanız, bir dizideki tüm kullanıcıları zaman aşımı olmadan yükleyemezsiniz, bu nedenle muhtemelen bunları toplu olarak işlemeniz gerekir ...

İşte nasıl (evet:

 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');
  }
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.