Я хотел бы получить список всех пользователей, которым была назначена определенная роль. Я мог бы написать свой собственный SQL, но я хотел бы использовать api как можно больше.Можно ли использовать Drupal api для получения списка пользователей?
ответ
Там вообще никаких функций API Drupal для такого рода задачи (подтягивание объектов, которые соответствуют определенным критериям). Он имеет тенденцию сосредотачиваться на функциях CRUD одного объекта в API; все остальное зависит от собственных навыков разработчика SQL.
Модуль Views позволяет вам создавать списки пользователей, отфильтрованных по ролям, разрешениям и т. Д., Но это легко может быть переполнено.
Я не знаю, какой API может помочь собрать пользователей по ролям. Вот вам ссылка, которую вы можете получить: http://drupal.org/node/82002. Хотя SO - потрясающий сервис, я предлагаю использовать drupal.org или #drupal channel на irc.freenode.org для вопросов, связанных с Drupal.
Ps .: иногда SQL не то, что зло :)
Я согласен. Я вижу много плагинов Wordpress, которые напрямую запрашивают базу данных вместо использования предопределенных функций. –
Просто комментируя, чтобы добавить, что StackOverflow отлично подходит для вопросов Drupal, и больше людей спрашивают их здесь. – alxp
sql-запросов следует избегать, так как drupal7 будет использовать новый db api для абстрагирования SQL (так что вы можете использовать такие вещи, как mongodb :) –
Одним из простых вариантов является использование представлений для создания SQL (отображается под представлением его «я», когда вы нажимаете кнопку предварительного просмотра) для вас, а затем используйте Drupal SQL abstraction layer, чтобы получить нужные результаты, если вам нужно получить доступ к а не отображать представление.
Было бы выглядеть немного так:
$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
}
Просто добавьте несколько полей в целях получения полного запроса.
Представления SQL излишне сложны, попробуйте 'SELECT uid, mail, name FROM {users}' – Adaddinsane
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.
Производительность будет прекрасной. Ваш пример в коде D7: 'var_dump (db_query ('SELECT name FROM {users} u INNER JOIN {users_roles} r ON u.uid = r.uid WHERE r.rid = 4') -> fetchCol()); ' – pfrenssen
Вы можете использовать entity_load для получения массива пользователей. Вот пример, который будет создавать список всех сообщений электронной почты для пользователей администратора (используется для отправки уведомлений)
<?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;
}
}
}
?>
Хотя принятый ответ Eaton, как правило, имеет место в отношении Drupal,' entity_load ('user') 'фактически загружает всех пользователей сайта в виде объектов в массиве, индексированном uid. –
Это работает, но крайне неэффективно и будет ужасной идеей на сайтах с тысячами пользователей. – chadpeppers
В Drupal 7, использовать EntityFieldQuery правильный способ.
Можете ли вы привести пример о том, как это сделать? – akalata
В 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();
В Drupal 8:
$users = \Drupal\user\Entity\User::loadMultiple();
И если вы хотите получить, например, только администраторы:
$admins = [];
foreach ($users as $user) {
if ($user->hasRole('administrator')) {
$admins[] = $user;
}
}
- 1. Использование Vix API для получения домена VM и списка пользователей
- 2. Jira Rest Api для получения полного списка пользователей
- 3. Facebook graph api для получения списка пользователей facebook fan
- 4. Можно ли использовать API NDepend для получения списка сборок и связанных с ними проектов?
- 5. Как использовать API Github для получения всех пользователей репозитория?
- 6. Как использовать facebook api для получения другого фида пользователей
- 7. Redmine REST API для получения всех пользователей
- 8. Скрипт для получения списка зарегистрированных пользователей
- 9. ldapsearch фильтр для получения списка имен пользователей
- 10. API Youtube для извлечения списка пользователей
- 11. Twitter Stream API для получения твитов пользователей
- 12. Использование API JIRA Rest API для получения списка всех пользователей на плате вместо проекта?
- 13. Можно ли использовать libSegFault.so для получения обратных путей для SIGABRT?
- 14. Можно ли использовать $ _SESSION ['variables'] в Drupal 8?
- 15. Можно ли использовать MFA для AWS для всех пользователей?
- 16. Можно ли использовать jQuery.validVal для проверки списка выпадающего списка?
- 17. Веб-API для получения списка всех религий
- 18. youtube api для получения списка монетизированных vidoes
- 19. JQuery Tab: Можно ли использовать Html.ActionLink для получения данных сервера?
- 20. PHP: можно ли использовать php для получения MAC-адреса?
- 21. Можно ли использовать указатель-член для получения фактического указателя?
- 22. Можно ли использовать регулярное выражение для получения подстроки?
- 23. Можно ли использовать шаблон haskell для получения имени текущего файла?
- 24. Можно ли использовать Джексон для получения значения от Pojo
- 25. Можно ли использовать wget для получения всех файлов на сервере?
- 26. Можно ли использовать keytab для группы пользователей в AD
- 27. Можно ли использовать пользователей Windows для входа в базу данных?
- 28. Можно ли использовать очереди сообщений POSIX для пользователей в Linux?
- 29. Пакетный скрипт для получения списка всех пользователей локальной машины
- 30. Можно ли использовать Drive SDK для программных пользователей @mention других пользователей в комментариях к документу?
Я бы сделал свой собственный ответ, но я чувствую, что должен просто расширять это. Нет функции, которая позволяет вам перечислять пользователей и фильтровать по ролям в Drupal (по крайней мере, ядро). Вы можете написать свою собственную функцию или, например, сказать «съеденный», использовать представления для создания списка пользователей. – codeincarnate
Здесь легко. –
вы __really__ должны использовать представления. это решение, которое вы ищете. – alexanderpas