Belirli bir role atanan tüm kullanıcıların listesini almak istiyorum. Kendi SQL'imi yazabilirim ama api'yi mümkün olduğunca kullanmak isterim.Kullanıcıların listesini almak için Drupal api kullanmak mümkün mü?
cevap
(belirli kriterlere uyan varlıkları yukarı çekerek) genellikle görevin bu tür hiçbir Drupal API işlevleri vardır değildir. API'daki tek varlıklı CRUD işlevlerine odaklanma eğilimi gösterir; her şey bir geliştiricinin kendi SQL yeteneklerine kalmış.
Görünümler modülü, rol, izin vb. Tarafından filtrelenmiş kullanıcı listeleri oluşturmanıza olanak sağlar - ancak kolayca aşırıya kaçabilir.
Kullanıcıları rol ile toplamaya yardımcı olabilecek herhangi bir API hakkında bilmiyorum. Burada bir şey elde edebileceğiniz bağlantı var: http://drupal.org/node/82002. SO, müthiş bir hizmet olmasına rağmen Drupal ile ilgili sorular için irc.freenode.org adresinde drupal.org veya #drupal kanalı kullanmanızı öneririz.
Ps .: bazen SQL kötülüğün :)
Katılıyorum. Önceden tanımlanmış işlevleri kullanmak yerine veritabanını doğrudan sorgulayan bir sürü WordPress eklentisi görüyorum. –
Sadece bu StackOverflow eklemek eklemek yorum Drupal sorular için harika ve daha fazla insan burada onlara sormalısınız. – alxp
sql sorgularından kaçınılmalıdır, çünkü drupal7, SQL'i soyutlamak için yeni db api kullanacaktır (böylece mongodb gibi şeyler kullanabilirsiniz :) –
Kolay bir seçenek, SQL'i oluşturmak için Görünümler'i kullanmaktır (sizin için önizleme düğmesine bastığınızda görünümü altında görünür) ve daha sonra erişmek için gereken sonuçları almak için Drupal SQL abstraction layer'u kullanın. bir veri görüntülemek yerine ham veriler.
Biraz bu benzeyecektin:
$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
}
Sadece tam sorgu almak için görünümüne daha fazla alan ekleyin. benim için çalıştı
Görünümler SQL gereksiz yere karmaşık, deneyin 'SELECT uid, posta, adı 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;unutmayın bu Drupal 6 için ve ben büyük kullanıcı üsleri için bu performansı hakkında emin değilim. Drupal 7 hakkında emin değilim.
Performans iyi olurdu. Örneğiniz D7 kodunda: 'var_dump (db_query ('SELECT adı FROM {users} u INNER JOIN {users_roles} r AÇIK u.uid = r.uid WHERE r.rid = 4') -> fetchCol()); ' – pfrenssen
Kullanıcı dizisini almak için entity_load özelliğini kullanabilirsiniz. İşte yönetici kullanıcıların tüm e-postaların listesi oluşturur örnektir Drupal 7
<?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 tarafından kabul edilen cevap genellikle Drupal,' entity_load ('user') hakkında durum böyle görünmekle birlikte, aslında tüm site kullanıcılarını, uid tarafından indekslenen bir dizide, nesne olarak yükler. –
Bu, ancak son derece verimsiz ve binlerce kullanıcıya sahip sitelerde korkunç bir fikir olur. – chadpeppers
(bildirim göndermek için kullanılır), EntityFieldQuery doğru yoldur kullanın.
bunu nasıl yapacağınıza dair bir örnek verebilir misiniz? – akalata
Drupal 8'de aşağıdaki eserlerini kullanıcı varlıkların listesini döndürür
\Drupal::service('entity_type.manager')
->getStorage('user')
->loadByProperties(['roles' => 'administrator']);
(bu örnekte, administrator
role sahip tüm kullanıcılara yük).
uid
s listesini almak için:
Drupal 8'de
$query = \Drupal::service('entity_type.manager')->getStorage('user')->getQuery();
$query->condition('roles', 'administrator');
$query->execute();
:
$users = \Drupal\user\Entity\User::loadMultiple();
Ve mesela almak istiyorsanız sadece yöneticiler:
$admins = [];
foreach ($users as $user) {
if ($user->hasRole('administrator')) {
$admins[] = $user;
}
}
- 1. SVN: Verilen yol için revizyon numaralarının listesini almak mümkün mü?
- 2. jQuery'de bir öğeye bağlı olayların bir listesini almak mümkün mü?
- 3. Yansımaları kullanmak için getMethods mümkün mü?
- 4. Sınıflandırma için gensim doc2vec kullanmak mümkün mü
- 5. Mesajları Android emülatörüne almak mümkün mü?
- 6. AngularJS'de sertifika almak mümkün mü?
- 7. android traning kullanarak bağlı tüm kullanıcıların bir listesini almak android
- 8. farklı sonuçlar almak mümkün mü?
- 9. clojure.test'in çıktısını almak mümkün mü?
- 10. RSS arşivini almak mümkün mü
- 11. Cocos2d'de UIPickerView kullanmak mümkün mü?
- 12. API aracılığıyla tetiklenen Jenkins yapısının kimliğini almak mümkün mü?
- 13. Android'de Skype hesabımdan kişileri almak mümkün mü?
- 14. Hala Google OAuth kullanmadan artı kullanmak mümkün mü?
- 15. WHERE statüsü için LIKE ve IN kullanmak mümkün mü?
- 16. Otomatik tamamlama listesini kaydırmak mümkün mü?
- 17. Lumen'de (Laravel) Kiril sembolleri kullanmak mümkün mü?
- 18. "ID" olmadan Sharepoint Listesini Güncelleştirmek mümkün mü?
- 19. API şehir adını yazmak ve olası şehirlerin bir listesini almak için API?
- 20. Ekran görüntüleri için başsız modda CEF python kullanmak mümkün mü?
- 21. Bir özelliği varsayılan değerine döndürmek için ayarlayıcı kullanmak mümkün mü?
- 22. Bir Facebook Uygulamasında Paralaks kullanmak mümkün mü?
- 23. Vim'de komutları sıraya almak mümkün mü?
- 24. DISPLAY olmadan pyplot kullanmak mümkün mü?
- 25. Bir WDFREQUEST oluşturan CPU'yu almak mümkün mü?
- 26. JSXTransformer.js ile Harmony (ES6) kullanmak mümkün mü?
- 27. Gömülü modda OCaml kullanmak mümkün mü?
- 28. HTTPListener ile HTTP2 kullanmak mümkün mü
- 29. Haskell Tür Tip Oluşturucu almak mümkün mü?
- 30. SonarQube'de OpenCover/sonucu almak mümkün mü?
Kendi yanıtımı yapardım ama bunun üzerinde genişlemem gerektiğini hissediyorum. Kullanıcıları listelemenize ve Drupal (en azından çekirdek) içindeki role göre filtreleme yapmanıza olanak tanıyan bir işlev yoktur. Kendi fonksiyonunuzu yazabilir veya söylenen eaton gibi, kullanıcı listesini oluşturmak için görünümleri kullanabilirsiniz. – codeincarnate
Burada bir görünüm kolaydır. –
size __really__ görünümlerini kullanmalısınız. aradığınız çözüm budur. – alexanderpas