2012-06-28 30 views
5

मैं कुछ के लिए एक समाधान या सही उदाहरण है कि काफी आसान होना चाहिए नहीं मिल रहा है आवंटित: एक उपयोगकर्ता जब यह पैदा करने के लिए एक भूमिका देते हैं, यह मैं क्या कोशिश कर रहा हूँ है:Drupal: user_save में भूमिका

$edit = array(
     'name' => $_POST['name'], 
     'pass' => $password, 
     'mail' => $_POST['email'], 
     'status' => 0, 
     'language' => 'es', 
     'init' => $_POST['email'], 
     array(2 =>'authenticated', 4=>'my custom role') //as id and named in role db table 
    ); 

user_save(NULL, $edit); 

उपयोगकर्ता नहीं बनाया जा रहा है, मैं यह कैसे कर सकता हूं?

आप

उत्तर

12

आप इस तरह के रूप में roles सदस्य नामित नहीं किया है धन्यवाद। अपने संशोधित संस्करण का प्रयास करें:

$edit = array(
    'name' => $_POST['name'], 
    'pass' => $password, 
    'mail' => $_POST['email'], 
    'status' => 0, 
    'language' => 'es', 
    'init' => $_POST['email'], 
    'roles' => array(
    2 => 'authenticated', 
    4 => 'my custom role', 
), 
); 

user_save(NULL, $edit); 
+0

:-) मुझे मूर्खतापूर्ण !!! –

5

और आप ऐसा करने के लिए ऑब्जेक्ट्स का उपयोग कर सकते हैं।

this tip को
<?php 
function MYMODULE_user_insert(&$edit, $account, $category){ 
    if (array_key_exists('profile_1', $account)) { 
    $is_university = FALSE; 
    if ($account->profile_sport_club['field_club']['und'][0]['value'] == 1) { 
     $is_university = TRUE; 
    } 
    if ($is_university) { 
     $uid = $account->uid; 
     $role_name = 'uni_club'; 
     if ($role = user_role_load_by_name($role_name)) { 
     user_multiple_role_edit(array($uid), 'add_role', $role->rid); 
     } 
    } 
    } 
} 
?> 

धन्यवाद, यह अब बहुत सरल है:

// Check if user's email is unique 
if (!user_load_by_mail($_POST['email'])) { 
    $account = new stdClass; 
    $account->name = $_POST['name']; 
    $account->pass = user_hash_password($password); 
    $account->mail = $_POST['email']; 
    $account->status = FALSE; 
    $account->language = 'es'; 
    $account->init = $_POST['email']; 
    $account->roles = array(
    DRUPAL_AUTHENTICATED_RID => TRUE, 
    'Your custom role' => TRUE, 
); 
    user_save($account); 
} 
0

यहाँ एक हुक मैं एक उपयोगकर्ता को भूमिका को जोड़ने के लिए जब एक नया उपयोगकर्ता डाला जाता है लिखा है है।

0
function first_user_insert(&$edit, $account, $category, $node){ 
    $uid = $account->uid; 
    $role_name = 'role name'; 
    if ($role = user_role_load_by_name($role_name)) { 
    user_multiple_role_edit(array($uid), 'add_role', $role->rid); 
    } 
} 
+0

यह कोड –

+1

संशोधित कर रहा है, जबकि यह कोड प्रश्न का उत्तर देने में मदद कर सकता है, अगर टिप्पणी को जोड़ा गया तो यह बताएगा कि कोड क्या करता है और प्रश्न में कोड के साथ इसे कैसे एकीकृत किया जाना चाहिए। इससे भविष्य में दूसरों की मदद मिलेगी जो इस प्रश्न और उत्तर में आते हैं। –