Me gustaría obtener una lista de todos los usuarios a los que se les ha asignado un determinado rol. Podría escribir mi propio SQL, pero me gustaría utilizar la API tanto como sea posible.¿Es posible usar la API de Drupal para obtener una lista de usuarios?
Respuesta
general, no hay funciones de la API de Drupal para este tipo de tarea (tirando hacia arriba de las entidades que responden a ciertos criterios). Tiende a centrarse en funciones CRUD de una sola entidad en la API; todo lo demás depende de las habilidades de SQL del desarrollador.
El módulo Vistas le permite crear listas de usuarios filtradas por rol, permiso, etc., pero podría ser exagerado.
No conozco ninguna API que pueda ayudar a recopilar usuarios por rol. Aquí tienes un enlace para obtener algo: http://drupal.org/node/82002. Aunque SO es un servicio increíble, sugiero usar drupal.org o el canal #drupal en irc.freenode.org para preguntas relacionadas con Drupal.
Obs .: veces SQL no es que el mal :)
Estoy de acuerdo. Veo muchos plugins de Wordpress que consultan directamente la base de datos en lugar de usar funciones predefinidas. –
Solo comentando para agregar que StackOverflow es excelente para las preguntas de Drupal y más personas deberían preguntar aquí. – alxp
consultas sql deben evitarse, ya que drupal7 usará nueva API api para resumir SQL (para que pueda usar cosas como mongodb :) –
Una opción fácil es usar Views para generar el SQL (aparece debajo de la vista cuando presiona el botón de vista previa) para usted y luego usar el Drupal SQL abstraction layer para obtener los resultados que necesita si necesita acceder al datos en bruto en lugar de mostrar una Vista.
Se vería un poco como esto:
$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
}
simplemente añada más campos a la vista para obtener la consulta completa.
El SQL de vistas es innecesariamente complejo, pruebe 'SELECCIONE el uid, correo, nombre FROM {users}' – Adaddinsane
El SQL que funcionó para mí:
$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;
Tenga en cuenta que esto es para Drupal 6 y no estoy seguro sobre el rendimiento de esta para grandes bases de usuarios. No estoy seguro acerca de Drupal 7.
El rendimiento estaría bien. Su ejemplo en el código D7: 'var_dump (db_query ('SELECT nombre FROM {usuarios} u INNER JOIN {usuarios_rolas} r ON u.uid = r.uid WHERE r.rid = 4') -> fetchCol()); ' – pfrenssen
Puede usar entity_load para obtener una matriz de usuarios. Aquí está la muestra que va a crear la lista de todos los mensajes de correo electrónico para los usuarios administradores (utilizado para enviar una notificación)
<?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;
}
}
}
?>
Si bien la respuesta aceptada por Eaton generalmente parece ser el caso de Drupal,' entity_load ('user') 'en realidad carga a todos los usuarios del sitio como objetos, en una matriz indexada por uid. –
Esto funciona pero es extremadamente ineficiente y sería una idea terrible en sitios que tienen miles de usuarios. – chadpeppers
En Drupal 7, utilice EntityFieldQuery es la forma correcta.
podría dar un ejemplo de cómo hacerlo? – akalata
En Drupal 8 las siguientes obras (en este ejemplo, cargar todos los usuarios con el rol administrator
)
\Drupal::service('entity_type.manager')
->getStorage('user')
->loadByProperties(['roles' => 'administrator']);
devolverá una lista de las entidades usuarias.
Para obtener una lista de uid
s en cambio, una consulta de campo de entidad:
$query = \Drupal::service('entity_type.manager')->getStorage('user')->getQuery();
$query->condition('roles', 'administrator');
$query->execute();
En Drupal 8:
$users = \Drupal\user\Entity\User::loadMultiple();
Y si usted desea conseguir, por ejemplo, solo administradores:
$admins = [];
foreach ($users as $user) {
if ($user->hasRole('administrator')) {
$admins[] = $user;
}
}
- 1. ¿Es posible usar la API Disqus para obtener comentarios de una URL específica?
- 2. Drupal: cómo obtener la lista de módulos
- 3. Obtener lista de usuarios LDAP usando PLSQL
- 4. es posible obtener la lista de espacios de nombres definidos
- 5. Cómo usar Twisted para obtener la lista de usuarios de un canal IRC
- 6. Es una vista drupal útil para este caso de uso
- 7. API para escribir el nombre de la ciudad y obtener una lista de posibles ciudades?
- 8. ¿Es posible obtener una lista de palabras clave en Python?
- 9. SVN: ¿Es posible obtener la lista de números de revisión para una ruta determinada?
- 10. ¿Es posible usar array_shift() en PHP y obtener la clave?
- 11. Cómo obtener una lista de todos los usuarios en SharePoint
- 12. ¿Cómo puedo obtener una lista de usuarios del directorio activo?
- 13. SharePoint: obtenga una lista de usuarios actuales
- 14. ¿Debo usar Drupal 6 o Drupal 7?
- 15. ¿Es posible crear una lista expandible AlertDialog?
- 16. Lista de usuarios de PostgreSQL
- 17. ¿Cuál es la función de la API de Win32 para usar para eliminar una carpeta?
- 18. Drupal 7: Mejor práctica para una lista de selección dinámica en Drupal 7
- 19. drupal check api checkboxes
- 20. Usar la reflexión para obtener valores de propiedades de una lista de una clase
- 21. ¿La API de Google Calendar es adecuada para mi problema?
- 22. C/C++ ¿Es posible obtener una "lista" de miembros de instancia al consultar una clase?
- 23. ¿Cuál es la API de SWT más funcional y lista para usar en Scala?
- 24. ¿Es posible usar LIKE e IN para una sentencia WHERE?
- 25. ¿Cómo puedo usar la API de Appstore para obtener la lista de top100? ¿Cuál es la arquitectura común para construir un sitio web de aplicaciones de appstore?
- 26. ¿Es posible actualizar elementos dentro de una lista (de estructura)?
- 27. ¿Es posible obtener una lista de archivos agregados o eliminados de Subversion?
- 28. Lista de usuarios "reales" de Windows que utilizan la API de Win32
- 29. Drupal - Cómo obtener la SUMA de filas
- 30. ¿Cómo obtener la URL completa de una página de Drupal?
Haría mi propia respuesta, pero creo que debería ampliar esto. No hay función que le permita hacer una lista de usuarios y filtrar por función dentro de Drupal (núcleo como mínimo). Puedes escribir tu propia función o, como dijo eaton, usar las vistas para crear una lista de usuarios. – codeincarnate
A las vistas es fácil aquí. –
usted __really__ debería usar vistas. es la solución que estás buscando. – alexanderpas