2009-07-25 14 views
6

मैं उन सभी उपयोगकर्ताओं की एक सूची प्राप्त करना चाहता हूं जिन्हें एक निश्चित भूमिका नियुक्त की गई है। मैं अपना स्वयं का एसक्यूएल लिख सकता था लेकिन मैं जितना संभव हो एपीआई का उपयोग करना चाहता हूं।क्या उपयोगकर्ताओं की सूची प्राप्त करने के लिए ड्रूपल एपीआई का उपयोग करना संभव है?

उत्तर

5

वहाँ आम तौर पर काम की इस तरह के लिए कोई Drupal एपीआई कार्य (संस्थाओं है कि कुछ शर्तों को पूरा खींच रहा) कर रहे हैं नहीं है। यह एपीआई में एकल-इकाई सीआरयूडी कार्यों पर ध्यान केंद्रित करता है; बाकी सब कुछ डेवलपर के अपने एसक्यूएल कौशल पर निर्भर है।

दृश्य मॉड्यूल आपको भूमिका, अनुमति इत्यादि द्वारा फ़िल्टर किए गए उपयोगकर्ताओं की सूचियां बनाने की अनुमति देता है - लेकिन यह आसानी से अधिक हो सकता है।

+0

मैं अपना जवाब दूंगा लेकिन मुझे लगता है कि मुझे बस इस पर विस्तार करना चाहिए। ऐसा कोई फ़ंक्शन नहीं है जो आपको उपयोगकर्ताओं को सूचीबद्ध करने और ड्रूपल (कम से कम कोर) के भीतर भूमिका से फ़िल्टर करने की अनुमति देता है। आप अपना खुद का फ़ंक्शन लिख सकते हैं या जैसे खाने वाले ने कहा, उपयोगकर्ताओं की सूची बनाने के लिए विचारों का उपयोग करें। – codeincarnate

+0

यहां एक विचार आसान है। –

+0

आप __really__ को विचारों का उपयोग करना चाहिए। यह वह समाधान है जिसे आप ढूंढ रहे हैं। – alexanderpas

0

मुझे नहीं पता कि किसी भी एपीआई उपयोगकर्ताओं द्वारा भूमिका निभाने में मदद कर सकता है। यहां आप कुछ लिंक हैं जो आप कुछ प्राप्त कर सकते हैं: http://drupal.org/node/82002। हालांकि एसओ एक भयानक सेवा है, लेकिन मैं ड्रूपल संबंधित प्रश्नों के लिए irc.freenode.org पर drupal.org या #drupal चैनल का उपयोग करने का सुझाव देता हूं।

पी.एस. .: कभी कभी एसक्यूएल कि बुराई :)

+0

मैं सहमत हूं। मैं बहुत सारे वर्डप्रेस प्लगइन्स देखता हूं जो पूर्वनिर्धारित कार्यों का उपयोग करने के बजाय डेटाबेस से सीधे पूछताछ करते हैं। –

+4

बस यह जोड़ने के लिए टिप्पणी करते हुए कि स्टैक ओवरफ्लो ड्रूपल प्रश्नों के लिए बहुत अच्छा है और अधिक लोगों को यहां उनसे पूछना चाहिए। – alxp

+0

एसक्यूएल प्रश्नों से बचा जाना चाहिए, क्योंकि ड्रूपल 7 अमूर्त एसक्यूएल के लिए नए डीबी एपीआई का उपयोग करेगा (इसलिए आप मोंगोडब जैसी चीजों का उपयोग कर सकते हैं :) –

1

एक आसान विकल्प एसक्यूएल उत्पन्न करने के लिए दृश्यों का उपयोग करना है (जब आप पूर्वावलोकन बटन दबाते हैं तो इसे स्वयं देखें) और फिर Drupal SQL abstraction layer का उपयोग करें ताकि आपको आवश्यक परिणाम प्राप्त करने के लिए 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 
    } 

बस पूरा क्वेरी प्राप्त करने के लिए देखने के लिए और अधिक क्षेत्रों को जोड़ने।

+1

दृश्य एसक्यूएल अनावश्यक रूप से जटिल है, 'यूआईडी, मेल, नाम {उपयोगकर्ता}' से नाम – Adaddinsane

2

एसक्यूएल कि मेरे लिए काम किया:

 
$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.

+1

प्रदर्शन ठीक होगा। डी 7 कोड में आपका उदाहरण: 'var_dump (db_query ('उपयोगकर्ता से चुनें {उपयोगकर्ता} में प्रवेश करें {user_roles} r. uid = r.uid जहां r.rid = 4') -> fetchCol()); ' – pfrenssen

9

के बारे में निश्चित नहीं है आप उपयोगकर्ताओं की सरणी प्राप्त करने के लिए entity_load का उपयोग कर सकते हैं। यहाँ नमूना है कि व्यवस्थापक उपयोगकर्ताओं के लिए सभी ईमेल की सूची बनाएगा है ड्रुपल 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; 
    } 
    } 
} 
?> 
+2

जबकि ईटन द्वारा स्वीकृत उत्तर आम तौर पर ड्रूपल के मामले में होता है,' entity_load ('user') वास्तव में यूआईडी द्वारा अनुक्रमित एक सरणी में ऑब्जेक्ट्स के रूप में सभी साइट उपयोगकर्ताओं को लोड करता है। –

+0

यह काम करता है लेकिन बेहद अक्षम है और उन साइटों पर एक भयानक विचार होगा जिनमें हजारों उपयोगकर्ता हैं। – chadpeppers

0

(सूचना भेजने के लिए प्रयोग किया जाता है), का उपयोग EntityFieldQuery उचित तरीका है।

+1

क्या आप ऐसा करने के लिए एक उदाहरण प्रदान कर सकते हैं? – akalata

0

Drupal 8 में निम्नलिखित काम करता है

\Drupal::service('entity_type.manager') 
    ->getStorage('user') 
    ->loadByProperties(['roles' => 'administrator']); 

(इस उदाहरण में, administrator भूमिका के साथ सभी उपयोगकर्ताओं को लोड) उपयोगकर्ता संस्थाओं की एक सूची प्रदान करेगा।

uid रों की एक सूची के बजाय एक इकाई क्षेत्र क्वेरी पाने के लिए,:

$query = \Drupal::service('entity_type.manager')->getStorage('user')->getQuery(); 
$query->condition('roles', 'administrator'); 
$query->execute(); 
0

Drupal 8 में:

$users = \Drupal\user\Entity\User::loadMultiple(); 

और अगर आप जैसे प्राप्त करना चाहते हैं केवल व्यवस्थापक:

$admins = []; 
foreach ($users as $user) { 
    if ($user->hasRole('administrator')) { 
    $admins[] = $user; 
    } 
} 
संबंधित मुद्दे

 संबंधित मुद्दे