Drupal 7 загружает профиль 2 программно - PullRequest
2 голосов
/ 03 марта 2012

У меня определены два профиля profile2 - основной и customer_profile.Также у меня есть тип узла с именем Customer.

При создании нового узла Customer я хотел бы загрузить форму custom_profile.Идея состоит в том, чтобы создать узел и профиль одновременно.

Я знаю, что это определенно решение hook_form_alter, но кто-то может сказать мне, как программно загрузить профиль при создании или редактировании узла Customer.

Ответы [ 5 ]

4 голосов
/ 11 января 2013

Вы можете загрузить тип профиля и данные, используя эти функции

$types = profile2_get_types();
profile2_load_by_user($account, $type_name = NULL)

Например:

$types = profile2_get_types();
    if (!empty($types)) {
        foreach ($types as $type) {
            $profile = profile2_load_by_user($uid, $type->type);
        }
    }
0 голосов
/ 18 октября 2017

Хорошо. При создании нового профиля поля Profile2 не отображаются, пока не будет выполнено ручное сохранение.

Для автоматического создания объекта profile2, мы используем правила модуля
Шаг
1) Зайдите в Drupal admin / config / workflow / rules
2) создать новое правило
3) Укажите имя и выберите в реакции / событии «После сохранения новой учетной записи пользователя»
4) Действие >> Добавить действие >> Выполнить пользовательский код PHP
5) вставьте php код $profile = profile_create(array('type' => 'profile2 type machine name', 'uid' => $account->uid)); profile2_save($profile);
6) Сохранить >> Сохранить изменения.
Это создаст поле profile2 при создании нового пользователя.

0 голосов
/ 01 марта 2017

Вы можете загрузить полные данные профиля, используя profile2_load_by_user ();такие параметры, как: -

profile2_load_by_user($account,$type_name)
$account: The user account to load profiles for, or its uid.
$type_name: To load a single profile, pass the type name of the profile to load

Так код, как показано ниже

$account->uid = $existingUser->uid;
$type_name = 'user_about';
$profile =  profile2_load_by_user($account, $type_name);
//$profile variable have full data of profile fields
//changing data profile2 fields 
if(isset($_POST['field_user_first_name'])&& !empty($_POST['field_user_first_name'])){
    $profile->field_user_first_name['und'][0]['value'] = $_POST['field_user_first_name'];
}
profile2_save($profile);
0 голосов
/ 06 декабря 2012

У меня была аналогичная необходимость создания настраиваемой вкладки на странице пользователя и загрузки в нее формы профиля пользователя2.

Вот краткий код того, как мне удалось сделать именно это:

MYMODULE.module https://gist.github.com/4223234

MYMODULE_profile2_MYPROFILE2TYPE.inc https://gist.github.com/4223201

Надеюсь, это поможет.

0 голосов
/ 21 июня 2012

Даже если вы можете загрузить форму customer_profile, вам нужно будет обрабатывать значения отдельно, так как это два разных узла.

Я бы предложил захватить эти поля в форме узла клиента, а затем программно создать customer_profile из значений.

Если вы хотите получить саму форму profile2, вы можете использовать что-то вроде

module_load_include('inc', 'profile2_page', 'profile2_page');
$profile2 = profile2_by_uid_load($uid, 'seeker_profile');
$entity_form = entity_ui_get_form('profile2', $profile2, 'edit');

, а затем добавьте это в форму, в которую вы хотите поместить его.

...