Как я могу загрузить объект пользователя по адресу электронной почты в Drupal 7? - PullRequest
2 голосов
/ 03 сентября 2011

Яростно искал в Google и Drupal документы что-то, эквивалентное функция user_load для D6, как используется здесь .

Функция user_load в D7 принимает UID, а версия D6 достаточно гибкая, чтобы разрешать адреса электронной почты.

Любые подсказки, как я могу достичь того же конца в D7?

Спасибо

Ответы [ 3 ]

4 голосов
/ 05 сентября 2011

... или вы можете просто использовать user_load_by_mail: http://api.drupal.org/api/drupal/modules--user--user.module/function/user_load_by_mail/7

1 голос
/ 10 апреля 2012

Только для фона, user_load_from_mail () код опирается на параметр $ condition, переданный в user_load_multiple () , который устарел в 8.

Вот мой пример кода, который, вероятно, будет в будущем в user_load_from_mail ().

<?php
function load_user_by_email( $email )
{
    $query = new EntityFieldQuery();                                   
    $query->entityCondition('entity_type', 'user')                     
          ->propertyCondition('mail', $email);                         

    $result = $query->execute();                                       

    // not found?                                                      
    if (!isset($result['user'])) return;                               

    // found, keys are uids                                            
    $uids = array_keys($result['user']);                               
    $account = user_load($uids[0]);                                    
    return $account; 
}

Nb. Теоретически нет необходимости проверять возвращаемые значения 2+, поскольку drupal настаивает на том, что электронные письма уникальны.

1 голос
/ 03 сентября 2011

Получил ответ на форумах Drupal. Обычно включает в себя загрузку идентификатора пользователя, связанного с электронной почтой, непосредственно из базы данных, а затем запуск user_load в случае успеха ...

function my_module_load_user_by_mail($mail){
 $query = db_select('user', 'u');
 $uid = $query->fields('u', array('uid'))->condition('u.uid', $mail)->execute()->fetchField();
  if($uid){
    return user_load($uid);
  }else{
    return FALSE;
  }
}

Вместо этого вызывается функция модуля и передается электронная почта ...

$user = my_module_load_by_mail($mail);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...