[РЕШЕНО] Программная привязка profile2 к пользователю

Главные вкладки

Аватар пользователя whiesam whiesam 8 марта 2014 в 1:15

Всем привет!

Что есть:
Модуль который программно регает юзера из заполненной entityform (Аля WebForm ток покруче)
Юзер регается так (и всё нормально проходит):

<?php
$new_user 
= array(
      
'name' => $name,
      
'mail' => $email,
      
'pass' => $pass,
      
'status' => 1,
      
'init' => $email,
      
'roles' => array(
        
DRUPAL_AUTHENTICATED_RID => 'authenticated user',
        
=> 'client',
      ),
    );
    
$account user_save(''$new_user);
    
$account->password $pass;
?>

Что нужно:
Нужно как-то узнать uid вновь испеченного пользователя и добавить ему profile2 с именем 'fiz_lico'
Так же в форме есть поля: $form_state['values']['fio'] и $form_state['values']['tel'] ими надо заполнить соответствующие поля в это Profile2.
Я делаю так (Но ясен фиг что не работает):

<?php
$profile 
profile2_load_by_user($user->uid'fiz_lico'); // Походу не срабатывает $user->uid
// Тут надо как то заполнить поля
        
profile2_save($profile);
?>

Прошу помощи, так как документации вообще мало по profile2 в данном направлении.

Комментарии

Аватар пользователя Niklan Niklan 8 марта 2014 в 12:29

Так профиль нового юзера, которого ты создал программно находится в переменной $account, оттуда и бери id.
$profile = profile2_load_by_user($account->uid, 'fiz_lico');

Аватар пользователя whiesam whiesam 8 марта 2014 в 12:53

"Niklan" wrote:
Так профиль нового юзера, которого ты создал программно находится в переменной $account, оттуда и бери id.
$profile = profile2_load_by_user($account->uid, 'fiz_lico');

Я это тоже заметил, но лучше от этого не стало.

Вот такая гадость:
Recoverable fatal error: Argument 1 passed to profile2_save() must be an instance of Profile, boolean given, called in ***/public_html/sites/all/modules/user_create/user_create.module on line 105 and defined в функции profile2_save() (строка 292 в файле ***/public_html/sites/all/modules/profile2/profile2.module).

Аватар пользователя Niklan Niklan 8 марта 2014 в 13:04

$profile = profile2_load_by_user($account->uid, 'fiz_lico');
profile2_save($profile);

Такая схема загрузки и сохранения. А между ними делай что-нибудь в $profile, но в соответствии с его возможностями.

Аватар пользователя whiesam whiesam 8 марта 2014 в 13:34

"Niklan" wrote:
Такая схема загрузки и сохранения. А между ними делай что-нибудь в $profile, но в соответствии с его возможностями.

В том то и дело, что доков я не нашел даже на английском. Какие там массивы, как обращаться к полям profile2 и т.д.

Аватар пользователя Niklan Niklan 8 марта 2014 в 13:50

$profile = profile2_load_by_user($account->uid, 'fiz_lico');
dpm($profile) и смотришь что да как там лежит.

Тоже самое сделай еще с профилем у которого все заполнено и смотри как заполняются данные и по аналогии вноси свои
Допустим, заполни админу профиль и какому-нибудь юзеру оставь пустой.
dpm(profile2_load_by_user(1, 'fiz_lico')); // id admin
dpm(profile2_load_by_user(2, 'fiz_lico')); // id юзера с пустым профилем

Аватар пользователя whiesam whiesam 8 марта 2014 в 17:08

"Niklan" wrote:
$profile = profile2_load_by_user($account->uid, 'fiz_lico');
dpm($profile) и смотришь что да как там лежит.
Тоже самое сделай еще с профилем у которого все заполнено и смотри как заполняются данные и по аналогии вноси свои
Допустим, заполни админу профиль и какому-нибудь юзеру оставь пустой.
dpm(profile2_load_by_user(1, 'fiz_lico')); // id admin
dpm(profile2_load_by_user(2, 'fiz_lico')); // id юзера с пустым профилем

Ты опередил) До меня только дошло, что можно глянуть массив уже заполненного профиля. Только я с какого-то перепугу искал в array $user.

Аватар пользователя whiesam whiesam 8 марта 2014 в 21:57

Вот решение:
Данная функция: $profile = profile2_load_by_user($account->uid, 'fiz_lico'); - только загружает в переменную $profile уже созданный профиль. А там его нет! Он же ещё не создан.
Ниже приведен код присоединение profile2 к юзеру и наполнение значениями заранее созданных полей.

<?php
// Создаём*прикрепляем профиль2 нужного типа к юзеру (Сам profile2 уже должен быть создан и заполнен полями). Переменная 'account' это не uid а весь массив.
// Почему разрабы не назвали фун-цию profile2 у самого до сих пор вопросы, поэтому я так долго и искал решение в инете.
$profile profile_create(array('user' => $account'type' => 'fiz_lico'));

// Заполняем поля профайла. 2 варианта: из формы и руками, для наглядности, мб кому пригодится.
$profile -> field_fio['und'][0]['value'] = $form_state['values']['field_fio']['und'][0]['value'];
$profile -> field_mobile_tel['und'][0]['value'] = '89996665588';
// Если сайт мультиязычный. LANGUAGE_NONE - заменить.
// $profile->fullname[LANGUAGE_NONE][0]['value'] = 'John Wayne';

// Собственно сохраняем profile2.

profile2_save($profile);
?>