Всем привет!
Что есть:
Модуль который программно регает юзера из заполненной entityform (Аля WebForm ток покруче)
Юзер регается так (и всё нормально проходит):
<?php
$new_user = array(
'name' => $name,
'mail' => $email,
'pass' => $pass,
'status' => 1,
'init' => $email,
'roles' => array(
DRUPAL_AUTHENTICATED_RID => 'authenticated user',
4 => '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 в данном направлении.
Комментарии
Так профиль нового юзера, которого ты создал программно находится в переменной $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).
$profile = profile2_load_by_user($account->uid, 'fiz_lico');
profile2_save($profile);
Такая схема загрузки и сохранения. А между ними делай что-нибудь в $profile, но в соответствии с его возможностями.
В том то и дело, что доков я не нашел даже на английском. Какие там массивы, как обращаться к полям profile2 и т.д.
$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.
Вот решение:
Данная функция: $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);?>